int down(int *f) {
  int x, a = 0;
  for (int i = 0; i < 4; i++) {
    if (*(f + 12 + i) == 0)
      if ((*(f + 8 + i) != 0) || (*(f + 4 + i) != 0) || (*(f + i) != 0))
        a = 1;
    if (*(f + 8 + i) == 0)
      if ((*(f + 4 + i) != 0) || (*(f + i) != 0))
        a = 1;
    if (*(f + 4 + i) == 0)
      if ((*(f + i) != 0))
        a = 1;
    if (((*(f + 12 + i)) == (*(f + 8 + i))) && ((*(f + 12 + i) != 0)))
      a = 1;
    if (((*(f + 8 + i)) == (*(f + 4 + i))) && ((*(f + 8 + i) != 0)))
      a = 1;
    if (((*(f + 4 + i)) == (*(f + i))) && ((*(f + 4 + i) != 0)))
      a = 1;
  }
  for (x = 0; x < 4; x++) {
    for (int i = 0; i < 3; i++) {
      if (*(f + 12 + x) == 0) {
        *(f + 12 + x) = *(f + 8 + x);
        *(f + 8 + x) = *(f + 4 + x);
        *(f + 4 + x) = *(f + x);
        *(f + x) = 0;
      }
      if (*(f + 8 + x) == 0) {
        *(f + 8 + x) = *(f + 4 + x);
        *(f + 4 + x) = *(f + x);
        *(f + x) = 0;
      }
      if (*(f + 4 + x) == 0) {
        *(f + 4 + x) = *(f + x);
        *(f + x) = 0;
      }
    }
  }
  for (x = 0; x < 4; x++) {
    if (*(f + 12 + x) == *(f + 8 + x)) {
      *(f + 12 + x) += *(f + 8 + x);
      *(f + 8 + x) = *(f + 4 + x);
      *(f + 4 + x) = *(f + x);
      *(f + x) = 0;
    }
    if (*(f + 8 + x) == *(f + 4 + x)) {
      *(f + 8 + x) += *(f + 4 + x);
      *(f + 4 + x) = *(f + x);
      *(f + x) = 0;
    }
    if (*(f + 4 + x) == *(f + x)) {
      *(f + 4 + x) += *(f + x);
      *(f + x) = 0;
    }
    for (int i = 0; i < 2; i++) {
      if (*(f + 12 + x) == 0) {
        *(f + 12 + x) = *(f + 8 + x);
        *(f + 8 + x) = *(f + 4 + x);
        *(f + 4 + x) = *(f + x);
        *(f + x) = 0;
      }
      if (*(f + 8 + x) == 0) {
        *(f + 8 + x) = *(f + 4 + x);
        *(f + 4 + x) = *(f + x);
        *(f + x) = 0;
      }
      if (*(f + 4 + x) == 0) {
        *(f + 4 + x) = *(f + x);
        *(f + x) = 0;
      }
    }
  }
  return a;
}


