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


x86 assembly (clang, -O0):
<up>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x4,-0x14(%rbp)
jge    12a7 <up+0x1a7>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1177 <up+0x77>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
jne    116b <up+0x6b>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
jne    116b <up+0x6b>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x30(%rax,%rcx,4)
je     1172 <up+0x72>
movl   $0x1,-0x10(%rbp)
jmp    1177 <up+0x77>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
jne    11bc <up+0xbc>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
jne    11b0 <up+0xb0>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x30(%rax,%rcx,4)
je     11b7 <up+0xb7>
movl   $0x1,-0x10(%rbp)
jmp    11bc <up+0xbc>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
jne    11ee <up+0xee>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x30(%rax,%rcx,4)
je     11e9 <up+0xe9>
movl   $0x1,-0x10(%rbp)
jmp    11ee <up+0xee>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0x14(%rbp),%rdx
cmp    0x10(%rcx,%rdx,4),%eax
jne    1224 <up+0x124>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1224 <up+0x124>
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    0x20(%rcx,%rdx,4),%eax
jne    125c <up+0x15c>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
je     125c <up+0x15c>
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    0x30(%rcx,%rdx,4),%eax
jne    1294 <up+0x194>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
je     1294 <up+0x194>
movl   $0x1,-0x10(%rbp)
jmp    1299 <up+0x199>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1116 <up+0x16>
movl   $0x0,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jge    13e6 <up+0x2e6>
movl   $0x0,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jge    13d3 <up+0x2d3>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1332 <up+0x232>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%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
mov    0x30(%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
movl   $0x0,0x30(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
jne    1385 <up+0x285>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%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
mov    0x30(%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
movl   $0x0,0x30(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
jne    13c0 <up+0x2c0>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x30(%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
movl   $0x0,0x30(%rax,%rcx,4)
jmp    13c5 <up+0x2c5>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12bf <up+0x1bf>
jmp    13d8 <up+0x2d8>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12ae <up+0x1ae>
movl   $0x0,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jge    1648 <up+0x548>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0xc(%rbp),%rdx
cmp    0x10(%rcx,%rdx,4),%eax
jne    146e <up+0x36e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%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
mov    0x30(%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
movl   $0x0,0x30(%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    0x20(%rcx,%rdx,4),%eax
jne    14d0 <up+0x3d0>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%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
mov    0x30(%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
movl   $0x0,0x30(%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    0x30(%rcx,%rdx,4),%eax
jne    151a <up+0x41a>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x30(%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
movl   $0x0,0x30(%rax,%rcx,4)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x2,-0x1c(%rbp)
jge    1635 <up+0x535>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1594 <up+0x494>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%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
mov    0x30(%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
movl   $0x0,0x30(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x10(%rax,%rcx,4)
jne    15e7 <up+0x4e7>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x20(%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
mov    0x30(%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
movl   $0x0,0x30(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x0,0x20(%rax,%rcx,4)
jne    1622 <up+0x522>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    0x30(%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
movl   $0x0,0x30(%rax,%rcx,4)
jmp    1627 <up+0x527>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1521 <up+0x421>
jmp    163a <up+0x53a>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13ed <up+0x2ed>
mov    -0x10(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<up>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    (%rdi),%r9d
mov    0x10(%rdi),%edx
test   %r9d,%r9d
je     111d <up+0x1d>
xor    %ecx,%ecx
test   %edx,%edx
jne    1126 <up+0x26>
jmp    1147 <up+0x47>
mov    $0x1,%ecx
test   %edx,%edx
je     1132 <up+0x32>
mov    0x20(%rdi),%ebp
xor    %r8d,%r8d
test   %ebp,%ebp
jne    1158 <up+0x58>
jmp    1170 <up+0x70>
cmpl   $0x0,0x20(%rdi)
jne    1142 <up+0x42>
cmpl   $0x0,0x30(%rdi)
je     169b <up+0x59b>
mov    $0x1,%ecx
mov    0x20(%rdi),%ebp
test   %ebp,%ebp
je     115f <up+0x5f>
mov    $0x1,%r8b
xor    %edx,%edx
mov    $0x1,%ecx
mov    0x30(%rdi),%ebx
xor    %eax,%eax
jmp    1181 <up+0x81>
cmpl   $0x0,0x30(%rdi)
mov    $0x1,%eax
cmovne %eax,%ecx
mov    $0x1,%r8b
xor    %edx,%edx
mov    0x30(%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    0x4(%rdi),%r8d
mov    0x14(%rdi),%edx
test   %r8d,%r8d
je     11ca <up+0xca>
mov    %esi,%ecx
test   %edx,%edx
jne    11ce <up+0xce>
jmp    11eb <up+0xeb>
test   %edx,%edx
je     11da <up+0xda>
mov    0x24(%rdi),%ebp
xor    %r9d,%r9d
test   %ebp,%ebp
jne    11fc <up+0xfc>
jmp    1214 <up+0x114>
cmpl   $0x0,0x24(%rdi)
jne    11e6 <up+0xe6>
cmpl   $0x0,0x34(%rdi)
je     11eb <up+0xeb>
mov    $0x1,%esi
mov    0x24(%rdi),%ebp
test   %ebp,%ebp
je     1203 <up+0x103>
mov    $0x1,%r9b
xor    %edx,%edx
mov    $0x1,%ecx
mov    0x34(%rdi),%ebx
xor    %eax,%eax
jmp    1225 <up+0x125>
cmpl   $0x0,0x34(%rdi)
mov    $0x1,%ecx
cmove  %esi,%ecx
mov    $0x1,%r9b
xor    %edx,%edx
mov    0x34(%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    0x8(%rdi),%r9d
mov    0x18(%rdi),%edx
test   %r9d,%r9d
je     126e <up+0x16e>
mov    %esi,%ecx
test   %edx,%edx
jne    1272 <up+0x172>
jmp    128f <up+0x18f>
test   %edx,%edx
je     127e <up+0x17e>
mov    0x28(%rdi),%ebp
xor    %r8d,%r8d
test   %ebp,%ebp
jne    12a0 <up+0x1a0>
jmp    12b8 <up+0x1b8>
cmpl   $0x0,0x28(%rdi)
jne    128a <up+0x18a>
cmpl   $0x0,0x38(%rdi)
je     128f <up+0x18f>
mov    $0x1,%esi
mov    0x28(%rdi),%ebp
test   %ebp,%ebp
je     12a7 <up+0x1a7>
mov    $0x1,%r8b
xor    %edx,%edx
mov    $0x1,%ecx
mov    0x38(%rdi),%ebx
xor    %esi,%esi
jmp    12ca <up+0x1ca>
cmpl   $0x0,0x38(%rdi)
mov    $0x1,%ecx
cmove  %esi,%ecx
mov    $0x1,%r8b
xor    %edx,%edx
mov    0x38(%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    0xc(%rdi),%r11d
mov    0x1c(%rdi),%r14d
test   %r11d,%r11d
je     1318 <up+0x218>
mov    %eax,%r12d
test   %r14d,%r14d
jne    131d <up+0x21d>
jmp    133c <up+0x23c>
test   %r14d,%r14d
je     132b <up+0x22b>
mov    0x2c(%rdi),%r15d
xor    %r8d,%r8d
test   %r15d,%r15d
jne    1351 <up+0x251>
jmp    136e <up+0x26e>
cmpl   $0x0,0x2c(%rdi)
jne    1337 <up+0x237>
cmpl   $0x0,0x3c(%rdi)
je     133c <up+0x23c>
mov    $0x1,%eax
mov    0x2c(%rdi),%r15d
test   %r15d,%r15d
je     135a <up+0x25a>
mov    $0x1,%r8b
xor    %r14d,%r14d
mov    $0x1,%r12d
mov    0x3c(%rdi),%r9d
xor    %r10d,%r10d
jmp    1384 <up+0x284>
cmpl   $0x0,0x3c(%rdi)
mov    $0x1,%r12d
cmove  %eax,%r12d
mov    $0x1,%r8b
xor    %r14d,%r14d
mov    0x3c(%rdi),%r9d
test   %r9d,%r9d
mov    $0x1,%eax
cmovne %eax,%r12d
xor    %r15d,%r15d
mov    $0x1,%r10b
xor    %eax,%eax
jmp    139e <up+0x29e>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rax
cmp    $0x4,%rax
je     14ee <up+0x3ee>
mov    (%rdi,%rax,4),%esi
mov    0x10(%rdi,%rax,4),%edx
mov    0x20(%rdi,%rax,4),%ecx
test   %esi,%esi
je     1400 <up+0x300>
mov    %ecx,%ebx
mov    %edx,%ecx
mov    %esi,%edx
test   %ecx,%ecx
je     141b <up+0x31b>
mov    %ebx,%esi
mov    %ecx,%ebx
test   %esi,%esi
je     1433 <up+0x333>
test   %edx,%edx
je     144b <up+0x34b>
mov    %esi,%ecx
mov    %ebx,%esi
mov    %edx,%ebx
test   %esi,%esi
je     146a <up+0x36a>
mov    %ecx,%edx
mov    %esi,%ecx
test   %edx,%edx
je     1486 <up+0x386>
test   %ebx,%ebx
je     149e <up+0x39e>
mov    %edx,%esi
mov    %ecx,%edx
test   %edx,%edx
je     14bd <up+0x3bd>
test   %esi,%esi
jne    1390 <up+0x290>
jmp    14d9 <up+0x3d9>
xchg   %ax,%ax
mov    %edx,(%rdi,%rax,4)
mov    %ecx,0x10(%rdi,%rax,4)
mov    0x30(%rdi,%rax,4),%ebx
mov    %ebx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
test   %ecx,%ecx
jne    13b7 <up+0x2b7>
mov    %ebx,0x10(%rdi,%rax,4)
mov    0x30(%rdi,%rax,4),%esi
mov    %esi,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
test   %esi,%esi
jne    13bf <up+0x2bf>
mov    0x30(%rdi,%rax,4),%esi
mov    %esi,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
test   %edx,%edx
jne    13c7 <up+0x2c7>
mov    %ebx,(%rdi,%rax,4)
mov    %esi,0x10(%rdi,%rax,4)
mov    0x30(%rdi,%rax,4),%ecx
mov    %ecx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
test   %esi,%esi
jne    13d5 <up+0x2d5>
mov    %ecx,0x10(%rdi,%rax,4)
mov    0x30(%rdi,%rax,4),%edx
mov    %edx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
test   %edx,%edx
jne    13e1 <up+0x2e1>
mov    0x30(%rdi,%rax,4),%edx
mov    %edx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
test   %ebx,%ebx
jne    13e9 <up+0x2e9>
mov    %ecx,(%rdi,%rax,4)
mov    %edx,0x10(%rdi,%rax,4)
mov    0x30(%rdi,%rax,4),%esi
mov    %esi,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
test   %edx,%edx
jne    13f5 <up+0x2f5>
mov    %esi,0x10(%rdi,%rax,4)
mov    0x30(%rdi,%rax,4),%esi
mov    %esi,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
test   %esi,%esi
jne    1390 <up+0x290>
mov    0x30(%rdi,%rax,4),%ecx
mov    %ecx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
jmp    1390 <up+0x290>
xor    %eax,%eax
jmp    150e <up+0x40e>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%rax
cmp    $0x4,%rax
je     165b <up+0x55b>
mov    (%rdi,%rax,4),%edx
mov    0x10(%rdi,%rax,4),%ebp
cmp    %ebp,%edx
jne    1550 <up+0x450>
add    %edx,%edx
mov    %edx,(%rdi,%rax,4)
mov    0x20(%rdi,%rax,4),%ebp
mov    0x30(%rdi,%rax,4),%ebx
mov    %ebp,0x10(%rdi,%rax,4)
mov    %ebx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
cmp    %ebx,%ebp
je     1558 <up+0x458>
mov    0x30(%rdi,%rax,4),%esi
cmp    %esi,%ebx
je     1576 <up+0x476>
jmp    1588 <up+0x488>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x20(%rdi,%rax,4),%ebx
cmp    %ebx,%ebp
jne    153a <up+0x43a>
add    %ebx,%ebx
mov    %ebx,0x10(%rdi,%rax,4)
mov    %ebx,%ebp
mov    0x30(%rdi,%rax,4),%ebx
mov    %ebx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
xor    %esi,%esi
cmp    %esi,%ebx
jne    1588 <up+0x488>
mov    %esi,%ebx
add    %esi,%ebx
mov    %ebx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
xor    %esi,%esi
mov    $0x1,%r13d
test   %edx,%edx
je     15d0 <up+0x4d0>
mov    %esi,%ecx
mov    %ebx,%esi
mov    %ebp,%ebx
test   %ebx,%ebx
je     15ec <up+0x4ec>
mov    %ecx,%edx
mov    %esi,%ecx
test   %ecx,%ecx
je     1604 <up+0x504>
mov    %edx,%esi
mov    %ecx,%edx
test   %r13d,%r13d
je     1617 <up+0x517>
mov    %esi,%ecx
mov    %edx,%esi
mov    %ebx,%edx
test   %edx,%edx
je     1630 <up+0x530>
mov    %ecx,%edx
mov    %esi,%ecx
test   %ecx,%ecx
jne    1500 <up+0x400>
jmp    164a <up+0x54a>
nopl   0x0(%rax,%rax,1)
mov    %ebp,(%rdi,%rax,4)
mov    %ebx,0x10(%rdi,%rax,4)
mov    %esi,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
xor    %ecx,%ecx
mov    %ebp,%r13d
test   %ebx,%ebx
jne    159c <up+0x49c>
mov    %esi,0x10(%rdi,%rax,4)
mov    %ecx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
xor    %edx,%edx
mov    %esi,%ebx
test   %ecx,%ecx
jne    15a4 <up+0x4a4>
mov    %edx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
xor    %esi,%esi
test   %r13d,%r13d
jne    15ad <up+0x4ad>
mov    %ebx,(%rdi,%rax,4)
mov    %edx,0x10(%rdi,%rax,4)
mov    %esi,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
xor    %ecx,%ecx
test   %edx,%edx
jne    15b7 <up+0x4b7>
mov    %esi,0x10(%rdi,%rax,4)
mov    %ecx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
xor    %edx,%edx
test   %ecx,%ecx
jne    1500 <up+0x400>
mov    %edx,0x20(%rdi,%rax,4)
movl   $0x0,0x30(%rdi,%rax,4)
jmp    1500 <up+0x400>
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 <up+0x47>

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

LLVM IR (-O2):
define i32 @up(i32* %0) {
%2 = getelementptr inbounds i32, i32* %0, i64 4
%3 = getelementptr inbounds i32, i32* %0, i64 8
%4 = getelementptr inbounds i32, i32* %0, i64 12
%5 = load i32, i32* %0
%6 = icmp eq i32 %5, 0
%7 = load i32, i32* %2
%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* %3
%12 = icmp eq i32 %11, 0
br i1 %12, label %13, label %16
13: ; preds = %10
%14 = load i32, i32* %4
%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* %3
%21 = icmp eq i32 %20, 0
br i1 %21, label %22, label %30
22: ; preds = %18
%23 = load i32, i32* %4
%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* %3
%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* %4
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* %4
%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 1
%60 = load i32, i32* %59
%61 = icmp eq i32 %60, 0
%62 = getelementptr inbounds i32, i32* %0, i64 5
%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 9
%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 9
%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 13
%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 9
%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 13
%92 = load i32, i32* %91
br label %106
93: ; preds = %81
%94 = getelementptr inbounds i32, i32* %0, i64 13
%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 13
%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 2
%123 = load i32, i32* %122
%124 = icmp eq i32 %123, 0
%125 = getelementptr inbounds i32, i32* %0, i64 6
%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 10
%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 10
%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 14
%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 10
%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 14
%155 = load i32, i32* %154
br label %169
156: ; preds = %144
%157 = getelementptr inbounds i32, i32* %0, i64 14
%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 14
%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 3
%186 = load i32, i32* %185
%187 = icmp eq i32 %186, 0
%188 = getelementptr inbounds i32, i32* %0, i64 7
%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 11
%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 11
%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 15
%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 11
%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 15
%218 = load i32, i32* %217
br label %232
219: ; preds = %207
%220 = getelementptr inbounds i32, i32* %0, i64 15
%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 15
%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* %0, i64 %240
%242 = getelementptr inbounds i32, i32* %2, i64 %240
%243 = getelementptr inbounds i32, i32* %3, i64 %240
%244 = load i32, i32* %241
%245 = getelementptr inbounds i32, i32* %4, 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* %0, i64 %302
%304 = load i32, i32* %303
%305 = getelementptr inbounds i32, i32* %2, 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* %3, 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* %3, i64 %302
%314 = load i32, i32* %313
store i32 %314, i32* %305
%315 = getelementptr inbounds i32, i32* %4, 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* %3, i64 %302
%322 = icmp eq i32 %320, %319
br i1 %322, label %326, label %323
323: ; preds = %317
%324 = getelementptr inbounds i32, i32* %4, 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* %4, 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* %4, 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
}