int main(int argc, const char *argv[]) {
  int grid[20][20] = {
      {8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8},
      {49, 49, 99, 40, 17, 81, 18, 57, 60, 87,
       17, 40, 98, 43, 69, 48, 4,  56, 62, 0},
      {81, 49, 31, 73, 55, 79, 14, 29, 93, 71,
       40, 67, 53, 88, 30, 3,  49, 13, 36, 65},
      {52, 70, 95, 23, 4,  60, 11, 42, 69, 24,
       68, 56, 1,  32, 56, 71, 37, 2,  36, 91},
      {22, 31, 16, 71, 51, 67, 63, 89, 41, 92,
       36, 54, 22, 40, 40, 28, 66, 33, 13, 80},
      {24, 47, 32, 60, 99, 3,  45, 2,  44, 75,
       33, 53, 78, 36, 84, 20, 35, 17, 12, 50},
      {32, 98, 81, 28, 64, 23, 67, 10, 26, 38,
       40, 67, 59, 54, 70, 66, 18, 38, 64, 70},
      {67, 26, 20, 68, 2,  62, 12, 20, 95, 63,
       94, 39, 63, 8,  40, 91, 66, 49, 94, 21},
      {24, 55, 58, 5,  66, 73, 99, 26, 97, 17,
       78, 78, 96, 83, 14, 88, 34, 89, 63, 72},
      {21, 36, 23, 9,  75, 0,  76, 44, 20, 45,
       35, 14, 0,  61, 33, 97, 34, 31, 33, 95},
      {78, 17, 53, 28, 22, 75, 31, 67, 15, 94,
       3,  80, 4,  62, 16, 14, 9,  53, 56, 92},
      {16, 39, 5, 42, 96, 35, 31, 47, 55, 58,
       88, 24, 0, 17, 54, 24, 36, 29, 85, 57},
      {86, 56, 0,  48, 35, 71, 89, 7,  5,  44,
       44, 37, 44, 60, 21, 58, 51, 54, 17, 58},
      {19, 80, 81, 68, 5,  94, 47, 69, 28, 73,
       92, 13, 86, 52, 17, 77, 4,  89, 55, 40},
      {4,  52, 8,  83, 97, 35, 99, 16, 7,  97,
       57, 32, 16, 26, 26, 79, 33, 27, 98, 66},
      {88, 36, 68, 87, 57, 62, 20, 72, 3,  46,
       33, 67, 46, 55, 12, 32, 63, 93, 53, 69},
      {4,  42, 16, 73, 38, 25, 39, 11, 24, 94,
       72, 18, 8,  46, 29, 32, 40, 62, 76, 36},
      {20, 69, 36, 41, 72, 30, 23, 88, 34, 62,
       99, 69, 82, 67, 59, 85, 74, 4,  36, 16},
      {20, 73, 35, 29, 78, 31, 90, 1,  74, 31,
       49, 71, 48, 86, 81, 16, 23, 57, 5,  54},
      {1,  70, 54, 71, 83, 51, 54, 69, 16, 92,
       33, 48, 61, 43, 52, 1,  89, 19, 67, 48}};
  int i, j;
  int max = 0;
  int temp;
  for (i = 0; i < 20; i++) {
    for (j = 0; j < 16; j++) {
      temp = grid[i][j] * grid[i][j + 1] * grid[i][j + 2] * grid[i][j + 3];
      if (temp > max) {
        max = temp;
      }
    }
  }
  for (i = 0; i < 16; i++) {
    for (j = 0; j < 20; j++) {
      temp = grid[i][j] * grid[i + 1][j] * grid[i + 2][j] * grid[i + 3][j];
      if (temp > max) {
        max = temp;
      }
    }
  }
  for (i = 0; i < 16; i++) {
    for (j = 0; j < 16; j++) {
      temp = grid[i][j] * grid[i + 1][j + 1] * grid[i + 2][j + 2] *
             grid[i + 3][j + 3];
      if (temp > max) {
        max = temp;
      }
    }
  }
  for (i = 0; i < 16; i++) {
    for (j = 3; j < 20; j++) {
      temp = grid[i][j] * grid[i + 1][j - 1] * grid[i + 2][j - 2] *
             grid[i + 3][j - 3];
      if (temp > max) {
        max = temp;
      }
    }
  }
  printf("%d\n", max);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x660,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
lea    -0x650(%rbp),%rdi
lea    0xeb9(%rip),%rsi
mov    $0x640,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x65c(%rbp)
movl   $0x0,-0x654(%rbp)
cmpl   $0x14,-0x654(%rbp)
jge    126d <main+0x14d>
movl   $0x0,-0x658(%rbp)
cmpl   $0x10,-0x658(%rbp)
jge    1254 <main+0x134>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
movslq -0x654(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
movslq -0x654(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
movslq -0x654(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0x660(%rbp)
mov    -0x660(%rbp),%eax
cmp    -0x65c(%rbp),%eax
jle    123b <main+0x11b>
mov    -0x660(%rbp),%eax
mov    %eax,-0x65c(%rbp)
jmp    1240 <main+0x120>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    117c <main+0x5c>
jmp    1259 <main+0x139>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    1165 <main+0x45>
movl   $0x0,-0x654(%rbp)
cmpl   $0x10,-0x654(%rbp)
jge    137f <main+0x25f>
movl   $0x0,-0x658(%rbp)
cmpl   $0x14,-0x658(%rbp)
jge    1366 <main+0x246>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x654(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
movslq -0x658(%rbp),%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x654(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
movslq -0x658(%rbp),%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x654(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
movslq -0x658(%rbp),%rdx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0x660(%rbp)
mov    -0x660(%rbp),%eax
cmp    -0x65c(%rbp),%eax
jle    134d <main+0x22d>
mov    -0x660(%rbp),%eax
mov    %eax,-0x65c(%rbp)
jmp    1352 <main+0x232>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    128e <main+0x16e>
jmp    136b <main+0x24b>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    1277 <main+0x157>
movl   $0x0,-0x654(%rbp)
cmpl   $0x10,-0x654(%rbp)
jge    14a0 <main+0x380>
movl   $0x0,-0x658(%rbp)
cmpl   $0x10,-0x658(%rbp)
jge    1487 <main+0x367>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x654(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x654(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x654(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0x660(%rbp)
mov    -0x660(%rbp),%eax
cmp    -0x65c(%rbp),%eax
jle    146e <main+0x34e>
mov    -0x660(%rbp),%eax
mov    %eax,-0x65c(%rbp)
jmp    1473 <main+0x353>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    13a0 <main+0x280>
jmp    148c <main+0x36c>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    1389 <main+0x269>
movl   $0x0,-0x654(%rbp)
cmpl   $0x10,-0x654(%rbp)
jge    15c1 <main+0x4a1>
movl   $0x3,-0x658(%rbp)
cmpl   $0x14,-0x658(%rbp)
jge    15a8 <main+0x488>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x654(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x654(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
sub    $0x2,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x654(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
sub    $0x3,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0x660(%rbp)
mov    -0x660(%rbp),%eax
cmp    -0x65c(%rbp),%eax
jle    158f <main+0x46f>
mov    -0x660(%rbp),%eax
mov    %eax,-0x65c(%rbp)
jmp    1594 <main+0x474>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    14c1 <main+0x3a1>
jmp    15ad <main+0x48d>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    14aa <main+0x38a>
mov    -0x65c(%rbp),%esi
lea    0x1072(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x660,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
xor    %esi,%esi
mov    $0x48,%r9d
lea    0xee0(%rip),%r8
jmp    1141 <main+0x31>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x50,%r9
cmp    $0x688,%r9
je     1278 <main+0x168>
mov    -0x44(%r9,%r8,1),%r10d
mov    -0x40(%r9,%r8,1),%eax
mov    -0x48(%r9,%r8,1),%edi
imul   %r10d,%edi
mov    -0x3c(%r9,%r8,1),%edx
mov    %eax,%ecx
imul   %edx,%ecx
imul   %ecx,%edi
cmp    %esi,%edi
jg     1167 <main+0x57>
mov    %esi,%edi
imul   %r10d,%eax
mov    -0x38(%r9,%r8,1),%esi
imul   %esi,%edx
imul   %edx,%eax
cmp    %edi,%eax
jg     117c <main+0x6c>
mov    %edi,%eax
mov    -0x34(%r9,%r8,1),%edi
imul   %edi,%esi
imul   %esi,%ecx
cmp    %eax,%ecx
jg     118d <main+0x7d>
mov    %eax,%ecx
mov    -0x30(%r9,%r8,1),%eax
imul   %eax,%edi
imul   %edi,%edx
cmp    %ecx,%edx
jg     119e <main+0x8e>
mov    %ecx,%edx
mov    -0x2c(%r9,%r8,1),%ecx
imul   %ecx,%eax
imul   %eax,%esi
cmp    %edx,%esi
jg     11af <main+0x9f>
mov    %edx,%esi
mov    -0x28(%r9,%r8,1),%edx
imul   %edx,%ecx
imul   %ecx,%edi
cmp    %esi,%edi
jg     11c0 <main+0xb0>
mov    %esi,%edi
mov    -0x24(%r9,%r8,1),%esi
imul   %esi,%edx
imul   %edx,%eax
cmp    %edi,%eax
jg     11d1 <main+0xc1>
mov    %edi,%eax
mov    -0x20(%r9,%r8,1),%edi
imul   %edi,%esi
imul   %esi,%ecx
cmp    %eax,%ecx
jg     11e2 <main+0xd2>
mov    %eax,%ecx
mov    -0x1c(%r9,%r8,1),%eax
imul   %eax,%edi
imul   %edi,%edx
cmp    %ecx,%edx
jg     11f3 <main+0xe3>
mov    %ecx,%edx
mov    -0x18(%r9,%r8,1),%ecx
imul   %ecx,%eax
imul   %eax,%esi
cmp    %edx,%esi
jg     1204 <main+0xf4>
mov    %edx,%esi
mov    -0x14(%r9,%r8,1),%r10d
imul   %r10d,%ecx
imul   %ecx,%edi
cmp    %esi,%edi
jg     1216 <main+0x106>
mov    %esi,%edi
mov    -0x10(%r9,%r8,1),%edx
imul   %edx,%r10d
imul   %r10d,%eax
cmp    %edi,%eax
jg     1229 <main+0x119>
mov    %edi,%eax
mov    -0xc(%r9,%r8,1),%esi
imul   %esi,%edx
imul   %edx,%ecx
cmp    %eax,%ecx
jg     123a <main+0x12a>
mov    %eax,%ecx
mov    -0x8(%r9,%r8,1),%eax
imul   %eax,%esi
imul   %esi,%r10d
cmp    %ecx,%r10d
jg     124e <main+0x13e>
mov    %ecx,%r10d
mov    -0x4(%r9,%r8,1),%ecx
imul   %ecx,%eax
imul   %eax,%edx
cmp    %r10d,%edx
jg     1261 <main+0x151>
mov    %r10d,%edx
imul   %ecx,%esi
imul   (%r9,%r8,1),%esi
cmp    %edx,%esi
jg     1130 <main+0x20>
mov    %edx,%esi
jmp    1130 <main+0x20>
mov    $0x130,%ecx
nopl   (%rax)
movd   %esi,%xmm0
movdqa -0xe0(%rcx,%r8,1),%xmm3
ff ff ff
movdqa -0x130(%rcx,%r8,1),%xmm5
fe ff ff
pshufd $0x0,%xmm0,%xmm9
movdqa -0x120(%rcx,%r8,1),%xmm4
fe ff ff
movdqa -0x110(%rcx,%r8,1),%xmm2
fe ff ff
movdqa -0x100(%rcx,%r8,1),%xmm8
ff ff ff
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm5,%xmm3
pshufd $0xf5,%xmm5,%xmm5
movdqa -0x90(%rcx,%r8,1),%xmm7
ff ff ff
pmuludq %xmm6,%xmm5
pshufd $0xf5,%xmm7,%xmm6
pmuludq %xmm7,%xmm3
movdqa -0x40(%rcx,%r8,1),%xmm7
pmuludq %xmm5,%xmm6
pshufd $0xf5,%xmm7,%xmm5
movdqa -0xd0(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm1
pmuludq %xmm7,%xmm3
pmuludq %xmm4,%xmm0
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm4,%xmm1
pmuludq %xmm6,%xmm5
movdqa -0x80(%rcx,%r8,1),%xmm4
pshufd $0xf5,%xmm4,%xmm7
pmuludq %xmm1,%xmm7
pshufd $0xe8,%xmm3,%xmm6
pmuludq %xmm4,%xmm0
movdqa -0x30(%rcx,%r8,1),%xmm1
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm5,%xmm4
pshufd $0xe8,%xmm0,%xmm3
pshufd $0xf5,%xmm1,%xmm0
pmuludq %xmm7,%xmm0
punpckldq %xmm4,%xmm6
movdqa %xmm6,%xmm4
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm3
movdqa -0xc0(%rcx,%r8,1),%xmm0
ff ff ff
pcmpgtd %xmm9,%xmm4
pshufd $0xf5,%xmm0,%xmm1
pmuludq %xmm2,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pand   %xmm4,%xmm6
pmuludq %xmm2,%xmm1
movdqa -0x70(%rcx,%r8,1),%xmm2
pshufd $0xf5,%xmm2,%xmm7
pandn  %xmm9,%xmm4
pmuludq %xmm1,%xmm7
movdqa %xmm3,%xmm5
pmuludq %xmm2,%xmm0
movdqa -0x20(%rcx,%r8,1),%xmm1
por    %xmm6,%xmm4
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm0,%xmm2
pshufd $0xf5,%xmm1,%xmm0
pcmpgtd %xmm4,%xmm5
pmuludq %xmm7,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm2
movdqa %xmm2,%xmm1
pand   %xmm5,%xmm3
movdqa -0xb0(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm6
pmuludq %xmm8,%xmm0
pandn  %xmm4,%xmm5
pshufd $0xf5,%xmm8,%xmm4
pmuludq %xmm4,%xmm6
movdqa -0x60(%rcx,%r8,1),%xmm4
por    %xmm3,%xmm5
pshufd $0xf5,%xmm4,%xmm7
pmuludq %xmm6,%xmm7
pmuludq %xmm4,%xmm0
pcmpgtd %xmm5,%xmm1
movdqa -0x10(%rcx,%r8,1),%xmm4
pmuludq %xmm4,%xmm0
pshufd $0xe8,%xmm0,%xmm3
pand   %xmm1,%xmm2
pshufd $0xf5,%xmm4,%xmm0
pmuludq %xmm7,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pandn  %xmm5,%xmm1
punpckldq %xmm0,%xmm3
movdqa %xmm3,%xmm0
movdqa -0xf0(%rcx,%r8,1),%xmm4
ff ff ff
movdqa -0xa0(%rcx,%r8,1),%xmm5
ff ff ff
por    %xmm2,%xmm1
pshufd $0xf5,%xmm5,%xmm2
pmuludq %xmm4,%xmm5
pshufd $0xf5,%xmm4,%xmm4
pcmpgtd %xmm1,%xmm0
pmuludq %xmm4,%xmm2
movdqa -0x50(%rcx,%r8,1),%xmm4
pshufd $0xf5,%xmm4,%xmm6
pand   %xmm0,%xmm3
pmuludq %xmm2,%xmm6
pmuludq %xmm4,%xmm5
movdqa (%rcx,%r8,1),%xmm2
pandn  %xmm1,%xmm0
pmuludq %xmm2,%xmm5
pshufd $0xe8,%xmm5,%xmm1
pshufd $0xf5,%xmm2,%xmm2
por    %xmm3,%xmm0
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqa %xmm1,%xmm2
pcmpgtd %xmm0,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
pshufd $0xee,%xmm2,%xmm0
movdqa %xmm2,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
pshufd $0x55,%xmm1,%xmm0
movdqa %xmm1,%xmm2
pcmpgtd %xmm0,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
movd   %xmm2,%esi
add    $0x50,%rcx
cmp    $0x630,%rcx
jne    1280 <main+0x170>
mov    $0x12c,%ecx
nopl   0x0(%rax)
movdqu -0xd8(%rcx,%r8,1),%xmm3
ff ff ff
movdqa -0x12c(%rcx,%r8,1),%xmm5
fe ff ff
movd   %esi,%xmm2
movdqa -0x11c(%rcx,%r8,1),%xmm4
fe ff ff
movdqa -0x10c(%rcx,%r8,1),%xmm9
fe ff ff
movdqa -0xfc(%rcx,%r8,1),%xmm8
ff ff ff
pshufd $0x0,%xmm2,%xmm2
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm5,%xmm3
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
movdqu -0x84(%rcx,%r8,1),%xmm6
ff ff ff
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm6,%xmm3
pmuludq %xmm5,%xmm7
movdqu -0x30(%rcx,%r8,1),%xmm5
pmuludq %xmm5,%xmm3
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm7,%xmm5
movdqu -0xc8(%rcx,%r8,1),%xmm6
ff ff ff
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm4,%xmm6
pshufd $0xe8,%xmm3,%xmm0
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm3,%xmm7
movdqu -0x74(%rcx,%r8,1),%xmm3
pshufd $0xe8,%xmm5,%xmm4
pshufd $0xf5,%xmm3,%xmm1
pmuludq %xmm7,%xmm1
pmuludq %xmm3,%xmm6
punpckldq %xmm4,%xmm0
movdqa %xmm0,%xmm5
movdqu -0x20(%rcx,%r8,1),%xmm3
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm4
pcmpgtd %xmm2,%xmm5
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm1
pand   %xmm5,%xmm0
punpckldq %xmm1,%xmm4
movdqa %xmm4,%xmm3
movdqu -0xb8(%rcx,%r8,1),%xmm1
ff ff ff
pshufd $0xf5,%xmm1,%xmm6
pandn  %xmm2,%xmm5
pmuludq %xmm9,%xmm1
pshufd $0xf5,%xmm9,%xmm2
pmuludq %xmm2,%xmm6
por    %xmm0,%xmm5
movdqu -0x64(%rcx,%r8,1),%xmm0
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm6,%xmm2
pcmpgtd %xmm5,%xmm3
pmuludq %xmm0,%xmm1
movdqu -0x10(%rcx,%r8,1),%xmm0
pmuludq %xmm0,%xmm1
pand   %xmm3,%xmm4
pshufd $0xe8,%xmm1,%xmm6
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm2,%xmm0
pandn  %xmm5,%xmm3
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm6
movdqa %xmm6,%xmm1
movdqu -0xa8(%rcx,%r8,1),%xmm0
ff ff ff
por    %xmm4,%xmm3
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm8,%xmm0
pshufd $0xf5,%xmm8,%xmm4
pcmpgtd %xmm3,%xmm1
pmuludq %xmm4,%xmm2
movdqu -0x54(%rcx,%r8,1),%xmm4
pshufd $0xf5,%xmm4,%xmm5
pand   %xmm1,%xmm6
pmuludq %xmm2,%xmm5
pmuludq %xmm4,%xmm0
movdqu (%rcx,%r8,1),%xmm2
pandn  %xmm3,%xmm1
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm2
por    %xmm6,%xmm1
pmuludq %xmm5,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
movdqa %xmm0,%xmm2
pcmpgtd %xmm1,%xmm2
pand   %xmm2,%xmm0
pandn  %xmm1,%xmm2
por    %xmm0,%xmm2
pshufd $0xee,%xmm2,%xmm0
movdqa %xmm2,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
pshufd $0x55,%xmm1,%xmm0
movdqa %xmm1,%xmm2
pcmpgtd %xmm0,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
movd   %xmm2,%esi
add    $0x50,%rcx
cmp    $0x62c,%rcx
jne    1510 <main+0x400>
mov    $0x130,%ecx
nopl   0x0(%rax,%rax,1)
movd   %esi,%xmm0
pshufd $0x0,%xmm0,%xmm4
movdqu -0xd8(%rcx,%r8,1),%xmm3
ff ff ff
movdqu -0x124(%rcx,%r8,1),%xmm5
fe ff ff
movdqu -0x114(%rcx,%r8,1),%xmm2
fe ff ff
movdqu -0x104(%rcx,%r8,1),%xmm1
fe ff ff
movdqu -0xf4(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm5,%xmm3
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
movdqu -0x8c(%rcx,%r8,1),%xmm6
ff ff ff
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm5,%xmm7
pmuludq %xmm6,%xmm3
movdqa -0x40(%rcx,%r8,1),%xmm5
pmuludq %xmm5,%xmm3
pshufd $0xe8,%xmm3,%xmm6
pshufd $0xf5,%xmm5,%xmm3
pmuludq %xmm7,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm6
movdqa %xmm6,%xmm3
pcmpgtd %xmm4,%xmm3
pand   %xmm3,%xmm6
pandn  %xmm4,%xmm3
por    %xmm6,%xmm3
movdqu -0xc8(%rcx,%r8,1),%xmm4
ff ff ff
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm2,%xmm4
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm2,%xmm5
movdqu -0x7c(%rcx,%r8,1),%xmm2
pshufd $0xf5,%xmm2,%xmm6
pmuludq %xmm5,%xmm6
pmuludq %xmm2,%xmm4
movdqa -0x30(%rcx,%r8,1),%xmm2
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm4
movdqa %xmm4,%xmm2
pcmpgtd %xmm3,%xmm2
pand   %xmm2,%xmm4
pandn  %xmm3,%xmm2
por    %xmm4,%xmm2
movdqu -0xb8(%rcx,%r8,1),%xmm3
ff ff ff
pshufd $0xf5,%xmm3,%xmm4
pmuludq %xmm1,%xmm3
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm1,%xmm4
movdqu -0x6c(%rcx,%r8,1),%xmm1
pshufd $0xf5,%xmm1,%xmm5
pmuludq %xmm4,%xmm5
pmuludq %xmm1,%xmm3
movdqa -0x20(%rcx,%r8,1),%xmm1
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm5,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm3
movdqa %xmm3,%xmm1
pcmpgtd %xmm2,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm2,%xmm1
por    %xmm3,%xmm1
movdqu -0xa8(%rcx,%r8,1),%xmm2
ff ff ff
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm0,%xmm2
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm0,%xmm3
movdqu -0x5c(%rcx,%r8,1),%xmm0
pshufd $0xf5,%xmm0,%xmm4
pmuludq %xmm3,%xmm4
pmuludq %xmm0,%xmm2
movdqa -0x10(%rcx,%r8,1),%xmm0
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm4,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm2
movdqa %xmm2,%xmm0
pcmpgtd %xmm1,%xmm0
pand   %xmm0,%xmm2
pandn  %xmm1,%xmm0
por    %xmm2,%xmm0
pshufd $0xee,%xmm0,%xmm1
movdqa %xmm0,%xmm2
pcmpgtd %xmm1,%xmm2
pand   %xmm2,%xmm0
pandn  %xmm1,%xmm2
por    %xmm0,%xmm2
pshufd $0x55,%xmm2,%xmm0
movdqa %xmm2,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
mov    -0x98(%rcx,%r8,1),%esi
ff
imul   -0xe4(%rcx,%r8,1),%esi
ff ff
imul   -0x4c(%rcx,%r8,1),%esi
movd   %xmm1,%eax
imul   (%rcx,%r8,1),%esi
cmp    %eax,%esi
cmovle %eax,%esi
add    $0x50,%rcx
cmp    $0x630,%rcx
jne    1730 <main+0x620>
lea    0xcd5(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@__const.main.grid = [20 x [20 x i32]] [[20 x i32] [i32 8, i32 2, i32 22, i32 97, i32 38, i32 15, i32 0, i32 40, i32 0, i32 75, i32 4, i32 5, i32 7, i32 78, i32 52, i32 12, i32 50, i32 77, i32 91, i32 8], [20 x i32] [i32 49, i32 49, i32 99, i32 40, i32 17, i32 81, i32 18, i32 57, i32 60, i32 87, i32 17, i32 40, i32 98, i32 43, i32 69, i32 48, i32 4, i32 56, i32 62, i32 0], [20 x i32] [i32 81, i32 49, i32 31, i32 73, i32 55, i32 79, i32 14, i32 29, i32 93, i32 71, i32 40, i32 67, i32 53, i32 88, i32 30, i32 3, i32 49, i32 13, i32 36, i32 65], [20 x i32] [i32 52, i32 70, i32 95, i32 23, i32 4, i32 60, i32 11, i32 42, i32 69, i32 24, i32 68, i32 56, i32 1, i32 32, i32 56, i32 71, i32 37, i32 2, i32 36, i32 91], [20 x i32] [i32 22, i32 31, i32 16, i32 71, i32 51, i32 67, i32 63, i32 89, i32 41, i32 92, i32 36, i32 54, i32 22, i32 40, i32 40, i32 28, i32 66, i32 33, i32 13, i32 80], [20 x i32] [i32 24, i32 47, i32 32, i32 60, i32 99, i32 3, i32 45, i32 2, i32 44, i32 75, i32 33, i32 53, i32 78, i32 36, i32 84, i32 20, i32 35, i32 17, i32 12, i32 50], [20 x i32] [i32 32, i32 98, i32 81, i32 28, i32 64, i32 23, i32 67, i32 10, i32 26, i32 38, i32 40, i32 67, i32 59, i32 54, i32 70, i32 66, i32 18, i32 38, i32 64, i32 70], [20 x i32] [i32 67, i32 26, i32 20, i32 68, i32 2, i32 62, i32 12, i32 20, i32 95, i32 63, i32 94, i32 39, i32 63, i32 8, i32 40, i32 91, i32 66, i32 49, i32 94, i32 21], [20 x i32] [i32 24, i32 55, i32 58, i32 5, i32 66, i32 73, i32 99, i32 26, i32 97, i32 17, i32 78, i32 78, i32 96, i32 83, i32 14, i32 88, i32 34, i32 89, i32 63, i32 72], [20 x i32] [i32 21, i32 36, i32 23, i32 9, i32 75, i32 0, i32 76, i32 44, i32 20, i32 45, i32 35, i32 14, i32 0, i32 61, i32 33, i32 97, i32 34, i32 31, i32 33, i32 95], [20 x i32] [i32 78, i32 17, i32 53, i32 28, i32 22, i32 75, i32 31, i32 67, i32 15, i32 94, i32 3, i32 80, i32 4, i32 62, i32 16, i32 14, i32 9, i32 53, i32 56, i32 92], [20 x i32] [i32 16, i32 39, i32 5, i32 42, i32 96, i32 35, i32 31, i32 47, i32 55, i32 58, i32 88, i32 24, i32 0, i32 17, i32 54, i32 24, i32 36, i32 29, i32 85, i32 57], [20 x i32] [i32 86, i32 56, i32 0, i32 48, i32 35, i32 71, i32 89, i32 7, i32 5, i32 44, i32 44, i32 37, i32 44, i32 60, i32 21, i32 58, i32 51, i32 54, i32 17, i32 58], [20 x i32] [i32 19, i32 80, i32 81, i32 68, i32 5, i32 94, i32 47, i32 69, i32 28, i32 73, i32 92, i32 13, i32 86, i32 52, i32 17, i32 77, i32 4, i32 89, i32 55, i32 40], [20 x i32] [i32 4, i32 52, i32 8, i32 83, i32 97, i32 35, i32 99, i32 16, i32 7, i32 97, i32 57, i32 32, i32 16, i32 26, i32 26, i32 79, i32 33, i32 27, i32 98, i32 66], [20 x i32] [i32 88, i32 36, i32 68, i32 87, i32 57, i32 62, i32 20, i32 72, i32 3, i32 46, i32 33, i32 67, i32 46, i32 55, i32 12, i32 32, i32 63, i32 93, i32 53, i32 69], [20 x i32] [i32 4, i32 42, i32 16, i32 73, i32 38, i32 25, i32 39, i32 11, i32 24, i32 94, i32 72, i32 18, i32 8, i32 46, i32 29, i32 32, i32 40, i32 62, i32 76, i32 36], [20 x i32] [i32 20, i32 69, i32 36, i32 41, i32 72, i32 30, i32 23, i32 88, i32 34, i32 62, i32 99, i32 69, i32 82, i32 67, i32 59, i32 85, i32 74, i32 4, i32 36, i32 16], [20 x i32] [i32 20, i32 73, i32 35, i32 29, i32 78, i32 31, i32 90, i32 1, i32 74, i32 31, i32 49, i32 71, i32 48, i32 86, i32 81, i32 16, i32 23, i32 57, i32 5, i32 54], [20 x i32] [i32 1, i32 70, i32 54, i32 71, i32 83, i32 51, i32 54, i32 69, i32 16, i32 92, i32 33, i32 48, i32 61, i32 43, i32 52, i32 1, i32 89, i32 19, i32 67, i32 48]]
@.str = [4 x i8] c"%d\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca [20 x [20 x i32]]
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%11 = bitcast [20 x [20 x i32]]* %6 to i8*
store i32 0, i32* %9
store i32 0, i32* %7
br label %12
12: ; preds = %64, %2
%13 = load i32, i32* %7
%14 = icmp slt i32 %13, 20
br i1 %14, label %15, label %67
15: ; preds = %12
store i32 0, i32* %8
br label %16
16: ; preds = %60, %15
%17 = load i32, i32* %8
%18 = icmp slt i32 %17, 16
br i1 %18, label %19, label %63
19: ; preds = %16
%20 = load i32, i32* %7
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %21
%23 = load i32, i32* %8
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds [20 x i32], [20 x i32]* %22, i64 0, i64 %24
%26 = load i32, i32* %25
%27 = load i32, i32* %7
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %28
%30 = load i32, i32* %8
%31 = add nsw i32 %30, 1
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [20 x i32], [20 x i32]* %29, i64 0, i64 %32
%34 = load i32, i32* %33
%35 = mul nsw i32 %26, %34
%36 = load i32, i32* %7
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %37
%39 = load i32, i32* %8
%40 = add nsw i32 %39, 2
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [20 x i32], [20 x i32]* %38, i64 0, i64 %41
%43 = load i32, i32* %42
%44 = mul nsw i32 %35, %43
%45 = load i32, i32* %7
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %46
%48 = load i32, i32* %8
%49 = add nsw i32 %48, 3
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds [20 x i32], [20 x i32]* %47, i64 0, i64 %50
%52 = load i32, i32* %51
%53 = mul nsw i32 %44, %52
store i32 %53, i32* %10
%54 = load i32, i32* %10
%55 = load i32, i32* %9
%56 = icmp sgt i32 %54, %55
br i1 %56, label %57, label %59
57: ; preds = %19
%58 = load i32, i32* %10
store i32 %58, i32* %9
br label %59
59: ; preds = %57, %19
br label %60
60: ; preds = %59
%61 = load i32, i32* %8
%62 = add nsw i32 %61, 1
store i32 %62, i32* %8
br label %16
63: ; preds = %16
br label %64
64: ; preds = %63
%65 = load i32, i32* %7
%66 = add nsw i32 %65, 1
store i32 %66, i32* %7
br label %12
67: ; preds = %12
store i32 0, i32* %7
br label %68
68: ; preds = %120, %67
%69 = load i32, i32* %7
%70 = icmp slt i32 %69, 16
br i1 %70, label %71, label %123
71: ; preds = %68
store i32 0, i32* %8
br label %72
72: ; preds = %116, %71
%73 = load i32, i32* %8
%74 = icmp slt i32 %73, 20
br i1 %74, label %75, label %119
75: ; preds = %72
%76 = load i32, i32* %7
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %77
%79 = load i32, i32* %8
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [20 x i32], [20 x i32]* %78, i64 0, i64 %80
%82 = load i32, i32* %81
%83 = load i32, i32* %7
%84 = add nsw i32 %83, 1
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %85
%87 = load i32, i32* %8
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds [20 x i32], [20 x i32]* %86, i64 0, i64 %88
%90 = load i32, i32* %89
%91 = mul nsw i32 %82, %90
%92 = load i32, i32* %7
%93 = add nsw i32 %92, 2
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %94
%96 = load i32, i32* %8
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [20 x i32], [20 x i32]* %95, i64 0, i64 %97
%99 = load i32, i32* %98
%100 = mul nsw i32 %91, %99
%101 = load i32, i32* %7
%102 = add nsw i32 %101, 3
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %103
%105 = load i32, i32* %8
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds [20 x i32], [20 x i32]* %104, i64 0, i64 %106
%108 = load i32, i32* %107
%109 = mul nsw i32 %100, %108
store i32 %109, i32* %10
%110 = load i32, i32* %10
%111 = load i32, i32* %9
%112 = icmp sgt i32 %110, %111
br i1 %112, label %113, label %115
113: ; preds = %75
%114 = load i32, i32* %10
store i32 %114, i32* %9
br label %115
115: ; preds = %113, %75
br label %116
116: ; preds = %115
%117 = load i32, i32* %8
%118 = add nsw i32 %117, 1
store i32 %118, i32* %8
br label %72
119: ; preds = %72
br label %120
120: ; preds = %119
%121 = load i32, i32* %7
%122 = add nsw i32 %121, 1
store i32 %122, i32* %7
br label %68
123: ; preds = %68
store i32 0, i32* %7
br label %124
124: ; preds = %179, %123
%125 = load i32, i32* %7
%126 = icmp slt i32 %125, 16
br i1 %126, label %127, label %182
127: ; preds = %124
store i32 0, i32* %8
br label %128
128: ; preds = %175, %127
%129 = load i32, i32* %8
%130 = icmp slt i32 %129, 16
br i1 %130, label %131, label %178
131: ; preds = %128
%132 = load i32, i32* %7
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %133
%135 = load i32, i32* %8
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds [20 x i32], [20 x i32]* %134, i64 0, i64 %136
%138 = load i32, i32* %137
%139 = load i32, i32* %7
%140 = add nsw i32 %139, 1
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %141
%143 = load i32, i32* %8
%144 = add nsw i32 %143, 1
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds [20 x i32], [20 x i32]* %142, i64 0, i64 %145
%147 = load i32, i32* %146
%148 = mul nsw i32 %138, %147
%149 = load i32, i32* %7
%150 = add nsw i32 %149, 2
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %151
%153 = load i32, i32* %8
%154 = add nsw i32 %153, 2
%155 = sext i32 %154 to i64
%156 = getelementptr inbounds [20 x i32], [20 x i32]* %152, i64 0, i64 %155
%157 = load i32, i32* %156
%158 = mul nsw i32 %148, %157
%159 = load i32, i32* %7
%160 = add nsw i32 %159, 3
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %161
%163 = load i32, i32* %8
%164 = add nsw i32 %163, 3
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds [20 x i32], [20 x i32]* %162, i64 0, i64 %165
%167 = load i32, i32* %166
%168 = mul nsw i32 %158, %167
store i32 %168, i32* %10
%169 = load i32, i32* %10
%170 = load i32, i32* %9
%171 = icmp sgt i32 %169, %170
br i1 %171, label %172, label %174
172: ; preds = %131
%173 = load i32, i32* %10
store i32 %173, i32* %9
br label %174
174: ; preds = %172, %131
br label %175
175: ; preds = %174
%176 = load i32, i32* %8
%177 = add nsw i32 %176, 1
store i32 %177, i32* %8
br label %128
178: ; preds = %128
br label %179
179: ; preds = %178
%180 = load i32, i32* %7
%181 = add nsw i32 %180, 1
store i32 %181, i32* %7
br label %124
182: ; preds = %124
store i32 0, i32* %7
br label %183
183: ; preds = %238, %182
%184 = load i32, i32* %7
%185 = icmp slt i32 %184, 16
br i1 %185, label %186, label %241
186: ; preds = %183
store i32 3, i32* %8
br label %187
187: ; preds = %234, %186
%188 = load i32, i32* %8
%189 = icmp slt i32 %188, 20
br i1 %189, label %190, label %237
190: ; preds = %187
%191 = load i32, i32* %7
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %192
%194 = load i32, i32* %8
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds [20 x i32], [20 x i32]* %193, i64 0, i64 %195
%197 = load i32, i32* %196
%198 = load i32, i32* %7
%199 = add nsw i32 %198, 1
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %200
%202 = load i32, i32* %8
%203 = sub nsw i32 %202, 1
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds [20 x i32], [20 x i32]* %201, i64 0, i64 %204
%206 = load i32, i32* %205
%207 = mul nsw i32 %197, %206
%208 = load i32, i32* %7
%209 = add nsw i32 %208, 2
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %210
%212 = load i32, i32* %8
%213 = sub nsw i32 %212, 2
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds [20 x i32], [20 x i32]* %211, i64 0, i64 %214
%216 = load i32, i32* %215
%217 = mul nsw i32 %207, %216
%218 = load i32, i32* %7
%219 = add nsw i32 %218, 3
%220 = sext i32 %219 to i64
%221 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %6, i64 0, i64 %220
%222 = load i32, i32* %8
%223 = sub nsw i32 %222, 3
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds [20 x i32], [20 x i32]* %221, i64 0, i64 %224
%226 = load i32, i32* %225
%227 = mul nsw i32 %217, %226
store i32 %227, i32* %10
%228 = load i32, i32* %10
%229 = load i32, i32* %9
%230 = icmp sgt i32 %228, %229
br i1 %230, label %231, label %233
231: ; preds = %190
%232 = load i32, i32* %10
store i32 %232, i32* %9
br label %233
233: ; preds = %231, %190
br label %234
234: ; preds = %233
%235 = load i32, i32* %8
%236 = add nsw i32 %235, 1
store i32 %236, i32* %8
br label %187
237: ; preds = %187
br label %238
238: ; preds = %237
%239 = load i32, i32* %7
%240 = add nsw i32 %239, 1
store i32 %240, i32* %7
br label %183
241: ; preds = %183
%242 = load i32, i32* %9
%243 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %242)
ret i32 0
}

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