x86 assembly (clang, -O0):
<down>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x4,-0x14(%rbp)
jge    12a6 <down+0x1a6>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x30(%rax,%rcx,4)
jne    1177 <down+0x77>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
jne    116b <down+0x6b>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
jne    116b <down+0x6b>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1172 <down+0x72>
movl   $0x1,-0x10(%rbp)
jmp    1177 <down+0x77>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
jne    11bb <down+0xbb>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
jne    11af <down+0xaf>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     11b6 <down+0xb6>
movl   $0x1,-0x10(%rbp)
jmp    11bb <down+0xbb>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
jne    11ec <down+0xec>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     11e7 <down+0xe7>
movl   $0x1,-0x10(%rbp)
jmp    11ec <down+0xec>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    0x30(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0x14(%rbp),%rdx
cmp    0x20(%rcx,%rdx,4),%eax
jne    1224 <down+0x124>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x30(%rax,%rcx,4)
je     1224 <down+0x124>
movl   $0x1,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    0x20(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0x14(%rbp),%rdx
cmp    0x10(%rcx,%rdx,4),%eax
jne    125c <down+0x15c>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
je     125c <down+0x15c>
movl   $0x1,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0x14(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jne    1293 <down+0x193>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
je     1293 <down+0x193>
movl   $0x1,-0x10(%rbp)
jmp    1298 <down+0x198>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1116 <down+0x16>
movl   $0x0,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jge    13e1 <down+0x2e1>
movl   $0x0,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jge    13ce <down+0x2ce>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x30(%rax,%rcx,4)
jne    1331 <down+0x231>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x30(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x20(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
jne    1382 <down+0x282>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x20(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
jne    13bb <down+0x2bb>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    13c0 <down+0x2c0>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12be <down+0x1be>
jmp    13d3 <down+0x2d3>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12ad <down+0x1ad>
movl   $0x0,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jge    163b <down+0x53b>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x30(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0xc(%rbp),%rdx
cmp    0x20(%rcx,%rdx,4),%eax
jne    146a <down+0x36a>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    0x30(%rax,%rcx,4),%edx
mov    %edx,0x30(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x20(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0xc(%rbp),%rdx
cmp    0x10(%rcx,%rdx,4),%eax
jne    14ca <down+0x3ca>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    0x20(%rax,%rcx,4),%edx
mov    %edx,0x20(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0xc(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jne    1511 <down+0x411>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    0x10(%rax,%rcx,4),%edx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x2,-0x1c(%rbp)
jge    1628 <down+0x528>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x30(%rax,%rcx,4)
jne    158b <down+0x48b>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x30(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x20(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
jne    15dc <down+0x4dc>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x20(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
jne    1615 <down+0x515>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    161a <down+0x51a>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1518 <down+0x418>
jmp    162d <down+0x52d>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13e8 <down+0x2e8>
mov    -0x10(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<down>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x20(%rdi),%edx
mov    0x30(%rdi),%r9d
test   %r9d,%r9d
je     111e <down+0x1e>
xor    %ecx,%ecx
test   %edx,%edx
jne    1127 <down+0x27>
jmp    1147 <down+0x47>
mov    $0x1,%ecx
test   %edx,%edx
je     1133 <down+0x33>
mov    0x10(%rdi),%ebp
xor    %r8d,%r8d
test   %ebp,%ebp
jne    1158 <down+0x58>
jmp    116e <down+0x6e>
cmpl   $0x0,0x10(%rdi)
jne    1142 <down+0x42>
cmpl   $0x0,(%rdi)
je     1677 <down+0x577>
mov    $0x1,%ecx
mov    0x10(%rdi),%ebp
test   %ebp,%ebp
je     115e <down+0x5e>
mov    $0x1,%r8b
xor    %edx,%edx
mov    $0x1,%ecx
mov    (%rdi),%ebx
xor    %eax,%eax
jmp    117e <down+0x7e>
cmpl   $0x0,(%rdi)
mov    $0x1,%eax
cmovne %eax,%ecx
mov    $0x1,%r8b
xor    %edx,%edx
mov    (%rdi),%ebx
test   %ebx,%ebx
mov    $0x1,%eax
cmovne %eax,%ecx
xor    %ebp,%ebp
mov    $0x1,%al
cmp    %edx,%r9d
mov    $0x1,%esi
cmovne %ecx,%esi
test   %r9d,%r9d
cmove  %ecx,%esi
cmp    %ebp,%edx
mov    $0x1,%ecx
cmovne %esi,%ecx
test   %r8b,%r8b
cmovne %esi,%ecx
cmp    %ebx,%ebp
mov    $0x1,%esi
cmovne %ecx,%esi
test   %al,%al
cmovne %ecx,%esi
mov    $0x1,%ecx
mov    0x24(%rdi),%edx
mov    0x34(%rdi),%r8d
test   %r8d,%r8d
je     11c7 <down+0xc7>
mov    %esi,%ecx
test   %edx,%edx
jne    11cb <down+0xcb>
jmp    11e8 <down+0xe8>
test   %edx,%edx
je     11d7 <down+0xd7>
mov    0x14(%rdi),%ebp
xor    %r9d,%r9d
test   %ebp,%ebp
jne    11f9 <down+0xf9>
jmp    1211 <down+0x111>
cmpl   $0x0,0x14(%rdi)
jne    11e3 <down+0xe3>
cmpl   $0x0,0x4(%rdi)
je     11e8 <down+0xe8>
mov    $0x1,%esi
mov    0x14(%rdi),%ebp
test   %ebp,%ebp
je     1200 <down+0x100>
mov    $0x1,%r9b
xor    %edx,%edx
mov    $0x1,%ecx
mov    0x4(%rdi),%ebx
xor    %eax,%eax
jmp    1222 <down+0x122>
cmpl   $0x0,0x4(%rdi)
mov    $0x1,%ecx
cmove  %esi,%ecx
mov    $0x1,%r9b
xor    %edx,%edx
mov    0x4(%rdi),%ebx
test   %ebx,%ebx
mov    $0x1,%eax
cmovne %eax,%ecx
xor    %ebp,%ebp
mov    $0x1,%al
cmp    %edx,%r8d
mov    $0x1,%esi
cmovne %ecx,%esi
test   %r8d,%r8d
cmove  %ecx,%esi
cmp    %ebp,%edx
mov    $0x1,%ecx
cmovne %esi,%ecx
test   %r9b,%r9b
cmovne %esi,%ecx
cmp    %ebx,%ebp
mov    $0x1,%esi
cmovne %ecx,%esi
test   %al,%al
cmovne %ecx,%esi
mov    $0x1,%ecx
mov    0x28(%rdi),%edx
mov    0x38(%rdi),%r9d
test   %r9d,%r9d
je     126b <down+0x16b>
mov    %esi,%ecx
test   %edx,%edx
jne    126f <down+0x16f>
jmp    128c <down+0x18c>
test   %edx,%edx
je     127b <down+0x17b>
mov    0x18(%rdi),%ebp
xor    %r8d,%r8d
test   %ebp,%ebp
jne    129d <down+0x19d>
jmp    12b5 <down+0x1b5>
cmpl   $0x0,0x18(%rdi)
jne    1287 <down+0x187>
cmpl   $0x0,0x8(%rdi)
je     128c <down+0x18c>
mov    $0x1,%esi
mov    0x18(%rdi),%ebp
test   %ebp,%ebp
je     12a4 <down+0x1a4>
mov    $0x1,%r8b
xor    %edx,%edx
mov    $0x1,%ecx
mov    0x8(%rdi),%ebx
xor    %esi,%esi
jmp    12c7 <down+0x1c7>
cmpl   $0x0,0x8(%rdi)
mov    $0x1,%ecx
cmove  %esi,%ecx
mov    $0x1,%r8b
xor    %edx,%edx
mov    0x8(%rdi),%ebx
test   %ebx,%ebx
mov    $0x1,%esi
cmovne %esi,%ecx
xor    %ebp,%ebp
mov    $0x1,%sil
cmp    %edx,%r9d
mov    $0x1,%eax
cmovne %ecx,%eax
test   %r9d,%r9d
cmove  %ecx,%eax
cmp    %ebp,%edx
mov    $0x1,%ecx
cmovne %eax,%ecx
test   %r8b,%r8b
cmovne %eax,%ecx
cmp    %ebx,%ebp
mov    $0x1,%eax
cmovne %ecx,%eax
test   %sil,%sil
cmovne %ecx,%eax
mov    $0x1,%r12d
mov    0x2c(%rdi),%r14d
mov    0x3c(%rdi),%r11d
test   %r11d,%r11d
je     1315 <down+0x215>
mov    %eax,%r12d
test   %r14d,%r14d
jne    131a <down+0x21a>
jmp    1339 <down+0x239>
test   %r14d,%r14d
je     1328 <down+0x228>
mov    0x1c(%rdi),%r15d
xor    %r8d,%r8d
test   %r15d,%r15d
jne    134e <down+0x24e>
jmp    136b <down+0x26b>
cmpl   $0x0,0x1c(%rdi)
jne    1334 <down+0x234>
cmpl   $0x0,0xc(%rdi)
je     1339 <down+0x239>
mov    $0x1,%eax
mov    0x1c(%rdi),%r15d
test   %r15d,%r15d
je     1357 <down+0x257>
mov    $0x1,%r8b
xor    %r14d,%r14d
mov    $0x1,%r12d
mov    0xc(%rdi),%r9d
xor    %r10d,%r10d
jmp    1381 <down+0x281>
cmpl   $0x0,0xc(%rdi)
mov    $0x1,%r12d
cmove  %eax,%r12d
mov    $0x1,%r8b
xor    %r14d,%r14d
mov    0xc(%rdi),%r9d
test   %r9d,%r9d
mov    $0x1,%eax
cmovne %eax,%r12d
xor    %r15d,%r15d
mov    $0x1,%r10b
xor    %eax,%eax
jmp    139e <down+0x29e>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rax
cmp    $0x4,%rax
je     14db <down+0x3db>
mov    0x30(%rdi,%rax,4),%esi
mov    0x10(%rdi,%rax,4),%ecx
mov    0x20(%rdi,%rax,4),%edx
test   %esi,%esi
je     1400 <down+0x300>
mov    %ecx,%ebx
mov    %edx,%ecx
mov    %esi,%edx
test   %ecx,%ecx
je     141a <down+0x31a>
mov    %ebx,%esi
mov    %ecx,%ebx
test   %esi,%esi
je     1430 <down+0x330>
test   %edx,%edx
je     1442 <down+0x342>
mov    %esi,%ecx
mov    %ebx,%esi
mov    %edx,%ebx
test   %esi,%esi
je     1460 <down+0x360>
mov    %ecx,%edx
mov    %esi,%ecx
test   %edx,%edx
je     147a <down+0x37a>
test   %ebx,%ebx
je     1490 <down+0x390>
mov    %edx,%esi
mov    %ecx,%edx
test   %edx,%edx
je     14ae <down+0x3ae>
test   %esi,%esi
jne    1390 <down+0x290>
jmp    14c8 <down+0x3c8>
nopl   0x0(%rax,%rax,1)
mov    %edx,0x30(%rdi,%rax,4)
mov    %ecx,0x20(%rdi,%rax,4)
mov    (%rdi,%rax,4),%ebx
mov    %ebx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
test   %ecx,%ecx
jne    13b8 <down+0x2b8>
mov    %ebx,0x20(%rdi,%rax,4)
mov    (%rdi,%rax,4),%esi
mov    %esi,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
test   %esi,%esi
jne    13c0 <down+0x2c0>
mov    (%rdi,%rax,4),%esi
mov    %esi,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
test   %edx,%edx
jne    13c4 <down+0x2c4>
mov    %ebx,0x30(%rdi,%rax,4)
mov    %esi,0x20(%rdi,%rax,4)
mov    (%rdi,%rax,4),%ecx
mov    %ecx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
test   %esi,%esi
jne    13d2 <down+0x2d2>
mov    %ecx,0x20(%rdi,%rax,4)
mov    (%rdi,%rax,4),%edx
mov    %edx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
test   %edx,%edx
jne    13de <down+0x2de>
mov    (%rdi,%rax,4),%edx
mov    %edx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
test   %ebx,%ebx
jne    13e6 <down+0x2e6>
mov    %ecx,0x30(%rdi,%rax,4)
mov    %edx,0x20(%rdi,%rax,4)
mov    (%rdi,%rax,4),%esi
mov    %esi,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
test   %edx,%edx
jne    13f2 <down+0x2f2>
mov    %esi,0x20(%rdi,%rax,4)
mov    (%rdi,%rax,4),%esi
mov    %esi,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
test   %esi,%esi
jne    1390 <down+0x290>
mov    (%rdi,%rax,4),%ecx
mov    %ecx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
jmp    1390 <down+0x290>
xor    %eax,%eax
jmp    14ee <down+0x3ee>
nop
add    $0x1,%rax
cmp    $0x4,%rax
je     1637 <down+0x537>
mov    0x20(%rdi,%rax,4),%ebp
mov    0x30(%rdi,%rax,4),%edx
cmp    %ebp,%edx
jne    1530 <down+0x430>
add    %edx,%edx
mov    %edx,0x30(%rdi,%rax,4)
mov    (%rdi,%rax,4),%ebx
mov    0x10(%rdi,%rax,4),%ebp
mov    %ebp,0x20(%rdi,%rax,4)
mov    %ebx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
cmp    %ebx,%ebp
je     1538 <down+0x438>
mov    (%rdi,%rax,4),%esi
cmp    %esi,%ebx
je     1554 <down+0x454>
jmp    1565 <down+0x465>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x10(%rdi,%rax,4),%ebx
cmp    %ebx,%ebp
jne    151a <down+0x41a>
add    %ebx,%ebx
mov    %ebx,0x20(%rdi,%rax,4)
mov    %ebx,%ebp
mov    (%rdi,%rax,4),%ebx
mov    %ebx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
xor    %esi,%esi
cmp    %esi,%ebx
jne    1565 <down+0x465>
mov    %esi,%ebx
add    %esi,%ebx
mov    %ebx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
xor    %esi,%esi
mov    $0x1,%r13d
test   %edx,%edx
je     15b0 <down+0x4b0>
mov    %esi,%ecx
mov    %ebx,%esi
mov    %ebp,%ebx
test   %ebx,%ebx
je     15cc <down+0x4cc>
mov    %ecx,%edx
mov    %esi,%ecx
test   %ecx,%ecx
je     15e3 <down+0x4e3>
mov    %edx,%esi
mov    %ecx,%edx
test   %r13d,%r13d
je     15f5 <down+0x4f5>
mov    %esi,%ecx
mov    %edx,%esi
mov    %ebx,%edx
test   %edx,%edx
je     160e <down+0x50e>
mov    %ecx,%edx
mov    %esi,%ecx
test   %ecx,%ecx
jne    14e0 <down+0x3e0>
jmp    1627 <down+0x527>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ebp,0x30(%rdi,%rax,4)
mov    %ebx,0x20(%rdi,%rax,4)
mov    %esi,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
xor    %ecx,%ecx
mov    %ebp,%r13d
test   %ebx,%ebx
jne    1579 <down+0x479>
mov    %esi,0x20(%rdi,%rax,4)
mov    %ecx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
xor    %edx,%edx
mov    %esi,%ebx
test   %ecx,%ecx
jne    1581 <down+0x481>
mov    %edx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
xor    %esi,%esi
test   %r13d,%r13d
jne    158a <down+0x48a>
mov    %ebx,0x30(%rdi,%rax,4)
mov    %edx,0x20(%rdi,%rax,4)
mov    %esi,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
xor    %ecx,%ecx
test   %edx,%edx
jne    1594 <down+0x494>
mov    %esi,0x20(%rdi,%rax,4)
mov    %ecx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
xor    %edx,%edx
test   %ecx,%ecx
jne    14e0 <down+0x3e0>
mov    %edx,0x10(%rdi,%rax,4)
movl   $0x0,(%rdi,%rax,4)
jmp    14e0 <down+0x3e0>
cmp    %r14d,%r11d
mov    $0x1,%eax
cmovne %r12d,%eax
test   %r11d,%r11d
cmove  %r12d,%eax
cmp    %r15d,%r14d
mov    $0x1,%ecx
cmovne %eax,%ecx
test   %r8b,%r8b
cmovne %eax,%ecx
mov    $0x1,%eax
cmp    %r9d,%r15d
cmovne %ecx,%eax
test   %r10b,%r10b
cmovne %ecx,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %ecx,%ecx
jmp    1147 <down+0x47>

LLVM IR (-O0):
define i32 @down(i32* %0) {
%2 = alloca i32*
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i32* %0, i32** %2
store i32 0, i32* %4
store i32 0, i32* %5
br label %8
8: ; preds = %155, %1
%9 = load i32, i32* %5
%10 = icmp slt i32 %9, 4
br i1 %10, label %11, label %158
11: ; preds = %8
%12 = load i32*, i32** %2
%13 = getelementptr inbounds i32, i32* %12, i64 12
%14 = load i32, i32* %5
%15 = sext i32 %14 to i64
%16 = getelementptr inbounds i32, i32* %13, i64 %15
%17 = load i32, i32* %16
%18 = icmp eq i32 %17, 0
br i1 %18, label %19, label %44
19: ; preds = %11
%20 = load i32*, i32** %2
%21 = getelementptr inbounds i32, i32* %20, i64 8
%22 = load i32, i32* %5
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds i32, i32* %21, i64 %23
%25 = load i32, i32* %24
%26 = icmp ne i32 %25, 0
br i1 %26, label %42, label %27
27: ; preds = %19
%28 = load i32*, i32** %2
%29 = getelementptr inbounds i32, i32* %28, i64 4
%30 = load i32, i32* %5
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i32, i32* %29, i64 %31
%33 = load i32, i32* %32
%34 = icmp ne i32 %33, 0
br i1 %34, label %42, label %35
35: ; preds = %27
%36 = load i32*, i32** %2
%37 = load i32, i32* %5
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i32, i32* %36, i64 %38
%40 = load i32, i32* %39
%41 = icmp ne i32 %40, 0
br i1 %41, label %42, label %43
42: ; preds = %35, %27, %19
store i32 1, i32* %4
br label %43
43: ; preds = %42, %35
br label %44
44: ; preds = %43, %11
%45 = load i32*, i32** %2
%46 = getelementptr inbounds i32, i32* %45, i64 8
%47 = load i32, i32* %5
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds i32, i32* %46, i64 %48
%50 = load i32, i32* %49
%51 = icmp eq i32 %50, 0
br i1 %51, label %52, label %69
52: ; preds = %44
%53 = load i32*, i32** %2
%54 = getelementptr inbounds i32, i32* %53, i64 4
%55 = load i32, i32* %5
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i32, i32* %54, i64 %56
%58 = load i32, i32* %57
%59 = icmp ne i32 %58, 0
br i1 %59, label %67, label %60
60: ; preds = %52
%61 = load i32*, i32** %2
%62 = load i32, i32* %5
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i32, i32* %61, i64 %63
%65 = load i32, i32* %64
%66 = icmp ne i32 %65, 0
br i1 %66, label %67, label %68
67: ; preds = %60, %52
store i32 1, i32* %4
br label %68
68: ; preds = %67, %60
br label %69
69: ; preds = %68, %44
%70 = load i32*, i32** %2
%71 = getelementptr inbounds i32, i32* %70, i64 4
%72 = load i32, i32* %5
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i32, i32* %71, i64 %73
%75 = load i32, i32* %74
%76 = icmp eq i32 %75, 0
br i1 %76, label %77, label %86
77: ; preds = %69
%78 = load i32*, i32** %2
%79 = load i32, i32* %5
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds i32, i32* %78, i64 %80
%82 = load i32, i32* %81
%83 = icmp ne i32 %82, 0
br i1 %83, label %84, label %85
84: ; preds = %77
store i32 1, i32* %4
br label %85
85: ; preds = %84, %77
br label %86
86: ; preds = %85, %69
%87 = load i32*, i32** %2
%88 = getelementptr inbounds i32, i32* %87, i64 12
%89 = load i32, i32* %5
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds i32, i32* %88, i64 %90
%92 = load i32, i32* %91
%93 = load i32*, i32** %2
%94 = getelementptr inbounds i32, i32* %93, i64 8
%95 = load i32, i32* %5
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i32, i32* %94, i64 %96
%98 = load i32, i32* %97
%99 = icmp eq i32 %92, %98
br i1 %99, label %100, label %109
100: ; preds = %86
%101 = load i32*, i32** %2
%102 = getelementptr inbounds i32, i32* %101, i64 12
%103 = load i32, i32* %5
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i32, i32* %102, i64 %104
%106 = load i32, i32* %105
%107 = icmp ne i32 %106, 0
br i1 %107, label %108, label %109
108: ; preds = %100
store i32 1, i32* %4
br label %109
109: ; preds = %108, %100, %86
%110 = load i32*, i32** %2
%111 = getelementptr inbounds i32, i32* %110, i64 8
%112 = load i32, i32* %5
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i32, i32* %111, i64 %113
%115 = load i32, i32* %114
%116 = load i32*, i32** %2
%117 = getelementptr inbounds i32, i32* %116, i64 4
%118 = load i32, i32* %5
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds i32, i32* %117, i64 %119
%121 = load i32, i32* %120
%122 = icmp eq i32 %115, %121
br i1 %122, label %123, label %132
123: ; preds = %109
%124 = load i32*, i32** %2
%125 = getelementptr inbounds i32, i32* %124, i64 8
%126 = load i32, i32* %5
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds i32, i32* %125, i64 %127
%129 = load i32, i32* %128
%130 = icmp ne i32 %129, 0
br i1 %130, label %131, label %132
131: ; preds = %123
store i32 1, i32* %4
br label %132
132: ; preds = %131, %123, %109
%133 = load i32*, i32** %2
%134 = getelementptr inbounds i32, i32* %133, i64 4
%135 = load i32, i32* %5
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds i32, i32* %134, i64 %136
%138 = load i32, i32* %137
%139 = load i32*, i32** %2
%140 = load i32, i32* %5
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds i32, i32* %139, i64 %141
%143 = load i32, i32* %142
%144 = icmp eq i32 %138, %143
br i1 %144, label %145, label %154
145: ; preds = %132
%146 = load i32*, i32** %2
%147 = getelementptr inbounds i32, i32* %146, i64 4
%148 = load i32, i32* %5
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds i32, i32* %147, i64 %149
%151 = load i32, i32* %150
%152 = icmp ne i32 %151, 0
br i1 %152, label %153, label %154
153: ; preds = %145
store i32 1, i32* %4
br label %154
154: ; preds = %153, %145, %132
br label %155
155: ; preds = %154
%156 = load i32, i32* %5
%157 = add nsw i32 %156, 1
store i32 %157, i32* %5
br label %8
158: ; preds = %8
store i32 0, i32* %3
br label %159
159: ; preds = %273, %158
%160 = load i32, i32* %3
%161 = icmp slt i32 %160, 4
br i1 %161, label %162, label %276
162: ; preds = %159
store i32 0, i32* %6
br label %163
163: ; preds = %269, %162
%164 = load i32, i32* %6
%165 = icmp slt i32 %164, 3
br i1 %165, label %166, label %272
166: ; preds = %163
%167 = load i32*, i32** %2
%168 = getelementptr inbounds i32, i32* %167, i64 12
%169 = load i32, i32* %3
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds i32, i32* %168, i64 %170
%172 = load i32, i32* %171
%173 = icmp eq i32 %172, 0
br i1 %173, label %174, label %211
174: ; preds = %166
%175 = load i32*, i32** %2
%176 = getelementptr inbounds i32, i32* %175, i64 8
%177 = load i32, i32* %3
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds i32, i32* %176, i64 %178
%180 = load i32, i32* %179
%181 = load i32*, i32** %2
%182 = getelementptr inbounds i32, i32* %181, i64 12
%183 = load i32, i32* %3
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds i32, i32* %182, i64 %184
store i32 %180, i32* %185
%186 = load i32*, i32** %2
%187 = getelementptr inbounds i32, i32* %186, i64 4
%188 = load i32, i32* %3
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds i32, i32* %187, i64 %189
%191 = load i32, i32* %190
%192 = load i32*, i32** %2
%193 = getelementptr inbounds i32, i32* %192, i64 8
%194 = load i32, i32* %3
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds i32, i32* %193, i64 %195
store i32 %191, i32* %196
%197 = load i32*, i32** %2
%198 = load i32, i32* %3
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds i32, i32* %197, i64 %199
%201 = load i32, i32* %200
%202 = load i32*, i32** %2
%203 = getelementptr inbounds i32, i32* %202, i64 4
%204 = load i32, i32* %3
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds i32, i32* %203, i64 %205
store i32 %201, i32* %206
%207 = load i32*, i32** %2
%208 = load i32, i32* %3
%209 = sext i32 %208 to i64
%210 = getelementptr inbounds i32, i32* %207, i64 %209
store i32 0, i32* %210
br label %211
211: ; preds = %174, %166
%212 = load i32*, i32** %2
%213 = getelementptr inbounds i32, i32* %212, i64 8
%214 = load i32, i32* %3
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds i32, i32* %213, i64 %215
%217 = load i32, i32* %216
%218 = icmp eq i32 %217, 0
br i1 %218, label %219, label %245
219: ; preds = %211
%220 = load i32*, i32** %2
%221 = getelementptr inbounds i32, i32* %220, i64 4
%222 = load i32, i32* %3
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds i32, i32* %221, i64 %223
%225 = load i32, i32* %224
%226 = load i32*, i32** %2
%227 = getelementptr inbounds i32, i32* %226, i64 8
%228 = load i32, i32* %3
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds i32, i32* %227, i64 %229
store i32 %225, i32* %230
%231 = load i32*, i32** %2
%232 = load i32, i32* %3
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i32, i32* %231, i64 %233
%235 = load i32, i32* %234
%236 = load i32*, i32** %2
%237 = getelementptr inbounds i32, i32* %236, i64 4
%238 = load i32, i32* %3
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds i32, i32* %237, i64 %239
store i32 %235, i32* %240
%241 = load i32*, i32** %2
%242 = load i32, i32* %3
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds i32, i32* %241, i64 %243
store i32 0, i32* %244
br label %245
245: ; preds = %219, %211
%246 = load i32*, i32** %2
%247 = getelementptr inbounds i32, i32* %246, i64 4
%248 = load i32, i32* %3
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds i32, i32* %247, i64 %249
%251 = load i32, i32* %250
%252 = icmp eq i32 %251, 0
br i1 %252, label %253, label %268
253: ; preds = %245
%254 = load i32*, i32** %2
%255 = load i32, i32* %3
%256 = sext i32 %255 to i64
%257 = getelementptr inbounds i32, i32* %254, i64 %256
%258 = load i32, i32* %257
%259 = load i32*, i32** %2
%260 = getelementptr inbounds i32, i32* %259, i64 4
%261 = load i32, i32* %3
%262 = sext i32 %261 to i64
%263 = getelementptr inbounds i32, i32* %260, i64 %262
store i32 %258, i32* %263
%264 = load i32*, i32** %2
%265 = load i32, i32* %3
%266 = sext i32 %265 to i64
%267 = getelementptr inbounds i32, i32* %264, i64 %266
store i32 0, i32* %267
br label %268
268: ; preds = %253, %245
br label %269
269: ; preds = %268
%270 = load i32, i32* %6
%271 = add nsw i32 %270, 1
store i32 %271, i32* %6
br label %163
272: ; preds = %163
br label %273
273: ; preds = %272
%274 = load i32, i32* %3
%275 = add nsw i32 %274, 1
store i32 %275, i32* %3
br label %159
276: ; preds = %159
store i32 0, i32* %3
br label %277
277: ; preds = %516, %276
%278 = load i32, i32* %3
%279 = icmp slt i32 %278, 4
br i1 %279, label %280, label %519
280: ; preds = %277
%281 = load i32*, i32** %2
%282 = getelementptr inbounds i32, i32* %281, i64 12
%283 = load i32, i32* %3
%284 = sext i32 %283 to i64
%285 = getelementptr inbounds i32, i32* %282, i64 %284
%286 = load i32, i32* %285
%287 = load i32*, i32** %2
%288 = getelementptr inbounds i32, i32* %287, i64 8
%289 = load i32, i32* %3
%290 = sext i32 %289 to i64
%291 = getelementptr inbounds i32, i32* %288, i64 %290
%292 = load i32, i32* %291
%293 = icmp eq i32 %286, %292
br i1 %293, label %294, label %333
294: ; preds = %280
%295 = load i32*, i32** %2
%296 = getelementptr inbounds i32, i32* %295, i64 8
%297 = load i32, i32* %3
%298 = sext i32 %297 to i64
%299 = getelementptr inbounds i32, i32* %296, i64 %298
%300 = load i32, i32* %299
%301 = load i32*, i32** %2
%302 = getelementptr inbounds i32, i32* %301, i64 12
%303 = load i32, i32* %3
%304 = sext i32 %303 to i64
%305 = getelementptr inbounds i32, i32* %302, i64 %304
%306 = load i32, i32* %305
%307 = add nsw i32 %306, %300
store i32 %307, i32* %305
%308 = load i32*, i32** %2
%309 = getelementptr inbounds i32, i32* %308, i64 4
%310 = load i32, i32* %3
%311 = sext i32 %310 to i64
%312 = getelementptr inbounds i32, i32* %309, i64 %311
%313 = load i32, i32* %312
%314 = load i32*, i32** %2
%315 = getelementptr inbounds i32, i32* %314, i64 8
%316 = load i32, i32* %3
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds i32, i32* %315, i64 %317
store i32 %313, i32* %318
%319 = load i32*, i32** %2
%320 = load i32, i32* %3
%321 = sext i32 %320 to i64
%322 = getelementptr inbounds i32, i32* %319, i64 %321
%323 = load i32, i32* %322
%324 = load i32*, i32** %2
%325 = getelementptr inbounds i32, i32* %324, i64 4
%326 = load i32, i32* %3
%327 = sext i32 %326 to i64
%328 = getelementptr inbounds i32, i32* %325, i64 %327
store i32 %323, i32* %328
%329 = load i32*, i32** %2
%330 = load i32, i32* %3
%331 = sext i32 %330 to i64
%332 = getelementptr inbounds i32, i32* %329, i64 %331
store i32 0, i32* %332
br label %333
333: ; preds = %294, %280
%334 = load i32*, i32** %2
%335 = getelementptr inbounds i32, i32* %334, i64 8
%336 = load i32, i32* %3
%337 = sext i32 %336 to i64
%338 = getelementptr inbounds i32, i32* %335, i64 %337
%339 = load i32, i32* %338
%340 = load i32*, i32** %2
%341 = getelementptr inbounds i32, i32* %340, i64 4
%342 = load i32, i32* %3
%343 = sext i32 %342 to i64
%344 = getelementptr inbounds i32, i32* %341, i64 %343
%345 = load i32, i32* %344
%346 = icmp eq i32 %339, %345
br i1 %346, label %347, label %375
347: ; preds = %333
%348 = load i32*, i32** %2
%349 = getelementptr inbounds i32, i32* %348, i64 4
%350 = load i32, i32* %3
%351 = sext i32 %350 to i64
%352 = getelementptr inbounds i32, i32* %349, i64 %351
%353 = load i32, i32* %352
%354 = load i32*, i32** %2
%355 = getelementptr inbounds i32, i32* %354, i64 8
%356 = load i32, i32* %3
%357 = sext i32 %356 to i64
%358 = getelementptr inbounds i32, i32* %355, i64 %357
%359 = load i32, i32* %358
%360 = add nsw i32 %359, %353
store i32 %360, i32* %358
%361 = load i32*, i32** %2
%362 = load i32, i32* %3
%363 = sext i32 %362 to i64
%364 = getelementptr inbounds i32, i32* %361, i64 %363
%365 = load i32, i32* %364
%366 = load i32*, i32** %2
%367 = getelementptr inbounds i32, i32* %366, i64 4
%368 = load i32, i32* %3
%369 = sext i32 %368 to i64
%370 = getelementptr inbounds i32, i32* %367, i64 %369
store i32 %365, i32* %370
%371 = load i32*, i32** %2
%372 = load i32, i32* %3
%373 = sext i32 %372 to i64
%374 = getelementptr inbounds i32, i32* %371, i64 %373
store i32 0, i32* %374
br label %375
375: ; preds = %347, %333
%376 = load i32*, i32** %2
%377 = getelementptr inbounds i32, i32* %376, i64 4
%378 = load i32, i32* %3
%379 = sext i32 %378 to i64
%380 = getelementptr inbounds i32, i32* %377, i64 %379
%381 = load i32, i32* %380
%382 = load i32*, i32** %2
%383 = load i32, i32* %3
%384 = sext i32 %383 to i64
%385 = getelementptr inbounds i32, i32* %382, i64 %384
%386 = load i32, i32* %385
%387 = icmp eq i32 %381, %386
br i1 %387, label %388, label %405
388: ; preds = %375
%389 = load i32*, i32** %2
%390 = load i32, i32* %3
%391 = sext i32 %390 to i64
%392 = getelementptr inbounds i32, i32* %389, i64 %391
%393 = load i32, i32* %392
%394 = load i32*, i32** %2
%395 = getelementptr inbounds i32, i32* %394, i64 4
%396 = load i32, i32* %3
%397 = sext i32 %396 to i64
%398 = getelementptr inbounds i32, i32* %395, i64 %397
%399 = load i32, i32* %398
%400 = add nsw i32 %399, %393
store i32 %400, i32* %398
%401 = load i32*, i32** %2
%402 = load i32, i32* %3
%403 = sext i32 %402 to i64
%404 = getelementptr inbounds i32, i32* %401, i64 %403
store i32 0, i32* %404
br label %405
405: ; preds = %388, %375
store i32 0, i32* %7
br label %406
406: ; preds = %512, %405
%407 = load i32, i32* %7
%408 = icmp slt i32 %407, 2
br i1 %408, label %409, label %515
409: ; preds = %406
%410 = load i32*, i32** %2
%411 = getelementptr inbounds i32, i32* %410, i64 12
%412 = load i32, i32* %3
%413 = sext i32 %412 to i64
%414 = getelementptr inbounds i32, i32* %411, i64 %413
%415 = load i32, i32* %414
%416 = icmp eq i32 %415, 0
br i1 %416, label %417, label %454
417: ; preds = %409
%418 = load i32*, i32** %2
%419 = getelementptr inbounds i32, i32* %418, i64 8
%420 = load i32, i32* %3
%421 = sext i32 %420 to i64
%422 = getelementptr inbounds i32, i32* %419, i64 %421
%423 = load i32, i32* %422
%424 = load i32*, i32** %2
%425 = getelementptr inbounds i32, i32* %424, i64 12
%426 = load i32, i32* %3
%427 = sext i32 %426 to i64
%428 = getelementptr inbounds i32, i32* %425, i64 %427
store i32 %423, i32* %428
%429 = load i32*, i32** %2
%430 = getelementptr inbounds i32, i32* %429, i64 4
%431 = load i32, i32* %3
%432 = sext i32 %431 to i64
%433 = getelementptr inbounds i32, i32* %430, i64 %432
%434 = load i32, i32* %433
%435 = load i32*, i32** %2
%436 = getelementptr inbounds i32, i32* %435, i64 8
%437 = load i32, i32* %3
%438 = sext i32 %437 to i64
%439 = getelementptr inbounds i32, i32* %436, i64 %438
store i32 %434, i32* %439
%440 = load i32*, i32** %2
%441 = load i32, i32* %3
%442 = sext i32 %441 to i64
%443 = getelementptr inbounds i32, i32* %440, i64 %442
%444 = load i32, i32* %443
%445 = load i32*, i32** %2
%446 = getelementptr inbounds i32, i32* %445, i64 4
%447 = load i32, i32* %3
%448 = sext i32 %447 to i64
%449 = getelementptr inbounds i32, i32* %446, i64 %448
store i32 %444, i32* %449
%450 = load i32*, i32** %2
%451 = load i32, i32* %3
%452 = sext i32 %451 to i64
%453 = getelementptr inbounds i32, i32* %450, i64 %452
store i32 0, i32* %453
br label %454
454: ; preds = %417, %409
%455 = load i32*, i32** %2
%456 = getelementptr inbounds i32, i32* %455, i64 8
%457 = load i32, i32* %3
%458 = sext i32 %457 to i64
%459 = getelementptr inbounds i32, i32* %456, i64 %458
%460 = load i32, i32* %459
%461 = icmp eq i32 %460, 0
br i1 %461, label %462, label %488
462: ; preds = %454
%463 = load i32*, i32** %2
%464 = getelementptr inbounds i32, i32* %463, i64 4
%465 = load i32, i32* %3
%466 = sext i32 %465 to i64
%467 = getelementptr inbounds i32, i32* %464, i64 %466
%468 = load i32, i32* %467
%469 = load i32*, i32** %2
%470 = getelementptr inbounds i32, i32* %469, i64 8
%471 = load i32, i32* %3
%472 = sext i32 %471 to i64
%473 = getelementptr inbounds i32, i32* %470, i64 %472
store i32 %468, i32* %473
%474 = load i32*, i32** %2
%475 = load i32, i32* %3
%476 = sext i32 %475 to i64
%477 = getelementptr inbounds i32, i32* %474, i64 %476
%478 = load i32, i32* %477
%479 = load i32*, i32** %2
%480 = getelementptr inbounds i32, i32* %479, i64 4
%481 = load i32, i32* %3
%482 = sext i32 %481 to i64
%483 = getelementptr inbounds i32, i32* %480, i64 %482
store i32 %478, i32* %483
%484 = load i32*, i32** %2
%485 = load i32, i32* %3
%486 = sext i32 %485 to i64
%487 = getelementptr inbounds i32, i32* %484, i64 %486
store i32 0, i32* %487
br label %488
488: ; preds = %462, %454
%489 = load i32*, i32** %2
%490 = getelementptr inbounds i32, i32* %489, i64 4
%491 = load i32, i32* %3
%492 = sext i32 %491 to i64
%493 = getelementptr inbounds i32, i32* %490, i64 %492
%494 = load i32, i32* %493
%495 = icmp eq i32 %494, 0
br i1 %495, label %496, label %511
496: ; preds = %488
%497 = load i32*, i32** %2
%498 = load i32, i32* %3
%499 = sext i32 %498 to i64
%500 = getelementptr inbounds i32, i32* %497, i64 %499
%501 = load i32, i32* %500
%502 = load i32*, i32** %2
%503 = getelementptr inbounds i32, i32* %502, i64 4
%504 = load i32, i32* %3
%505 = sext i32 %504 to i64
%506 = getelementptr inbounds i32, i32* %503, i64 %505
store i32 %501, i32* %506
%507 = load i32*, i32** %2
%508 = load i32, i32* %3
%509 = sext i32 %508 to i64
%510 = getelementptr inbounds i32, i32* %507, i64 %509
store i32 0, i32* %510
br label %511
511: ; preds = %496, %488
br label %512
512: ; preds = %511
%513 = load i32, i32* %7
%514 = add nsw i32 %513, 1
store i32 %514, i32* %7
br label %406
515: ; preds = %406
br label %516
516: ; preds = %515
%517 = load i32, i32* %3
%518 = add nsw i32 %517, 1
store i32 %518, i32* %3
br label %277
519: ; preds = %277
%520 = load i32, i32* %4
ret i32 %520
}

LLVM IR (-O2):
define i32 @down(i32* %0) {
%2 = getelementptr inbounds i32, i32* %0, i64 12
%3 = getelementptr inbounds i32, i32* %0, i64 8
%4 = getelementptr inbounds i32, i32* %0, i64 4
%5 = load i32, i32* %2
%6 = icmp eq i32 %5, 0
%7 = load i32, i32* %3
%8 = icmp eq i32 %7, 0
br i1 %6, label %9, label %17
9: ; preds = %1
br i1 %8, label %10, label %26
10: ; preds = %9
%11 = load i32, i32* %4
%12 = icmp eq i32 %11, 0
br i1 %12, label %13, label %16
13: ; preds = %10
%14 = load i32, i32* %0
%15 = icmp eq i32 %14, 0
br i1 %15, label %18, label %16
16: ; preds = %13, %10
br label %18
17: ; preds = %1
br i1 %8, label %18, label %26
18: ; preds = %16, %13, %17
%19 = phi i32 [ 0, %17 ], [ 0, %13 ], [ 1, %16 ]
%20 = load i32, i32* %4
%21 = icmp eq i32 %20, 0
br i1 %21, label %22, label %30
22: ; preds = %18
%23 = load i32, i32* %0
%24 = icmp eq i32 %23, 0
%25 = select i1 %24, i32 %19, i32 1
br label %36
26: ; preds = %9, %17
%27 = phi i32 [ 0, %17 ], [ 1, %9 ]
%28 = load i32, i32* %4
%29 = icmp eq i32 %28, 0
br i1 %29, label %36, label %30
30: ; preds = %18, %26
%31 = phi i32 [ %27, %26 ], [ 1, %18 ]
%32 = phi i32 [ %28, %26 ], [ %20, %18 ]
%33 = phi i32 [ %7, %26 ], [ 0, %18 ]
%34 = phi i1 [ false, %26 ], [ true, %18 ]
%35 = load i32, i32* %0
br label %43
36: ; preds = %22, %26
%37 = phi i32 [ %27, %26 ], [ %25, %22 ]
%38 = phi i32 [ %7, %26 ], [ 0, %22 ]
%39 = phi i1 [ false, %26 ], [ true, %22 ]
%40 = load i32, i32* %0
%41 = icmp eq i32 %40, 0
%42 = select i1 %41, i32 %37, i32 1
br label %43
43: ; preds = %30, %36
%44 = phi i1 [ false, %30 ], [ true, %36 ]
%45 = phi i32 [ %32, %30 ], [ 0, %36 ]
%46 = phi i32 [ %33, %30 ], [ %38, %36 ]
%47 = phi i1 [ %34, %30 ], [ %39, %36 ]
%48 = phi i32 [ %35, %30 ], [ %40, %36 ]
%49 = phi i32 [ %31, %30 ], [ %42, %36 ]
%50 = icmp ne i32 %5, %46
%51 = or i1 %6, %50
%52 = icmp ne i32 %46, %45
%53 = or i1 %47, %52
%54 = icmp ne i32 %45, %48
%55 = or i1 %44, %54
%56 = select i1 %55, i1 %53, i1 false
%57 = select i1 %56, i1 %51, i1 false
%58 = select i1 %57, i32 %49, i32 1
%59 = getelementptr inbounds i32, i32* %0, i64 13
%60 = load i32, i32* %59
%61 = icmp eq i32 %60, 0
%62 = getelementptr inbounds i32, i32* %0, i64 9
%63 = load i32, i32* %62
%64 = icmp eq i32 %63, 0
br i1 %61, label %66, label %65
65: ; preds = %43
br i1 %64, label %81, label %67
66: ; preds = %43
br i1 %64, label %72, label %67
67: ; preds = %66, %65
%68 = phi i32 [ %58, %65 ], [ 1, %66 ]
%69 = getelementptr inbounds i32, i32* %0, i64 5
%70 = load i32, i32* %69
%71 = icmp eq i32 %70, 0
br i1 %71, label %98, label %86
72: ; preds = %66
%73 = getelementptr inbounds i32, i32* %0, i64 5
%74 = load i32, i32* %73
%75 = icmp eq i32 %74, 0
br i1 %75, label %76, label %80
76: ; preds = %72
%77 = getelementptr inbounds i32, i32* %0, i64 1
%78 = load i32, i32* %77
%79 = icmp eq i32 %78, 0
br i1 %79, label %81, label %80
80: ; preds = %76, %72
br label %81
81: ; preds = %80, %76, %65
%82 = phi i32 [ %58, %65 ], [ %58, %76 ], [ 1, %80 ]
%83 = getelementptr inbounds i32, i32* %0, i64 5
%84 = load i32, i32* %83
%85 = icmp eq i32 %84, 0
br i1 %85, label %93, label %86
86: ; preds = %81, %67
%87 = phi i32 [ %68, %67 ], [ 1, %81 ]
%88 = phi i32 [ %70, %67 ], [ %84, %81 ]
%89 = phi i32 [ %63, %67 ], [ 0, %81 ]
%90 = phi i1 [ false, %67 ], [ true, %81 ]
%91 = getelementptr inbounds i32, i32* %0, i64 1
%92 = load i32, i32* %91
br label %106
93: ; preds = %81
%94 = getelementptr inbounds i32, i32* %0, i64 1
%95 = load i32, i32* %94
%96 = icmp eq i32 %95, 0
%97 = select i1 %96, i32 %82, i32 1
br label %98
98: ; preds = %93, %67
%99 = phi i32 [ %68, %67 ], [ %97, %93 ]
%100 = phi i32 [ %63, %67 ], [ 0, %93 ]
%101 = phi i1 [ false, %67 ], [ true, %93 ]
%102 = getelementptr inbounds i32, i32* %0, i64 1
%103 = load i32, i32* %102
%104 = icmp eq i32 %103, 0
%105 = select i1 %104, i32 %99, i32 1
br label %106
106: ; preds = %98, %86
%107 = phi i1 [ false, %86 ], [ true, %98 ]
%108 = phi i32 [ %88, %86 ], [ 0, %98 ]
%109 = phi i32 [ %89, %86 ], [ %100, %98 ]
%110 = phi i1 [ %90, %86 ], [ %101, %98 ]
%111 = phi i32 [ %92, %86 ], [ %103, %98 ]
%112 = phi i32 [ %87, %86 ], [ %105, %98 ]
%113 = icmp ne i32 %60, %109
%114 = or i1 %61, %113
%115 = icmp ne i32 %109, %108
%116 = or i1 %110, %115
%117 = icmp ne i32 %108, %111
%118 = or i1 %107, %117
%119 = select i1 %118, i1 %116, i1 false
%120 = select i1 %119, i1 %114, i1 false
%121 = select i1 %120, i32 %112, i32 1
%122 = getelementptr inbounds i32, i32* %0, i64 14
%123 = load i32, i32* %122
%124 = icmp eq i32 %123, 0
%125 = getelementptr inbounds i32, i32* %0, i64 10
%126 = load i32, i32* %125
%127 = icmp eq i32 %126, 0
br i1 %124, label %129, label %128
128: ; preds = %106
br i1 %127, label %144, label %130
129: ; preds = %106
br i1 %127, label %135, label %130
130: ; preds = %129, %128
%131 = phi i32 [ %121, %128 ], [ 1, %129 ]
%132 = getelementptr inbounds i32, i32* %0, i64 6
%133 = load i32, i32* %132
%134 = icmp eq i32 %133, 0
br i1 %134, label %161, label %149
135: ; preds = %129
%136 = getelementptr inbounds i32, i32* %0, i64 6
%137 = load i32, i32* %136
%138 = icmp eq i32 %137, 0
br i1 %138, label %139, label %143
139: ; preds = %135
%140 = getelementptr inbounds i32, i32* %0, i64 2
%141 = load i32, i32* %140
%142 = icmp eq i32 %141, 0
br i1 %142, label %144, label %143
143: ; preds = %139, %135
br label %144
144: ; preds = %143, %139, %128
%145 = phi i32 [ %121, %128 ], [ %121, %139 ], [ 1, %143 ]
%146 = getelementptr inbounds i32, i32* %0, i64 6
%147 = load i32, i32* %146
%148 = icmp eq i32 %147, 0
br i1 %148, label %156, label %149
149: ; preds = %144, %130
%150 = phi i32 [ %131, %130 ], [ 1, %144 ]
%151 = phi i32 [ %133, %130 ], [ %147, %144 ]
%152 = phi i32 [ %126, %130 ], [ 0, %144 ]
%153 = phi i1 [ false, %130 ], [ true, %144 ]
%154 = getelementptr inbounds i32, i32* %0, i64 2
%155 = load i32, i32* %154
br label %169
156: ; preds = %144
%157 = getelementptr inbounds i32, i32* %0, i64 2
%158 = load i32, i32* %157
%159 = icmp eq i32 %158, 0
%160 = select i1 %159, i32 %145, i32 1
br label %161
161: ; preds = %156, %130
%162 = phi i32 [ %131, %130 ], [ %160, %156 ]
%163 = phi i32 [ %126, %130 ], [ 0, %156 ]
%164 = phi i1 [ false, %130 ], [ true, %156 ]
%165 = getelementptr inbounds i32, i32* %0, i64 2
%166 = load i32, i32* %165
%167 = icmp eq i32 %166, 0
%168 = select i1 %167, i32 %162, i32 1
br label %169
169: ; preds = %161, %149
%170 = phi i1 [ false, %149 ], [ true, %161 ]
%171 = phi i32 [ %151, %149 ], [ 0, %161 ]
%172 = phi i32 [ %152, %149 ], [ %163, %161 ]
%173 = phi i1 [ %153, %149 ], [ %164, %161 ]
%174 = phi i32 [ %155, %149 ], [ %166, %161 ]
%175 = phi i32 [ %150, %149 ], [ %168, %161 ]
%176 = icmp ne i32 %123, %172
%177 = or i1 %124, %176
%178 = icmp ne i32 %172, %171
%179 = or i1 %173, %178
%180 = icmp ne i32 %171, %174
%181 = or i1 %170, %180
%182 = select i1 %181, i1 %179, i1 false
%183 = select i1 %182, i1 %177, i1 false
%184 = select i1 %183, i32 %175, i32 1
%185 = getelementptr inbounds i32, i32* %0, i64 15
%186 = load i32, i32* %185
%187 = icmp eq i32 %186, 0
%188 = getelementptr inbounds i32, i32* %0, i64 11
%189 = load i32, i32* %188
%190 = icmp eq i32 %189, 0
br i1 %187, label %192, label %191
191: ; preds = %169
br i1 %190, label %207, label %193
192: ; preds = %169
br i1 %190, label %198, label %193
193: ; preds = %192, %191
%194 = phi i32 [ %184, %191 ], [ 1, %192 ]
%195 = getelementptr inbounds i32, i32* %0, i64 7
%196 = load i32, i32* %195
%197 = icmp eq i32 %196, 0
br i1 %197, label %224, label %212
198: ; preds = %192
%199 = getelementptr inbounds i32, i32* %0, i64 7
%200 = load i32, i32* %199
%201 = icmp eq i32 %200, 0
br i1 %201, label %202, label %206
202: ; preds = %198
%203 = getelementptr inbounds i32, i32* %0, i64 3
%204 = load i32, i32* %203
%205 = icmp eq i32 %204, 0
br i1 %205, label %207, label %206
206: ; preds = %202, %198
br label %207
207: ; preds = %206, %202, %191
%208 = phi i32 [ %184, %191 ], [ %184, %202 ], [ 1, %206 ]
%209 = getelementptr inbounds i32, i32* %0, i64 7
%210 = load i32, i32* %209
%211 = icmp eq i32 %210, 0
br i1 %211, label %219, label %212
212: ; preds = %207, %193
%213 = phi i32 [ %194, %193 ], [ 1, %207 ]
%214 = phi i32 [ %196, %193 ], [ %210, %207 ]
%215 = phi i32 [ %189, %193 ], [ 0, %207 ]
%216 = phi i1 [ false, %193 ], [ true, %207 ]
%217 = getelementptr inbounds i32, i32* %0, i64 3
%218 = load i32, i32* %217
br label %232
219: ; preds = %207
%220 = getelementptr inbounds i32, i32* %0, i64 3
%221 = load i32, i32* %220
%222 = icmp eq i32 %221, 0
%223 = select i1 %222, i32 %208, i32 1
br label %224
224: ; preds = %219, %193
%225 = phi i32 [ %194, %193 ], [ %223, %219 ]
%226 = phi i32 [ %189, %193 ], [ 0, %219 ]
%227 = phi i1 [ false, %193 ], [ true, %219 ]
%228 = getelementptr inbounds i32, i32* %0, i64 3
%229 = load i32, i32* %228
%230 = icmp eq i32 %229, 0
%231 = select i1 %230, i32 %225, i32 1
br label %232
232: ; preds = %224, %212
%233 = phi i1 [ false, %212 ], [ true, %224 ]
%234 = phi i32 [ %214, %212 ], [ 0, %224 ]
%235 = phi i32 [ %215, %212 ], [ %226, %224 ]
%236 = phi i1 [ %216, %212 ], [ %227, %224 ]
%237 = phi i32 [ %218, %212 ], [ %229, %224 ]
%238 = phi i32 [ %213, %212 ], [ %231, %224 ]
br label %239
239: ; preds = %232, %298
%240 = phi i64 [ %299, %298 ], [ 0, %232 ]
%241 = getelementptr inbounds i32, i32* %2, i64 %240
%242 = getelementptr inbounds i32, i32* %3, i64 %240
%243 = getelementptr inbounds i32, i32* %4, i64 %240
%244 = load i32, i32* %241
%245 = getelementptr inbounds i32, i32* %0, i64 %240
%246 = load i32, i32* %242
%247 = load i32, i32* %243
%248 = icmp eq i32 %244, 0
br i1 %248, label %249, label %251
249: ; preds = %239
store i32 %246, i32* %241
store i32 %247, i32* %242
%250 = load i32, i32* %245
store i32 %250, i32* %243
store i32 0, i32* %245
br label %251
251: ; preds = %249, %239
%252 = phi i32 [ %250, %249 ], [ %247, %239 ]
%253 = phi i32 [ %247, %249 ], [ %246, %239 ]
%254 = phi i32 [ %246, %249 ], [ %244, %239 ]
%255 = icmp eq i32 %253, 0
br i1 %255, label %256, label %258
256: ; preds = %251
store i32 %252, i32* %242
%257 = load i32, i32* %245
store i32 %257, i32* %243
store i32 0, i32* %245
br label %258
258: ; preds = %256, %251
%259 = phi i32 [ %257, %256 ], [ %252, %251 ]
%260 = phi i32 [ %252, %256 ], [ %253, %251 ]
%261 = icmp eq i32 %259, 0
br i1 %261, label %262, label %264
262: ; preds = %258
%263 = load i32, i32* %245
store i32 %263, i32* %243
store i32 0, i32* %245
br label %264
264: ; preds = %258, %262
%265 = phi i32 [ %259, %258 ], [ %263, %262 ]
%266 = icmp eq i32 %254, 0
br i1 %266, label %267, label %269
267: ; preds = %264
store i32 %260, i32* %241
store i32 %265, i32* %242
%268 = load i32, i32* %245
store i32 %268, i32* %243
store i32 0, i32* %245
br label %269
269: ; preds = %267, %264
%270 = phi i32 [ %268, %267 ], [ %265, %264 ]
%271 = phi i32 [ %265, %267 ], [ %260, %264 ]
%272 = phi i32 [ %260, %267 ], [ %254, %264 ]
%273 = icmp eq i32 %271, 0
br i1 %273, label %274, label %276
274: ; preds = %269
store i32 %270, i32* %242
%275 = load i32, i32* %245
store i32 %275, i32* %243
store i32 0, i32* %245
br label %276
276: ; preds = %274, %269
%277 = phi i32 [ %275, %274 ], [ %270, %269 ]
%278 = phi i32 [ %270, %274 ], [ %271, %269 ]
%279 = icmp eq i32 %277, 0
br i1 %279, label %280, label %282
280: ; preds = %276
%281 = load i32, i32* %245
store i32 %281, i32* %243
store i32 0, i32* %245
br label %282
282: ; preds = %280, %276
%283 = phi i32 [ %277, %276 ], [ %281, %280 ]
%284 = icmp eq i32 %272, 0
br i1 %284, label %285, label %287
285: ; preds = %282
store i32 %278, i32* %241
store i32 %283, i32* %242
%286 = load i32, i32* %245
store i32 %286, i32* %243
store i32 0, i32* %245
br label %287
287: ; preds = %285, %282
%288 = phi i32 [ %286, %285 ], [ %283, %282 ]
%289 = phi i32 [ %283, %285 ], [ %278, %282 ]
%290 = icmp eq i32 %289, 0
br i1 %290, label %291, label %293
291: ; preds = %287
store i32 %288, i32* %242
%292 = load i32, i32* %245
store i32 %292, i32* %243
store i32 0, i32* %245
br label %293
293: ; preds = %291, %287
%294 = phi i32 [ %292, %291 ], [ %288, %287 ]
%295 = icmp eq i32 %294, 0
br i1 %295, label %296, label %298
296: ; preds = %293
%297 = load i32, i32* %245
store i32 %297, i32* %243
store i32 0, i32* %245
br label %298
298: ; preds = %296, %293
%299 = add nuw nsw i64 %240, 1
%300 = icmp eq i64 %299, 4
br i1 %300, label %301, label %239
301: ; preds = %298, %372
%302 = phi i64 [ %373, %372 ], [ 0, %298 ]
%303 = getelementptr inbounds i32, i32* %2, i64 %302
%304 = load i32, i32* %303
%305 = getelementptr inbounds i32, i32* %3, i64 %302
%306 = load i32, i32* %305
%307 = icmp eq i32 %304, %306
br i1 %307, label %311, label %308
308: ; preds = %301
%309 = getelementptr inbounds i32, i32* %4, i64 %302
%310 = load i32, i32* %309
br label %317
311: ; preds = %301
%312 = shl nsw i32 %304, 1
store i32 %312, i32* %303
%313 = getelementptr inbounds i32, i32* %4, i64 %302
%314 = load i32, i32* %313
store i32 %314, i32* %305
%315 = getelementptr inbounds i32, i32* %0, i64 %302
%316 = load i32, i32* %315
store i32 %316, i32* %313
store i32 0, i32* %315
br label %317
317: ; preds = %308, %311
%318 = phi i32 [ %312, %311 ], [ %304, %308 ]
%319 = phi i32 [ %316, %311 ], [ %310, %308 ]
%320 = phi i32 [ %314, %311 ], [ %306, %308 ]
%321 = getelementptr inbounds i32, i32* %4, i64 %302
%322 = icmp eq i32 %320, %319
br i1 %322, label %326, label %323
323: ; preds = %317
%324 = getelementptr inbounds i32, i32* %0, i64 %302
%325 = load i32, i32* %324
br label %330
326: ; preds = %317
%327 = shl nsw i32 %319, 1
store i32 %327, i32* %305
%328 = getelementptr inbounds i32, i32* %0, i64 %302
%329 = load i32, i32* %328
store i32 %329, i32* %321
store i32 0, i32* %328
br label %330
330: ; preds = %323, %326
%331 = phi i32 [ %327, %326 ], [ %320, %323 ]
%332 = phi i32 [ 0, %326 ], [ %325, %323 ]
%333 = phi i32 [ %329, %326 ], [ %319, %323 ]
%334 = getelementptr inbounds i32, i32* %0, i64 %302
%335 = icmp eq i32 %333, %332
br i1 %335, label %336, label %338
336: ; preds = %330
%337 = shl nsw i32 %332, 1
store i32 %337, i32* %321
store i32 0, i32* %334
br label %338
338: ; preds = %336, %330
%339 = phi i32 [ 0, %336 ], [ %332, %330 ]
%340 = phi i32 [ %337, %336 ], [ %333, %330 ]
%341 = icmp eq i32 %318, 0
br i1 %341, label %342, label %343
342: ; preds = %338
store i32 %331, i32* %303
store i32 %340, i32* %305
store i32 %339, i32* %321
store i32 0, i32* %334
br label %343
343: ; preds = %338, %342
%344 = phi i32 [ 0, %342 ], [ %339, %338 ]
%345 = phi i32 [ %339, %342 ], [ %340, %338 ]
%346 = phi i32 [ %331, %342 ], [ 1, %338 ]
%347 = phi i32 [ %340, %342 ], [ %331, %338 ]
%348 = icmp eq i32 %347, 0
br i1 %348, label %349, label %350
349: ; preds = %343
store i32 %345, i32* %305
store i32 %344, i32* %321
store i32 0, i32* %334
br label %350
350: ; preds = %343, %349
%351 = phi i32 [ %345, %349 ], [ %347, %343 ]
%352 = phi i32 [ 0, %349 ], [ %344, %343 ]
%353 = phi i32 [ %344, %349 ], [ %345, %343 ]
%354 = icmp eq i32 %353, 0
br i1 %354, label %355, label %356
355: ; preds = %350
store i32 %352, i32* %321
store i32 0, i32* %334
br label %356
356: ; preds = %350, %355
%357 = phi i32 [ %352, %350 ], [ 0, %355 ]
%358 = phi i32 [ %353, %350 ], [ %352, %355 ]
%359 = icmp eq i32 %346, 0
br i1 %359, label %360, label %361
360: ; preds = %356
store i32 %351, i32* %303
store i32 %358, i32* %305
store i32 %357, i32* %321
store i32 0, i32* %334
br label %361
361: ; preds = %356, %360
%362 = phi i32 [ 0, %360 ], [ %357, %356 ]
%363 = phi i32 [ %357, %360 ], [ %358, %356 ]
%364 = phi i32 [ %358, %360 ], [ %351, %356 ]
%365 = icmp eq i32 %364, 0
br i1 %365, label %366, label %367
366: ; preds = %361
store i32 %363, i32* %305
store i32 %362, i32* %321
store i32 0, i32* %334
br label %367
367: ; preds = %361, %366
%368 = phi i32 [ 0, %366 ], [ %362, %361 ]
%369 = phi i32 [ %362, %366 ], [ %363, %361 ]
%370 = icmp eq i32 %369, 0
br i1 %370, label %371, label %372
371: ; preds = %367
store i32 %368, i32* %321
store i32 0, i32* %334
br label %372
372: ; preds = %371, %367
%373 = add nuw nsw i64 %302, 1
%374 = icmp eq i64 %373, 4
br i1 %374, label %375, label %301
375: ; preds = %372
%376 = icmp ne i32 %234, %237
%377 = or i1 %233, %376
%378 = icmp ne i32 %235, %234
%379 = or i1 %236, %378
%380 = select i1 %377, i1 %379, i1 false
%381 = icmp ne i32 %186, %235
%382 = or i1 %187, %381
%383 = select i1 %380, i1 %382, i1 false
%384 = select i1 %383, i32 %238, i32 1
ret i32 %384
}