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


x86 assembly (clang, -O0):
<right>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x4,-0x14(%rbp)
jge    1300 <right+0x200>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0xc(%rax,%rcx,4)
jne    118b <right+0x8b>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x8(%rax,%rcx,4)
jne    117f <right+0x7f>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x4(%rax,%rcx,4)
jne    117f <right+0x7f>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1186 <right+0x86>
movl   $0x1,-0x10(%rbp)
jmp    118b <right+0x8b>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x8(%rax,%rcx,4)
jne    11de <right+0xde>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x4(%rax,%rcx,4)
jne    11d2 <right+0xd2>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     11d9 <right+0xd9>
movl   $0x1,-0x10(%rbp)
jmp    11de <right+0xde>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x4(%rax,%rcx,4)
jne    1219 <right+0x119>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1214 <right+0x114>
movl   $0x1,-0x10(%rbp)
jmp    1219 <right+0x119>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0xc(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
mov    -0x14(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
cmp    0x8(%rcx,%rdx,4),%eax
jne    1260 <right+0x160>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0xc(%rax,%rcx,4)
je     1260 <right+0x160>
movl   $0x1,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x8(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
mov    -0x14(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
cmp    0x4(%rcx,%rdx,4),%eax
jne    12a7 <right+0x1a7>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x8(%rax,%rcx,4)
je     12a7 <right+0x1a7>
movl   $0x1,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x4(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
mov    -0x14(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jne    12ed <right+0x1ed>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x4(%rax,%rcx,4)
je     12ed <right+0x1ed>
movl   $0x1,-0x10(%rbp)
jmp    12f2 <right+0x1f2>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1116 <right+0x16>
movl   $0x0,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jge    1495 <right+0x395>
movl   $0x0,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jge    1482 <right+0x382>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0xc(%rax,%rcx,4)
jne    13b3 <right+0x2b3>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x8(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0xc(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x4(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x8(%rax,%rcx,4)
jne    1422 <right+0x322>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x4(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x4(%rax,%rcx,4)
jne    146f <right+0x36f>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    1474 <right+0x374>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1318 <right+0x218>
jmp    1487 <right+0x387>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1307 <right+0x207>
movl   $0x0,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jge    17b2 <right+0x6b2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0xc(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
mov    -0xc(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
cmp    0x8(%rcx,%rdx,4),%eax
jne    154b <right+0x44b>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x8(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
add    0xc(%rax,%rcx,4),%edx
mov    %edx,0xc(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x4(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x8(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
mov    -0xc(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
cmp    0x4(%rcx,%rdx,4),%eax
jne    15ce <right+0x4ce>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x4(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
add    0x8(%rax,%rcx,4),%edx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x4(%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
mov    -0xc(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jne    162e <right+0x52e>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
add    0x4(%rax,%rcx,4),%edx
mov    %edx,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x2,-0x1c(%rbp)
jge    179f <right+0x69f>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0xc(%rax,%rcx,4)
jne    16d0 <right+0x5d0>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x8(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0xc(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x4(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x8(%rax,%rcx,4)
jne    173f <right+0x63f>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    0x4(%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x0,0x4(%rax,%rcx,4)
jne    178c <right+0x68c>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    1791 <right+0x691>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1635 <right+0x535>
jmp    17a4 <right+0x6a4>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    149c <right+0x39c>
mov    -0x10(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<right>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x8(%rdi),%ecx
mov    0xc(%rdi),%r10d
test   %r10d,%r10d
je     111f <right+0x1f>
xor    %r9d,%r9d
test   %ecx,%ecx
jne    1129 <right+0x29>
jmp    114a <right+0x4a>
mov    $0x1,%r9d
test   %ecx,%ecx
je     1135 <right+0x35>
mov    0x4(%rdi),%ebp
xor    %r8d,%r8d
test   %ebp,%ebp
jne    115c <right+0x5c>
jmp    1176 <right+0x76>
mov    $0x1,%r9d
cmpl   $0x0,0x4(%rdi)
jne    114a <right+0x4a>
cmpl   $0x0,(%rdi)
je     1677 <right+0x577>
mov    0x4(%rdi),%ebp
test   %ebp,%ebp
je     1165 <right+0x65>
mov    $0x1,%r8b
xor    %ecx,%ecx
mov    $0x1,%r9d
mov    (%rdi),%ebx
xor    %edx,%edx
mov    %r9d,%esi
jmp    1187 <right+0x87>
cmpl   $0x0,(%rdi)
mov    $0x1,%ecx
cmovne %ecx,%r9d
mov    $0x1,%r8b
xor    %ecx,%ecx
mov    (%rdi),%ebx
test   %ebx,%ebx
mov    $0x1,%esi
cmove  %r9d,%esi
xor    %ebp,%ebp
mov    $0x1,%dl
cmp    %ecx,%r10d
mov    $0x1,%eax
cmovne %esi,%eax
test   %r10d,%r10d
cmove  %esi,%eax
cmp    %ebp,%ecx
mov    $0x1,%ecx
cmovne %eax,%ecx
test   %r8b,%r8b
cmovne %eax,%ecx
cmp    %ebx,%ebp
mov    $0x1,%esi
cmovne %ecx,%esi
test   %dl,%dl
cmovne %ecx,%esi
mov    $0x1,%edx
mov    0x18(%rdi),%ecx
mov    0x1c(%rdi),%r8d
test   %r8d,%r8d
je     11d0 <right+0xd0>
mov    %esi,%edx
test   %ecx,%ecx
jne    11d4 <right+0xd4>
jmp    11f1 <right+0xf1>
test   %ecx,%ecx
je     11e0 <right+0xe0>
mov    0x14(%rdi),%ebp
xor    %r9d,%r9d
test   %ebp,%ebp
jne    1202 <right+0x102>
jmp    121a <right+0x11a>
cmpl   $0x0,0x14(%rdi)
jne    11ec <right+0xec>
cmpl   $0x0,0x10(%rdi)
je     11f1 <right+0xf1>
mov    $0x1,%esi
mov    0x14(%rdi),%ebp
test   %ebp,%ebp
je     1209 <right+0x109>
mov    $0x1,%r9b
xor    %ecx,%ecx
mov    $0x1,%edx
mov    0x10(%rdi),%ebx
xor    %eax,%eax
jmp    122b <right+0x12b>
cmpl   $0x0,0x10(%rdi)
mov    $0x1,%edx
cmove  %esi,%edx
mov    $0x1,%r9b
xor    %ecx,%ecx
mov    0x10(%rdi),%ebx
test   %ebx,%ebx
mov    $0x1,%eax
cmovne %eax,%edx
xor    %ebp,%ebp
mov    $0x1,%al
cmp    %ecx,%r8d
mov    $0x1,%esi
cmovne %edx,%esi
test   %r8d,%r8d
cmove  %edx,%esi
cmp    %ebp,%ecx
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,%edx
mov    0x28(%rdi),%ecx
mov    0x2c(%rdi),%r9d
test   %r9d,%r9d
je     1274 <right+0x174>
mov    %esi,%edx
test   %ecx,%ecx
jne    1278 <right+0x178>
jmp    1295 <right+0x195>
test   %ecx,%ecx
je     1284 <right+0x184>
mov    0x24(%rdi),%ebp
xor    %r8d,%r8d
test   %ebp,%ebp
jne    12a6 <right+0x1a6>
jmp    12be <right+0x1be>
cmpl   $0x0,0x24(%rdi)
jne    1290 <right+0x190>
cmpl   $0x0,0x20(%rdi)
je     1295 <right+0x195>
mov    $0x1,%esi
mov    0x24(%rdi),%ebp
test   %ebp,%ebp
je     12ad <right+0x1ad>
mov    $0x1,%r8b
xor    %ecx,%ecx
mov    $0x1,%edx
mov    0x20(%rdi),%ebx
xor    %esi,%esi
jmp    12d0 <right+0x1d0>
cmpl   $0x0,0x20(%rdi)
mov    $0x1,%edx
cmove  %esi,%edx
mov    $0x1,%r8b
xor    %ecx,%ecx
mov    0x20(%rdi),%ebx
test   %ebx,%ebx
mov    $0x1,%esi
cmovne %esi,%edx
xor    %ebp,%ebp
mov    $0x1,%sil
cmp    %ecx,%r9d
mov    $0x1,%eax
cmovne %edx,%eax
test   %r9d,%r9d
cmove  %edx,%eax
cmp    %ebp,%ecx
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    0x38(%rdi),%r14d
mov    0x3c(%rdi),%r11d
test   %r11d,%r11d
je     131e <right+0x21e>
mov    %eax,%r12d
test   %r14d,%r14d
jne    1323 <right+0x223>
jmp    1342 <right+0x242>
test   %r14d,%r14d
je     1331 <right+0x231>
mov    0x34(%rdi),%r15d
xor    %r8d,%r8d
test   %r15d,%r15d
jne    1357 <right+0x257>
jmp    1374 <right+0x274>
cmpl   $0x0,0x34(%rdi)
jne    133d <right+0x23d>
cmpl   $0x0,0x30(%rdi)
je     1342 <right+0x242>
mov    $0x1,%eax
mov    0x34(%rdi),%r15d
test   %r15d,%r15d
je     1360 <right+0x260>
mov    $0x1,%r8b
xor    %r14d,%r14d
mov    $0x1,%r12d
mov    0x30(%rdi),%r9d
xor    %r10d,%r10d
jmp    138a <right+0x28a>
cmpl   $0x0,0x30(%rdi)
mov    $0x1,%r12d
cmove  %eax,%r12d
mov    $0x1,%r8b
xor    %r14d,%r14d
mov    0x30(%rdi),%r9d
test   %r9d,%r9d
mov    $0x1,%eax
cmovne %eax,%r12d
xor    %r15d,%r15d
mov    $0x1,%r10b
xor    %eax,%eax
jmp    139e <right+0x29e>
xchg   %ax,%ax
add    $0x10,%rax
cmp    $0x40,%rax
je     14db <right+0x3db>
mov    0xc(%rdi,%rax,1),%esi
mov    0x4(%rdi,%rax,1),%edx
mov    0x8(%rdi,%rax,1),%ecx
test   %esi,%esi
je     1400 <right+0x300>
mov    %edx,%ebx
mov    %ecx,%edx
mov    %esi,%ecx
test   %edx,%edx
je     141a <right+0x31a>
mov    %ebx,%esi
mov    %edx,%ebx
test   %esi,%esi
je     1430 <right+0x330>
test   %ecx,%ecx
je     1442 <right+0x342>
mov    %esi,%edx
mov    %ebx,%esi
mov    %ecx,%ebx
test   %esi,%esi
je     1460 <right+0x360>
mov    %edx,%ecx
mov    %esi,%edx
test   %ecx,%ecx
je     147a <right+0x37a>
test   %ebx,%ebx
je     1490 <right+0x390>
mov    %ecx,%esi
mov    %edx,%ecx
test   %ecx,%ecx
je     14ae <right+0x3ae>
test   %esi,%esi
jne    1390 <right+0x290>
jmp    14c8 <right+0x3c8>
nopl   0x0(%rax,%rax,1)
mov    %ecx,0xc(%rdi,%rax,1)
mov    %edx,0x8(%rdi,%rax,1)
mov    (%rdi,%rax,1),%ebx
mov    %ebx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
test   %edx,%edx
jne    13b8 <right+0x2b8>
mov    %ebx,0x8(%rdi,%rax,1)
mov    (%rdi,%rax,1),%esi
mov    %esi,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
test   %esi,%esi
jne    13c0 <right+0x2c0>
mov    (%rdi,%rax,1),%esi
mov    %esi,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
test   %ecx,%ecx
jne    13c4 <right+0x2c4>
mov    %ebx,0xc(%rdi,%rax,1)
mov    %esi,0x8(%rdi,%rax,1)
mov    (%rdi,%rax,1),%edx
mov    %edx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
test   %esi,%esi
jne    13d2 <right+0x2d2>
mov    %edx,0x8(%rdi,%rax,1)
mov    (%rdi,%rax,1),%ecx
mov    %ecx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
test   %ecx,%ecx
jne    13de <right+0x2de>
mov    (%rdi,%rax,1),%ecx
mov    %ecx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
test   %ebx,%ebx
jne    13e6 <right+0x2e6>
mov    %edx,0xc(%rdi,%rax,1)
mov    %ecx,0x8(%rdi,%rax,1)
mov    (%rdi,%rax,1),%esi
mov    %esi,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
test   %ecx,%ecx
jne    13f2 <right+0x2f2>
mov    %esi,0x8(%rdi,%rax,1)
mov    (%rdi,%rax,1),%esi
mov    %esi,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
test   %esi,%esi
jne    1390 <right+0x290>
mov    (%rdi,%rax,1),%ecx
mov    %ecx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
jmp    1390 <right+0x290>
xor    %eax,%eax
jmp    14ee <right+0x3ee>
nop
add    $0x10,%rax
cmp    $0x40,%rax
je     1637 <right+0x537>
mov    0x8(%rdi,%rax,1),%ebp
mov    0xc(%rdi,%rax,1),%ecx
cmp    %ebp,%ecx
jne    1530 <right+0x430>
add    %ecx,%ecx
mov    %ecx,0xc(%rdi,%rax,1)
mov    (%rdi,%rax,1),%ebx
mov    0x4(%rdi,%rax,1),%ebp
mov    %ebp,0x8(%rdi,%rax,1)
mov    %ebx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
cmp    %ebx,%ebp
je     1538 <right+0x438>
mov    (%rdi,%rax,1),%esi
cmp    %esi,%ebx
je     1554 <right+0x454>
jmp    1565 <right+0x465>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x4(%rdi,%rax,1),%ebx
cmp    %ebx,%ebp
jne    151a <right+0x41a>
add    %ebx,%ebx
mov    %ebx,0x8(%rdi,%rax,1)
mov    %ebx,%ebp
mov    (%rdi,%rax,1),%ebx
mov    %ebx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
xor    %esi,%esi
cmp    %esi,%ebx
jne    1565 <right+0x465>
mov    %esi,%ebx
add    %esi,%ebx
mov    %ebx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
xor    %esi,%esi
mov    $0x1,%r13d
test   %ecx,%ecx
je     15b0 <right+0x4b0>
mov    %esi,%edx
mov    %ebx,%esi
mov    %ebp,%ebx
test   %ebx,%ebx
je     15cc <right+0x4cc>
mov    %edx,%ecx
mov    %esi,%edx
test   %edx,%edx
je     15e3 <right+0x4e3>
mov    %ecx,%esi
mov    %edx,%ecx
test   %r13d,%r13d
je     15f5 <right+0x4f5>
mov    %esi,%edx
mov    %ecx,%esi
mov    %ebx,%ecx
test   %ecx,%ecx
je     160e <right+0x50e>
mov    %edx,%ecx
mov    %esi,%edx
test   %edx,%edx
jne    14e0 <right+0x3e0>
jmp    1627 <right+0x527>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ebp,0xc(%rdi,%rax,1)
mov    %ebx,0x8(%rdi,%rax,1)
mov    %esi,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
xor    %edx,%edx
mov    %ebp,%r13d
test   %ebx,%ebx
jne    1579 <right+0x479>
mov    %esi,0x8(%rdi,%rax,1)
mov    %edx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
xor    %ecx,%ecx
mov    %esi,%ebx
test   %edx,%edx
jne    1581 <right+0x481>
mov    %ecx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
xor    %esi,%esi
test   %r13d,%r13d
jne    158a <right+0x48a>
mov    %ebx,0xc(%rdi,%rax,1)
mov    %ecx,0x8(%rdi,%rax,1)
mov    %esi,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
xor    %edx,%edx
test   %ecx,%ecx
jne    1594 <right+0x494>
mov    %esi,0x8(%rdi,%rax,1)
mov    %edx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
xor    %ecx,%ecx
test   %edx,%edx
jne    14e0 <right+0x3e0>
mov    %ecx,0x4(%rdi,%rax,1)
movl   $0x0,(%rdi,%rax,1)
jmp    14e0 <right+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
mov    $0x1,%r8b
xor    %r9d,%r9d
jmp    1174 <right+0x74>

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

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