int main(int argc, char *argv[]) {
  const int im = 16;
  const int jm = 16;
  const int imp1 = im + 1;
  const int jmp1 = jm + 1;
  const int imp2 = im + 2;
  const int jmp2 = jm + 2;
  const int nsteps = 12;
  const int periodic = 1;
  int i, j, n;
  int live, ncount;
  int **state_old;
  int **state_new;
  state_old = calloc(imp2, sizeof(int *));
  state_new = calloc(imp2, sizeof(int *));
  assert(state_old);
  assert(state_new);
  for (i = 0; i < imp2; i++) {
    state_old[i] = calloc(jmp2, sizeof(int));
    state_new[i] = calloc(jmp2, sizeof(int));
    assert(state_old[i]);
    assert(state_new[i]);
  }
  i = im / 2;
  j = jm / 2;
  assert(i >= 3 && i <= im - 2);
  assert(j >= 3);
  state_old[i - 2][j] = 1;
  state_old[i - 1][j] = 1;
  state_old[i - 1][j - 1] = 1;
  state_old[i][j - 2] = 1;
  state_old[i + 1][j] = 1;
  state_old[i + 1][j - 1] = 1;
  state_old[i + 2][j] = 1;
  for (n = 1; n <= nsteps; n++) {
    if (periodic) {
      for (j = 1; j <= jm; j++) {
        state_old[0][j] = state_old[im][j];
        state_old[imp1][j] = state_old[1][j];
      }
      for (i = 0; i <= imp1; i++) {
        state_old[i][0] = state_old[i][jm];
        state_old[i][jmp1] = state_old[i][1];
      }
    } else {
      for (j = 1; j <= jm; j++) {
        state_old[0][j] = 0;
        state_old[imp1][j] = 0;
      }
      for (i = 0; i <= imp1; i++) {
        state_old[i][0] = 0;
        state_old[i][jmp1] = 0;
      }
    }
    ncount = 0;
    for (i = 1; i <= im; i++) {
      for (j = 1; j <= jm; j++) {
        state_new[i][j] = 0;
        if (state_old[i][j])
          ncount += 1;
        live = state_old[i - 1][j - 1] + state_old[i][j - 1] +
               state_old[i + 1][j - 1] + state_old[i - 1][j] +
               state_old[i + 1][j] + state_old[i - 1][j + 1] +
               state_old[i][j + 1] + state_old[i + 1][j + 1];
        if (state_old[i][j]) {
          if (live == 2 || live == 3) {
            state_new[i][j] = 1;
          } else {
            state_new[i][j] = 0;
          }
        } else {
          if (live == 3) {
            state_new[i][j] = 1;
          }
        }
      }
    }
    for (j = 1; j <= jm; j++) {
      for (i = 1; i <= im; i++) {
        printf("%1d ", state_old[i][j]);
      }
      printf("\n");
    }
    printf("Step, count %2d %2d\n", n, ncount);
    for (i = 0; i < imp2; i++) {
      for (j = 0; j < jmp2; j++) {
        state_old[i][j] = state_new[i][j];
      }
    }
  }
  for (i = 0; i < imp2; i++) {
    free(state_old[i]);
    free(state_new[i]);
  }
  free(state_old);
  free(state_new);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x10,-0x14(%rbp)
movl   $0x10,-0x18(%rbp)
movl   $0x11,-0x1c(%rbp)
movl   $0x11,-0x20(%rbp)
movl   $0x12,-0x24(%rbp)
movl   $0x12,-0x28(%rbp)
movl   $0xc,-0x2c(%rbp)
movl   $0x1,-0x30(%rbp)
mov    $0x12,%edi
mov    $0x8,%esi
call   1050 <calloc@plt>
mov    %rax,-0x50(%rbp)
mov    $0x12,%edi
mov    $0x8,%esi
call   1050 <calloc@plt>
mov    %rax,-0x58(%rbp)
mov    -0x50(%rbp),%rdi
mov    $0x0,%al
call   1060 <assert@plt>
mov    -0x58(%rbp),%rdi
mov    $0x0,%al
call   1060 <assert@plt>
movl   $0x0,-0x34(%rbp)
cmpl   $0x12,-0x34(%rbp)
jge    124b <main+0x10b>
mov    $0x12,%edi
mov    $0x4,%esi
call   1050 <calloc@plt>
mov    %rax,%rdx
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    $0x12,%edi
mov    $0x4,%esi
call   1050 <calloc@plt>
mov    %rax,%rdx
mov    -0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
mov    $0x0,%al
call   1060 <assert@plt>
mov    -0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
mov    $0x0,%al
call   1060 <assert@plt>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11d1 <main+0x91>
movl   $0x8,-0x34(%rbp)
movl   $0x8,-0x38(%rbp)
xor    %eax,%eax
cmpl   $0x3,-0x34(%rbp)
mov    %al,-0x59(%rbp)
jl     1272 <main+0x132>
cmpl   $0xe,-0x34(%rbp)
setle  %al
mov    %al,-0x59(%rbp)
mov    -0x59(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1060 <assert@plt>
cmpl   $0x3,-0x38(%rbp)
setge  %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1060 <assert@plt>
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x38(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
movl   $0x1,-0x3c(%rbp)
cmpl   $0xc,-0x3c(%rbp)
jg     1716 <main+0x5d6>
movl   $0x1,-0x38(%rbp)
cmpl   $0x10,-0x38(%rbp)
jg     13d3 <main+0x293>
mov    -0x50(%rbp),%rax
mov    0x80(%rax),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x50(%rbp),%rax
mov    (%rax),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x50(%rbp),%rax
mov    0x88(%rax),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    137a <main+0x23a>
movl   $0x0,-0x34(%rbp)
cmpl   $0x11,-0x34(%rbp)
jg     142d <main+0x2ed>
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x40(%rax),%ecx
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,(%rax)
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x4(%rax),%ecx
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x44(%rax)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    13da <main+0x29a>
movl   $0x0,-0x44(%rbp)
movl   $0x1,-0x34(%rbp)
cmpl   $0x10,-0x34(%rbp)
jg     1619 <main+0x4d9>
movl   $0x1,-0x38(%rbp)
cmpl   $0x10,-0x38(%rbp)
jg     1606 <main+0x4c6>
mov    -0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1490 <main+0x350>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x50(%rbp),%rcx
movslq -0x34(%rbp),%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x38(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    -0x50(%rbp),%rcx
mov    -0x34(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x38(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    -0x50(%rbp),%rcx
mov    -0x34(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
movslq -0x38(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    -0x50(%rbp),%rcx
mov    -0x34(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
movslq -0x38(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    -0x50(%rbp),%rcx
mov    -0x34(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x38(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    -0x50(%rbp),%rcx
movslq -0x34(%rbp),%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x38(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    -0x50(%rbp),%rcx
mov    -0x34(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x38(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x40(%rbp)
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     15cd <main+0x48d>
cmpl   $0x2,-0x40(%rbp)
je     1595 <main+0x455>
cmpl   $0x3,-0x40(%rbp)
jne    15b1 <main+0x471>
mov    -0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    15c8 <main+0x488>
mov    -0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    15f3 <main+0x4b3>
cmpl   $0x3,-0x40(%rbp)
jne    15ee <main+0x4ae>
mov    -0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    15f3 <main+0x4b3>
jmp    15f8 <main+0x4b8>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    144c <main+0x30c>
jmp    160b <main+0x4cb>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    143b <main+0x2fb>
movl   $0x1,-0x38(%rbp)
cmpl   $0x10,-0x38(%rbp)
jg     1686 <main+0x546>
movl   $0x1,-0x34(%rbp)
cmpl   $0x10,-0x34(%rbp)
jg     166a <main+0x52a>
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%esi
lea    0x9ab(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1631 <main+0x4f1>
lea    0x9a7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1620 <main+0x4e0>
mov    -0x3c(%rbp),%esi
mov    -0x44(%rbp),%edx
lea    0x972(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x34(%rbp)
cmpl   $0x12,-0x34(%rbp)
jge    1703 <main+0x5c3>
movl   $0x0,-0x38(%rbp)
cmpl   $0x12,-0x38(%rbp)
jge    16f0 <main+0x5b0>
mov    -0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    16b2 <main+0x572>
jmp    16f5 <main+0x5b5>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    16a1 <main+0x561>
jmp    1708 <main+0x5c8>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1369 <main+0x229>
movl   $0x0,-0x34(%rbp)
cmpl   $0x12,-0x34(%rbp)
jge    1757 <main+0x617>
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    171d <main+0x5dd>
mov    -0x50(%rbp),%rdi
call   1030 <free@plt>
mov    -0x58(%rbp),%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    $0x12,%edi
mov    $0x8,%esi
call   1060 <calloc@plt>
mov    %rax,%r15
mov    $0x12,%edi
mov    $0x8,%esi
call   1060 <calloc@plt>
mov    %rax,%rbp
mov    %r15,%rdi
xor    %eax,%eax
call   1070 <assert@plt>
mov    %rbp,%rdi
xor    %eax,%eax
call   1070 <assert@plt>
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
mov    $0x12,%edi
mov    $0x4,%esi
call   1060 <calloc@plt>
mov    %rax,%r14
mov    %rax,(%r15,%rbx,8)
mov    $0x12,%edi
mov    $0x4,%esi
call   1060 <calloc@plt>
mov    %rax,0x0(%rbp,%rbx,8)
mov    %r14,%rdi
xor    %eax,%eax
call   1070 <assert@plt>
mov    0x0(%rbp,%rbx,8),%rdi
xor    %eax,%eax
call   1070 <assert@plt>
add    $0x1,%rbx
cmp    $0x12,%rbx
jne    11a0 <main+0x50>
mov    $0x1,%r13d
mov    $0x1,%edi
xor    %eax,%eax
call   1070 <assert@plt>
mov    $0x1,%edi
xor    %eax,%eax
call   1070 <assert@plt>
mov    0x30(%r15),%rax
movl   $0x1,0x20(%rax)
mov    0x38(%r15),%rax
movabs $0x100000001,%rcx
mov    %rcx,0x1c(%rax)
mov    0x40(%r15),%rax
movl   $0x1,0x18(%rax)
mov    0x48(%r15),%rax
mov    %rcx,0x1c(%rax)
mov    0x50(%r15),%rax
movl   $0x1,0x20(%rax)
pxor   %xmm7,%xmm7
pcmpeqd %xmm8,%xmm8
movdqa 0xdab(%rip),%xmm9
movdqa 0xdb2(%rip),%xmm10
movdqa 0xdb9(%rip),%xmm11
mov    %r15,0x8(%rsp)
mov    %rbp,0x18(%rsp)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r13d,0x4(%rsp)
mov    0x80(%r15),%rax
mov    (%r15),%rcx
mov    0x8(%r15),%rdx
mov    0x88(%r15),%rsi
mov    0x4(%rax),%edi
mov    %edi,0x4(%rcx)
mov    0x4(%rdx),%edi
mov    %edi,0x4(%rsi)
mov    0x8(%rax),%edi
mov    %edi,0x8(%rcx)
mov    0x8(%rdx),%edi
mov    %edi,0x8(%rsi)
mov    0xc(%rax),%edi
mov    %edi,0xc(%rcx)
mov    0xc(%rdx),%edi
mov    %edi,0xc(%rsi)
mov    0x10(%rax),%edi
mov    %edi,0x10(%rcx)
mov    0x10(%rdx),%edi
mov    %edi,0x10(%rsi)
mov    0x14(%rax),%edi
mov    %edi,0x14(%rcx)
mov    0x14(%rdx),%edi
mov    %edi,0x14(%rsi)
mov    0x18(%rax),%edi
mov    %edi,0x18(%rcx)
mov    0x18(%rdx),%edi
mov    %edi,0x18(%rsi)
mov    0x1c(%rax),%edi
mov    %edi,0x1c(%rcx)
mov    0x1c(%rdx),%edi
mov    %edi,0x1c(%rsi)
mov    0x20(%rax),%edi
mov    %edi,0x20(%rcx)
mov    0x20(%rdx),%edi
mov    %edi,0x20(%rsi)
mov    0x24(%rax),%edi
mov    %edi,0x24(%rcx)
mov    0x24(%rdx),%edi
mov    %edi,0x24(%rsi)
mov    0x28(%rax),%edi
mov    %edi,0x28(%rcx)
mov    0x28(%rdx),%edi
mov    %edi,0x28(%rsi)
mov    0x2c(%rax),%edi
mov    %edi,0x2c(%rcx)
mov    0x2c(%rdx),%edi
mov    %edi,0x2c(%rsi)
mov    0x30(%rax),%edi
mov    %edi,0x30(%rcx)
mov    0x30(%rdx),%edi
mov    %edi,0x30(%rsi)
mov    0x34(%rax),%edi
mov    %edi,0x34(%rcx)
mov    0x34(%rdx),%edi
mov    %edi,0x34(%rsi)
mov    0x38(%rax),%edi
mov    %edi,0x38(%rcx)
mov    0x38(%rdx),%edi
mov    %edi,0x38(%rsi)
mov    0x3c(%rax),%edi
mov    %edi,0x3c(%rcx)
mov    0x3c(%rdx),%edi
mov    %edi,0x3c(%rsi)
mov    0x40(%rax),%eax
mov    %eax,0x40(%rcx)
mov    0x40(%rdx),%eax
mov    %eax,0x40(%rsi)
mov    (%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x8(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x10(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x18(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x20(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x28(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x30(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x38(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x40(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x48(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x50(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x58(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x60(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x68(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x70(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x78(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x80(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x88(%r15),%rax
mov    0x4(%rax),%ecx
mov    0x40(%rax),%edx
mov    %edx,(%rax)
mov    %ecx,0x44(%rax)
mov    0x8(%r15),%rdx
mov    $0x1,%eax
mov    %rdx,0x10(%rsp)
xor    %r14d,%r14d
jmp    14ae <main+0x35e>
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%r14d
mov    %r13,%rdx
mov    0x20(%rsp),%rax
cmp    $0x11,%rax
mov    0x18(%rsp),%rbp
je     16e0 <main+0x590>
mov    0x0(%rbp,%rax,8),%r10
mov    -0x8(%r15,%rax,8),%rdi
mov    0x8(%r15,%rax,8),%r13
add    $0x1,%rax
mov    %rax,0x20(%rsp)
lea    0x4(%r10),%rbp
lea    0x44(%r10),%rcx
lea    0x4(%rdx),%rax
lea    0x44(%rdx),%rbx
lea    0x48(%rdi),%r8
lea    0x40(%rdx),%r11
lea    0x48(%r13),%r15
cmp    %rbx,%rbp
setb   0x3(%rsp)
cmp    %rcx,%rax
lea    0x48(%rdx),%r12
setb   %r9b
cmp    %r8,%rbp
setb   %al
cmp    %rcx,%rdi
setb   %sil
cmp    %r11,%rbp
setb   %bl
cmp    %rcx,%rdx
setb   %r8b
cmp    %r15,%rbp
setb   %r15b
cmp    %rcx,%r13
setb   %r11b
cmp    %r12,%rbp
lea    0x8(%rdx),%rbp
setb   %r12b
cmp    %rcx,%rbp
setb   %cl
test   %r9b,0x3(%rsp)
jne    1660 <main+0x510>
and    %sil,%al
jne    1660 <main+0x510>
and    %r8b,%bl
jne    1660 <main+0x510>
and    %r11b,%r15b
jne    1660 <main+0x510>
and    %cl,%r12b
jne    1660 <main+0x510>
movd   %r14d,%xmm0
xor    %ebp,%ebp
mov    0x8(%rsp),%r15
jmp    1587 <main+0x437>
nopl   0x0(%rax,%rax,1)
paddd  %xmm1,%xmm0
psubd  %xmm8,%xmm0
add    $0x4,%rbp
cmp    $0x10,%rbp
je     1480 <main+0x330>
movdqu %xmm7,0x4(%r10,%rbp,4)
movdqu (%rdx,%rbp,4),%xmm2
movdqu 0x4(%rdx,%rbp,4),%xmm1
movdqu 0x8(%rdx,%rbp,4),%xmm3
pcmpeqd %xmm7,%xmm1
movdqu (%rdi,%rbp,4),%xmm4
paddd  %xmm2,%xmm4
movdqu 0x4(%rdi,%rbp,4),%xmm2
movdqu 0x8(%rdi,%rbp,4),%xmm5
movdqu 0x0(%r13,%rbp,4),%xmm6
paddd  %xmm2,%xmm6
paddd  %xmm4,%xmm6
movdqu 0x4(%r13,%rbp,4),%xmm2
paddd  %xmm5,%xmm2
paddd  %xmm3,%xmm2
paddd  %xmm6,%xmm2
movdqu 0x8(%r13,%rbp,4),%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm4
pand   %xmm9,%xmm4
pcmpeqd %xmm10,%xmm4
pcmpeqd %xmm11,%xmm3
pand   %xmm1,%xmm3
movdqa %xmm1,%xmm2
pandn  %xmm4,%xmm2
por    %xmm3,%xmm2
movd   %xmm2,%eax
test   $0x1,%al
je     1619 <main+0x4c9>
movl   $0x1,0x4(%r10,%rbp,4)
pextrw $0x2,%xmm2,%eax
test   $0x1,%al
je     162b <main+0x4db>
movl   $0x1,0x8(%r10,%rbp,4)
pextrw $0x4,%xmm2,%eax
test   $0x1,%al
je     163d <main+0x4ed>
movl   $0x1,0xc(%r10,%rbp,4)
pextrw $0x6,%xmm2,%eax
test   $0x1,%al
je     1570 <main+0x420>
movl   $0x1,0x10(%r10,%rbp,4)
jmp    1570 <main+0x420>
nopl   0x0(%rax,%rax,1)
xor    %ebx,%ebx
mov    0x8(%rsp),%r15
jmp    168c <main+0x53c>
nopl   0x0(%rax)
movl   $0x1,0x4(%r10,%rbx,4)
mov    %al,%cl
add    %ecx,%r14d
add    $0x1,%rbx
cmp    $0x10,%rbx
je     1497 <main+0x347>
movl   $0x0,0x4(%r10,%rbx,4)
mov    0x4(%rdx,%rbx,4),%esi
xor    %ecx,%ecx
test   %esi,%esi
setne  %al
mov    (%rdx,%rbx,4),%ebp
add    (%rdi,%rbx,4),%ebp
add    0x0(%r13,%rbx,4),%ebp
add    0x4(%rdi,%rbx,4),%ebp
add    0x4(%r13,%rbx,4),%ebp
add    0x8(%rdi,%rbx,4),%ebp
add    0x8(%rdx,%rbx,4),%ebp
add    0x8(%r13,%rbx,4),%ebp
test   %esi,%esi
je     16d0 <main+0x580>
and    $0xfffffffe,%ebp
cmp    $0x2,%ebp
je     1670 <main+0x520>
jmp    1679 <main+0x529>
nop
cmp    $0x3,%ebp
je     1670 <main+0x520>
jmp    1679 <main+0x529>
nopw   0x0(%rax,%rax,1)
xor    %r12d,%r12d
mov    0x4(%rsp),%r13d
lea    0x941(%rip),%rbx
mov    0x10(%rsp),%rax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x10(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x18(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x20(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x28(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x30(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x38(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x40(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x48(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x50(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x58(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x60(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x68(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x70(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x78(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x80(%r15),%rax
mov    0x4(%rax,%r12,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1040 <putchar@plt>
cmp    $0x3c,%r12
je     1850 <main+0x700>
mov    0x8(%r15),%rax
add    $0x4,%r12
jmp    1700 <main+0x5b0>
nopl   0x0(%rax)
lea    0x7de(%rip),%rdi
mov    %r13d,%esi
mov    %r14d,%edx
xor    %eax,%eax
call   1050 <printf@plt>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
mov    0x0(%rbp,%rax,8),%rcx
mov    (%r15,%rax,8),%rdx
mov    (%rcx),%esi
mov    %esi,(%rdx)
mov    0x4(%rcx),%esi
mov    %esi,0x4(%rdx)
mov    0x8(%rcx),%esi
mov    %esi,0x8(%rdx)
mov    0xc(%rcx),%esi
mov    %esi,0xc(%rdx)
mov    0x10(%rcx),%esi
mov    %esi,0x10(%rdx)
mov    0x14(%rcx),%esi
mov    %esi,0x14(%rdx)
mov    0x18(%rcx),%esi
mov    %esi,0x18(%rdx)
mov    0x1c(%rcx),%esi
mov    %esi,0x1c(%rdx)
mov    0x20(%rcx),%esi
mov    %esi,0x20(%rdx)
mov    0x24(%rcx),%esi
mov    %esi,0x24(%rdx)
mov    0x28(%rcx),%esi
mov    %esi,0x28(%rdx)
mov    0x2c(%rcx),%esi
mov    %esi,0x2c(%rdx)
mov    0x30(%rcx),%esi
mov    %esi,0x30(%rdx)
mov    0x34(%rcx),%esi
mov    %esi,0x34(%rdx)
mov    0x38(%rcx),%esi
mov    %esi,0x38(%rdx)
mov    0x3c(%rcx),%esi
mov    %esi,0x3c(%rdx)
mov    0x40(%rcx),%esi
mov    %esi,0x40(%rdx)
mov    0x44(%rcx),%ecx
mov    %ecx,0x44(%rdx)
add    $0x1,%rax
cmp    $0x12,%rax
jne    1870 <main+0x720>
add    $0x1,%r13d
cmp    $0xd,%r13d
pxor   %xmm7,%xmm7
pcmpeqd %xmm8,%xmm8
movdqa 0x6f9(%rip),%xmm9
movdqa 0x700(%rip),%xmm10
movdqa 0x707(%rip),%xmm11
jne    1280 <main+0x130>
mov    (%r15),%rdi
call   1030 <free@plt>
mov    0x0(%rbp),%rdi
call   1030 <free@plt>
mov    0x8(%r15),%rdi
call   1030 <free@plt>
mov    0x8(%rbp),%rdi
call   1030 <free@plt>
mov    0x10(%r15),%rdi
call   1030 <free@plt>
mov    0x10(%rbp),%rdi
call   1030 <free@plt>
mov    0x18(%r15),%rdi
call   1030 <free@plt>
mov    0x18(%rbp),%rdi
call   1030 <free@plt>
mov    0x20(%r15),%rdi
call   1030 <free@plt>
mov    0x20(%rbp),%rdi
call   1030 <free@plt>
mov    0x28(%r15),%rdi
call   1030 <free@plt>
mov    0x28(%rbp),%rdi
call   1030 <free@plt>
mov    0x30(%r15),%rdi
call   1030 <free@plt>
mov    0x30(%rbp),%rdi
call   1030 <free@plt>
mov    0x38(%r15),%rdi
call   1030 <free@plt>
mov    0x38(%rbp),%rdi
call   1030 <free@plt>
mov    0x40(%r15),%rdi
call   1030 <free@plt>
mov    0x40(%rbp),%rdi
call   1030 <free@plt>
mov    0x48(%r15),%rdi
call   1030 <free@plt>
mov    0x48(%rbp),%rdi
call   1030 <free@plt>
mov    0x50(%r15),%rdi
call   1030 <free@plt>
mov    0x50(%rbp),%rdi
call   1030 <free@plt>
mov    0x58(%r15),%rdi
call   1030 <free@plt>
mov    0x58(%rbp),%rdi
call   1030 <free@plt>
mov    0x60(%r15),%rdi
call   1030 <free@plt>
mov    0x60(%rbp),%rdi
call   1030 <free@plt>
mov    0x68(%r15),%rdi
call   1030 <free@plt>
mov    0x68(%rbp),%rdi
call   1030 <free@plt>
mov    0x70(%r15),%rdi
call   1030 <free@plt>
mov    0x70(%rbp),%rdi
call   1030 <free@plt>
mov    0x78(%r15),%rdi
call   1030 <free@plt>
mov    0x78(%rbp),%rdi
call   1030 <free@plt>
mov    0x80(%r15),%rdi
call   1030 <free@plt>
mov    0x80(%rbp),%rdi
call   1030 <free@plt>
mov    0x88(%r15),%rdi
call   1030 <free@plt>
mov    0x88(%rbp),%rdi
call   1030 <free@plt>
mov    %r15,%rdi
call   1030 <free@plt>
mov    %rbp,%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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