int main(int argc, char *argv[]) {
  unsigned max_prod = 0;
  unsigned l_prod = 0;
  unsigned arr[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}};
  for (unsigned i = 0; i < 20; i++) {
    for (unsigned j = 0; j < (20 - 3); j++) {
      l_prod = arr[i][j] * arr[i][j + 1] * arr[i][j + 2] * arr[i][j + 3];
      if (l_prod > max_prod)
        max_prod = l_prod;
    }
  }
  for (unsigned i = 0; i < (20 - 3); i++) {
    for (unsigned j = 0; j < 20; j++) {
      l_prod = arr[i][j] * arr[i + 1][j] * arr[i + 2][j] * arr[i + 3][j];
      if (l_prod > max_prod)
        max_prod = l_prod;
    }
  }
  for (unsigned i = 0; i < (20 - 3); i++) {
    for (unsigned j = 0; j < (20 - 3); j++) {
      l_prod =
          arr[i][j] * arr[i + 1][j + 1] * arr[i + 2][j + 2] * arr[i + 3][j + 3];
      if (l_prod > max_prod)
        max_prod = l_prod;
    }
  }
  for (unsigned i = 0; i < (20 - 3); i++) {
    for (unsigned j = 3; j < 20; j++) {
      l_prod =
          arr[i][j] * arr[i + 1][j - 1] * arr[i + 2][j - 2] * arr[i + 3][j - 3];
      if (l_prod > max_prod)
        max_prod = l_prod;
    }
  }
  printf("Max product: %d\n", max_prod);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x680,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
lea    -0x660(%rbp),%rdi
lea    0xeab(%rip),%rsi
mov    $0x640,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x664(%rbp)
cmpl   $0x14,-0x664(%rbp)
jae    1262 <main+0x142>
movl   $0x0,-0x668(%rbp)
cmpl   $0x11,-0x668(%rbp)
jae    1249 <main+0x129>
mov    -0x664(%rbp),%eax
mov    %eax,%ecx
lea    -0x660(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mov    -0x668(%rbp),%ecx
mov    (%rax,%rcx,4),%eax
mov    -0x664(%rbp),%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x668(%rbp),%edx
add    $0x1,%edx
mov    %edx,%edx
imul   (%rcx,%rdx,4),%eax
mov    -0x664(%rbp),%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x668(%rbp),%edx
add    $0x2,%edx
mov    %edx,%edx
imul   (%rcx,%rdx,4),%eax
mov    -0x664(%rbp),%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x668(%rbp),%edx
add    $0x3,%edx
mov    %edx,%edx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jbe    1230 <main+0x110>
mov    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1235 <main+0x115>
mov    -0x668(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x668(%rbp)
jmp    1180 <main+0x60>
jmp    124e <main+0x12e>
mov    -0x664(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x664(%rbp)
jmp    1169 <main+0x49>
movl   $0x0,-0x66c(%rbp)
cmpl   $0x11,-0x66c(%rbp)
jae    1365 <main+0x245>
movl   $0x0,-0x670(%rbp)
cmpl   $0x14,-0x670(%rbp)
jae    134c <main+0x22c>
mov    -0x66c(%rbp),%eax
mov    %eax,%ecx
lea    -0x660(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mov    -0x670(%rbp),%ecx
mov    (%rax,%rcx,4),%eax
mov    -0x66c(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x670(%rbp),%edx
imul   (%rcx,%rdx,4),%eax
mov    -0x66c(%rbp),%ecx
add    $0x2,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x670(%rbp),%edx
imul   (%rcx,%rdx,4),%eax
mov    -0x66c(%rbp),%ecx
add    $0x3,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x670(%rbp),%edx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jbe    1333 <main+0x213>
mov    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1338 <main+0x218>
mov    -0x670(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x670(%rbp)
jmp    1283 <main+0x163>
jmp    1351 <main+0x231>
mov    -0x66c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x66c(%rbp)
jmp    126c <main+0x14c>
movl   $0x0,-0x674(%rbp)
cmpl   $0x11,-0x674(%rbp)
jae    1477 <main+0x357>
movl   $0x0,-0x678(%rbp)
cmpl   $0x11,-0x678(%rbp)
jae    145e <main+0x33e>
mov    -0x674(%rbp),%eax
mov    %eax,%ecx
lea    -0x660(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mov    -0x678(%rbp),%ecx
mov    (%rax,%rcx,4),%eax
mov    -0x674(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x678(%rbp),%edx
add    $0x1,%edx
mov    %edx,%edx
imul   (%rcx,%rdx,4),%eax
mov    -0x674(%rbp),%ecx
add    $0x2,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x678(%rbp),%edx
add    $0x2,%edx
mov    %edx,%edx
imul   (%rcx,%rdx,4),%eax
mov    -0x674(%rbp),%ecx
add    $0x3,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x678(%rbp),%edx
add    $0x3,%edx
mov    %edx,%edx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jbe    1445 <main+0x325>
mov    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    144a <main+0x32a>
mov    -0x678(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x678(%rbp)
jmp    1386 <main+0x266>
jmp    1463 <main+0x343>
mov    -0x674(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x674(%rbp)
jmp    136f <main+0x24f>
movl   $0x0,-0x67c(%rbp)
cmpl   $0x11,-0x67c(%rbp)
jae    1589 <main+0x469>
movl   $0x3,-0x680(%rbp)
cmpl   $0x14,-0x680(%rbp)
jae    1570 <main+0x450>
mov    -0x67c(%rbp),%eax
mov    %eax,%ecx
lea    -0x660(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mov    -0x680(%rbp),%ecx
mov    (%rax,%rcx,4),%eax
mov    -0x67c(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x680(%rbp),%edx
sub    $0x1,%edx
mov    %edx,%edx
imul   (%rcx,%rdx,4),%eax
mov    -0x67c(%rbp),%ecx
add    $0x2,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x680(%rbp),%edx
sub    $0x2,%edx
mov    %edx,%edx
imul   (%rcx,%rdx,4),%eax
mov    -0x67c(%rbp),%ecx
add    $0x3,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    -0x660(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x680(%rbp),%edx
sub    $0x3,%edx
mov    %edx,%edx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jbe    1557 <main+0x437>
mov    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    155c <main+0x43c>
mov    -0x680(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x680(%rbp)
jmp    1498 <main+0x378>
jmp    1575 <main+0x455>
mov    -0x67c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x67c(%rbp)
jmp    1481 <main+0x361>
mov    -0x14(%rbp),%esi
lea    0x10ad(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x680,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
xor    %r9d,%r9d
lea    0xf05(%rip),%r10
lea    0xeee(%rip),%r8
xor    %esi,%esi
jmp    113e <main+0x2e>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r9
add    $0x50,%r10
cmp    $0x14,%r9
je     119d <main+0x8d>
lea    (%r9,%r9,4),%rcx
shl    $0x4,%rcx
mov    (%rcx,%r8,1),%edi
mov    0x4(%rcx,%r8,1),%eax
mov    0x8(%rcx,%r8,1),%r11d
xor    %ecx,%ecx
mov    %esi,%edx
nopl   0x0(%rax,%rax,1)
mov    %edi,%esi
imul   %eax,%esi
imul   %r11d,%esi
mov    -0x4(%r10,%rcx,4),%ebx
imul   %ebx,%esi
cmp    %edx,%esi
cmovbe %edx,%esi
cmp    $0x10,%rcx
je     1130 <main+0x20>
mov    %r11d,%edi
imul   %r11d,%eax
imul   %ebx,%eax
mov    (%r10,%rcx,4),%r11d
add    $0x2,%rcx
imul   %r11d,%eax
cmp    %esi,%eax
mov    %eax,%edx
cmovbe %esi,%edx
mov    %ebx,%eax
jmp    1160 <main+0x50>
mov    $0x130,%ecx
movdqa 0xe55(%rip),%xmm10
nopl   0x0(%rax,%rax,1)
movd   %esi,%xmm1
movdqa -0xe0(%rcx,%r8,1),%xmm4
ff ff ff
movdqa -0x130(%rcx,%r8,1),%xmm6
fe ff ff
movdqa -0x120(%rcx,%r8,1),%xmm5
fe ff ff
movdqa -0x110(%rcx,%r8,1),%xmm9
fe ff ff
pshufd $0x0,%xmm1,%xmm3
movdqa -0x100(%rcx,%r8,1),%xmm8
ff ff ff
pshufd $0xf5,%xmm4,%xmm7
pmuludq %xmm6,%xmm4
pshufd $0xf5,%xmm6,%xmm6
pmuludq %xmm7,%xmm6
movdqa -0x90(%rcx,%r8,1),%xmm7
ff ff ff
pshufd $0xf5,%xmm7,%xmm1
pmuludq %xmm6,%xmm1
pmuludq %xmm7,%xmm4
movdqa -0x40(%rcx,%r8,1),%xmm6
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm6,%xmm4
pmuludq %xmm1,%xmm7
movdqa -0xd0(%rcx,%r8,1),%xmm1
ff ff ff
pshufd $0xf5,%xmm1,%xmm2
pshufd $0xe8,%xmm4,%xmm6
pmuludq %xmm5,%xmm1
pshufd $0xf5,%xmm5,%xmm4
pmuludq %xmm4,%xmm2
pshufd $0xe8,%xmm7,%xmm4
movdqa -0x80(%rcx,%r8,1),%xmm7
pshufd $0xf5,%xmm7,%xmm0
pmuludq %xmm2,%xmm0
movdqa %xmm3,%xmm2
punpckldq %xmm4,%xmm6
movdqa %xmm6,%xmm5
pxor   %xmm10,%xmm2
pmuludq %xmm7,%xmm1
movdqa -0x30(%rcx,%r8,1),%xmm7
pxor   %xmm10,%xmm5
pmuludq %xmm7,%xmm1
pshufd $0xe8,%xmm1,%xmm4
pshufd $0xf5,%xmm7,%xmm1
pcmpgtd %xmm2,%xmm5
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm0
punpckldq %xmm0,%xmm4
pand   %xmm5,%xmm6
movdqa -0xc0(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm1
pmuludq %xmm9,%xmm0
pandn  %xmm3,%xmm5
pshufd $0xf5,%xmm9,%xmm2
pmuludq %xmm2,%xmm1
movdqa -0x70(%rcx,%r8,1),%xmm2
por    %xmm6,%xmm5
movdqa %xmm5,%xmm3
pshufd $0xf5,%xmm2,%xmm7
pmuludq %xmm1,%xmm7
movdqa %xmm4,%xmm6
pxor   %xmm10,%xmm6
pxor   %xmm10,%xmm3
pmuludq %xmm2,%xmm0
movdqa -0x20(%rcx,%r8,1),%xmm1
pmuludq %xmm1,%xmm0
pcmpgtd %xmm3,%xmm6
pshufd $0xe8,%xmm0,%xmm3
pshufd $0xf5,%xmm1,%xmm0
pmuludq %xmm7,%xmm0
pand   %xmm6,%xmm4
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm3
movdqa %xmm3,%xmm2
pxor   %xmm10,%xmm2
pandn  %xmm5,%xmm6
movdqa -0xb0(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm1
pmuludq %xmm8,%xmm0
por    %xmm4,%xmm6
movdqa %xmm6,%xmm4
pshufd $0xf5,%xmm8,%xmm5
pmuludq %xmm5,%xmm1
movdqa -0x60(%rcx,%r8,1),%xmm5
pxor   %xmm10,%xmm4
pshufd $0xf5,%xmm5,%xmm7
pmuludq %xmm1,%xmm7
pmuludq %xmm5,%xmm0
pcmpgtd %xmm4,%xmm2
movdqa -0x10(%rcx,%r8,1),%xmm1
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm0,%xmm4
pand   %xmm2,%xmm3
pshufd $0xf5,%xmm1,%xmm0
pmuludq %xmm7,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pandn  %xmm6,%xmm2
punpckldq %xmm0,%xmm4
movdqa %xmm4,%xmm1
pxor   %xmm10,%xmm1
movdqa -0xf0(%rcx,%r8,1),%xmm0
ff ff ff
por    %xmm3,%xmm2
movdqa %xmm2,%xmm3
movdqa -0xa0(%rcx,%r8,1),%xmm5
ff ff ff
pshufd $0xf5,%xmm5,%xmm6
pmuludq %xmm0,%xmm5
pxor   %xmm10,%xmm3
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm0,%xmm6
movdqa -0x50(%rcx,%r8,1),%xmm0
pcmpgtd %xmm3,%xmm1
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm6,%xmm3
pmuludq %xmm0,%xmm5
pand   %xmm1,%xmm4
movdqa (%rcx,%r8,1),%xmm0
pmuludq %xmm0,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pandn  %xmm2,%xmm1
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm0
por    %xmm4,%xmm1
punpckldq %xmm0,%xmm5
movdqa %xmm1,%xmm0
pxor   %xmm10,%xmm0
movdqa %xmm5,%xmm2
pxor   %xmm10,%xmm2
pcmpgtd %xmm0,%xmm2
pand   %xmm2,%xmm5
pandn  %xmm1,%xmm2
por    %xmm5,%xmm2
pshufd $0xee,%xmm2,%xmm0
movdqa %xmm2,%xmm1
pxor   %xmm10,%xmm1
movdqa %xmm0,%xmm3
pxor   %xmm10,%xmm3
pcmpgtd %xmm3,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
pshufd $0x55,%xmm1,%xmm0
movdqa %xmm1,%xmm2
pxor   %xmm10,%xmm2
movdqa %xmm0,%xmm3
pxor   %xmm10,%xmm3
pcmpgtd %xmm3,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
movd   %xmm2,%esi
add    $0x50,%rcx
cmp    $0x680,%rcx
jne    11b0 <main+0xa0>
mov    $0x13c,%ecx
nopl   (%rax)
movd   %esi,%xmm0
pshufd $0x0,%xmm0,%xmm5
movdqu -0xe8(%rcx,%r8,1),%xmm0
ff ff ff
movdqa -0x13c(%rcx,%r8,1),%xmm3
fe ff ff
movdqa -0x12c(%rcx,%r8,1),%xmm4
fe ff ff
movdqa -0x11c(%rcx,%r8,1),%xmm2
fe ff ff
movdqa -0x10c(%rcx,%r8,1),%xmm1
fe ff ff
pshufd $0xf5,%xmm0,%xmm6
pmuludq %xmm3,%xmm0
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm6,%xmm3
movdqu -0x94(%rcx,%r8,1),%xmm6
ff ff ff
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm3,%xmm7
pmuludq %xmm6,%xmm0
movdqu -0x40(%rcx,%r8,1),%xmm3
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm7,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm0
movdqa %xmm0,%xmm3
pxor   %xmm10,%xmm3
movdqa %xmm5,%xmm6
pxor   %xmm10,%xmm6
pcmpgtd %xmm6,%xmm3
pand   %xmm3,%xmm0
pandn  %xmm5,%xmm3
por    %xmm0,%xmm3
movdqu -0xd8(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm4,%xmm0
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm4,%xmm5
movdqu -0x84(%rcx,%r8,1),%xmm4
ff ff ff
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm5,%xmm6
pmuludq %xmm4,%xmm0
movdqu -0x30(%rcx,%r8,1),%xmm4
pmuludq %xmm4,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm0
movdqa %xmm3,%xmm5
pxor   %xmm10,%xmm5
movdqa %xmm0,%xmm4
pxor   %xmm10,%xmm4
pcmpgtd %xmm5,%xmm4
pand   %xmm4,%xmm0
pandn  %xmm3,%xmm4
por    %xmm0,%xmm4
movdqu -0xc8(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm2,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm2,%xmm3
movdqu -0x74(%rcx,%r8,1),%xmm2
pshufd $0xf5,%xmm2,%xmm5
pmuludq %xmm3,%xmm5
pmuludq %xmm2,%xmm0
movdqu -0x20(%rcx,%r8,1),%xmm2
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
movdqa %xmm4,%xmm3
pxor   %xmm10,%xmm3
movdqa %xmm0,%xmm2
pxor   %xmm10,%xmm2
pcmpgtd %xmm3,%xmm2
pand   %xmm2,%xmm0
pandn  %xmm4,%xmm2
por    %xmm0,%xmm2
movdqu -0xb8(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm1,%xmm0
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm1,%xmm3
movdqu -0x64(%rcx,%r8,1),%xmm1
pshufd $0xf5,%xmm1,%xmm4
pmuludq %xmm3,%xmm4
pmuludq %xmm1,%xmm0
movdqu -0x10(%rcx,%r8,1),%xmm1
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm4,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
movdqa %xmm2,%xmm1
pxor   %xmm10,%xmm1
movdqa %xmm0,%xmm3
pxor   %xmm10,%xmm3
pcmpgtd %xmm1,%xmm3
pand   %xmm3,%xmm0
pandn  %xmm2,%xmm3
por    %xmm0,%xmm3
pshufd $0xee,%xmm3,%xmm0
movdqa %xmm3,%xmm1
pxor   %xmm10,%xmm1
movdqa %xmm0,%xmm2
pxor   %xmm10,%xmm2
pcmpgtd %xmm2,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm0,%xmm1
por    %xmm3,%xmm1
pshufd $0x55,%xmm1,%xmm0
movdqa %xmm1,%xmm2
pxor   %xmm10,%xmm2
movdqa %xmm0,%xmm3
pxor   %xmm10,%xmm3
pcmpgtd %xmm3,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
movd   %xmm2,%eax
mov    -0xa8(%rcx,%r8,1),%esi
imul   -0xfc(%rcx,%r8,1),%esi
ff ff
imul   -0x54(%rcx,%r8,1),%esi
imul   (%rcx,%r8,1),%esi
cmp    %eax,%esi
cmovbe %eax,%esi
add    $0x50,%rcx
cmp    $0x68c,%rcx
jne    14a0 <main+0x390>
mov    $0x130,%ecx
movd   %esi,%xmm0
pshufd $0x0,%xmm0,%xmm5
movdqu -0xd8(%rcx,%r8,1),%xmm0
ff ff ff
movdqu -0x124(%rcx,%r8,1),%xmm3
fe ff ff
movdqu -0x114(%rcx,%r8,1),%xmm4
fe ff ff
movdqu -0x104(%rcx,%r8,1),%xmm2
fe ff ff
movdqu -0xf4(%rcx,%r8,1),%xmm1
ff ff ff
pshufd $0xf5,%xmm0,%xmm6
pmuludq %xmm3,%xmm0
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm6,%xmm3
movdqu -0x8c(%rcx,%r8,1),%xmm6
ff ff ff
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm3,%xmm7
pmuludq %xmm6,%xmm0
movdqa -0x40(%rcx,%r8,1),%xmm3
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm7,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm0
movdqa %xmm0,%xmm3
pxor   %xmm10,%xmm3
movdqa %xmm5,%xmm6
pxor   %xmm10,%xmm6
pcmpgtd %xmm6,%xmm3
pand   %xmm3,%xmm0
pandn  %xmm5,%xmm3
por    %xmm0,%xmm3
movdqu -0xc8(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm4,%xmm0
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm4,%xmm5
movdqu -0x7c(%rcx,%r8,1),%xmm4
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm5,%xmm6
pmuludq %xmm4,%xmm0
movdqa -0x30(%rcx,%r8,1),%xmm4
pmuludq %xmm4,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm0
movdqa %xmm3,%xmm5
pxor   %xmm10,%xmm5
movdqa %xmm0,%xmm4
pxor   %xmm10,%xmm4
pcmpgtd %xmm5,%xmm4
pand   %xmm4,%xmm0
pandn  %xmm3,%xmm4
por    %xmm0,%xmm4
movdqu -0xb8(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm2,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm2,%xmm3
movdqu -0x6c(%rcx,%r8,1),%xmm2
pshufd $0xf5,%xmm2,%xmm5
pmuludq %xmm3,%xmm5
pmuludq %xmm2,%xmm0
movdqa -0x20(%rcx,%r8,1),%xmm2
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
movdqa %xmm4,%xmm3
pxor   %xmm10,%xmm3
movdqa %xmm0,%xmm2
pxor   %xmm10,%xmm2
pcmpgtd %xmm3,%xmm2
pand   %xmm2,%xmm0
pandn  %xmm4,%xmm2
por    %xmm0,%xmm2
movdqu -0xa8(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm1,%xmm0
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm1,%xmm3
movdqu -0x5c(%rcx,%r8,1),%xmm1
pshufd $0xf5,%xmm1,%xmm4
pmuludq %xmm3,%xmm4
pmuludq %xmm1,%xmm0
movdqa -0x10(%rcx,%r8,1),%xmm1
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm4,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
movdqa %xmm2,%xmm1
pxor   %xmm10,%xmm1
movdqa %xmm0,%xmm3
pxor   %xmm10,%xmm3
pcmpgtd %xmm1,%xmm3
pand   %xmm3,%xmm0
pandn  %xmm2,%xmm3
por    %xmm0,%xmm3
pshufd $0xee,%xmm3,%xmm0
movdqa %xmm3,%xmm1
pxor   %xmm10,%xmm1
movdqa %xmm0,%xmm2
pxor   %xmm10,%xmm2
pcmpgtd %xmm2,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm0,%xmm1
por    %xmm3,%xmm1
pshufd $0x55,%xmm1,%xmm0
movdqa %xmm1,%xmm2
pxor   %xmm10,%xmm2
movdqa %xmm0,%xmm3
pxor   %xmm10,%xmm3
pcmpgtd %xmm3,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
movd   %xmm2,%eax
mov    -0x98(%rcx,%r8,1),%esi
ff
imul   -0xe4(%rcx,%r8,1),%esi
ff ff
imul   -0x4c(%rcx,%r8,1),%esi
imul   (%rcx,%r8,1),%esi
cmp    %eax,%esi
cmovbe %eax,%esi
add    $0x50,%rcx
cmp    $0x680,%rcx
jne    1730 <main+0x620>
lea    0xc91(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
xor    %eax,%eax
pop    %rbx
ret

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

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