#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, int);
int main() {
  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, 03, 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, 03, 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, 03, 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, 03, 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 x, y;
  int product = 0, maxProduct = 0;
  for (x = 0; x <= 19 - 3; x++) {
    for (y = 0; y < 19; y++) {
      product = grid[x][y] * grid[x + 1][y] * grid[x + 2][y] * grid[x + 3][y];
      if (product > maxProduct) {
        maxProduct = product;
      }
    }
  }
  for (x = 0; x <= 19; x++) {
    for (y = 0; y < 19 - 3; y++) {
      product = grid[x][y] * grid[x][y + 1] * grid[x][y + 2] * grid[x][y + 3];
      if (product > maxProduct) {
        maxProduct = product;
      }
    }
  }
  for (x = 0; x <= 19 - 3; x++) {
    for (y = 0; y < 19 - 3; y++) {
      product = grid[x][y] * grid[x + 1][y + 1] * grid[x + 2][y + 2] *
                grid[x + 3][y + 3];
      if (product > maxProduct) {
        maxProduct = product;
      }
    }
  }
  for (x = 0 + 3; x <= 19; x++) {
    for (y = 0; y < 19 - 3; y++) {
      product = grid[x][y] * grid[x - 1][y + 1] * grid[x - 2][y + 2] *
                grid[x - 3][y + 3];
      if (product > maxProduct) {
        maxProduct = product;
      }
    }
  }
  printf("The max product is: %d\n", maxProduct);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x660,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x650(%rbp),%rdi
lea    0xec0(%rip),%rsi
mov    $0x640,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x65c(%rbp)
movl   $0x0,-0x660(%rbp)
movl   $0x0,-0x654(%rbp)
cmpl   $0x10,-0x654(%rbp)
jg     1270 <main+0x150>
movl   $0x0,-0x658(%rbp)
cmpl   $0x13,-0x658(%rbp)
jge    1257 <main+0x137>
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,-0x65c(%rbp)
mov    -0x65c(%rbp),%eax
cmp    -0x660(%rbp),%eax
jle    123e <main+0x11e>
mov    -0x65c(%rbp),%eax
mov    %eax,-0x660(%rbp)
jmp    1243 <main+0x123>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    117f <main+0x5f>
jmp    125c <main+0x13c>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    1168 <main+0x48>
movl   $0x0,-0x654(%rbp)
cmpl   $0x13,-0x654(%rbp)
jg     1382 <main+0x262>
movl   $0x0,-0x658(%rbp)
cmpl   $0x10,-0x658(%rbp)
jge    1369 <main+0x249>
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,-0x65c(%rbp)
mov    -0x65c(%rbp),%eax
cmp    -0x660(%rbp),%eax
jle    1350 <main+0x230>
mov    -0x65c(%rbp),%eax
mov    %eax,-0x660(%rbp)
jmp    1355 <main+0x235>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    1291 <main+0x171>
jmp    136e <main+0x24e>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    127a <main+0x15a>
movl   $0x0,-0x654(%rbp)
cmpl   $0x10,-0x654(%rbp)
jg     14a3 <main+0x383>
movl   $0x0,-0x658(%rbp)
cmpl   $0x10,-0x658(%rbp)
jge    148a <main+0x36a>
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,-0x65c(%rbp)
mov    -0x65c(%rbp),%eax
cmp    -0x660(%rbp),%eax
jle    1471 <main+0x351>
mov    -0x65c(%rbp),%eax
mov    %eax,-0x660(%rbp)
jmp    1476 <main+0x356>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    13a3 <main+0x283>
jmp    148f <main+0x36f>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    138c <main+0x26c>
movl   $0x3,-0x654(%rbp)
cmpl   $0x13,-0x654(%rbp)
jg     15c4 <main+0x4a4>
movl   $0x0,-0x658(%rbp)
cmpl   $0x10,-0x658(%rbp)
jge    15ab <main+0x48b>
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
sub    $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
sub    $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
sub    $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,-0x65c(%rbp)
mov    -0x65c(%rbp),%eax
cmp    -0x660(%rbp),%eax
jle    1592 <main+0x472>
mov    -0x65c(%rbp),%eax
mov    %eax,-0x660(%rbp)
jmp    1597 <main+0x477>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    14c4 <main+0x3a4>
jmp    15b0 <main+0x490>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    14ad <main+0x38d>
mov    -0x660(%rbp),%esi
lea    0x106f(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x660,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
xor    %esi,%esi
mov    $0x138,%ecx
lea    0xee1(%rip),%r8
nop
movd   %esi,%xmm0
pshufd $0x0,%xmm0,%xmm4
movdqa -0xe8(%rcx,%r8,1),%xmm3
ff ff ff
movdqa -0x138(%rcx,%r8,1),%xmm5
fe ff ff
movdqa -0x128(%rcx,%r8,1),%xmm2
fe ff ff
movdqa -0x118(%rcx,%r8,1),%xmm1
fe ff ff
movdqa -0x108(%rcx,%r8,1),%xmm0
fe ff ff
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm5,%xmm3
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
movdqa -0x98(%rcx,%r8,1),%xmm6
ff ff ff
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm5,%xmm7
pmuludq %xmm6,%xmm3
movdqa -0x48(%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
movdqa -0xd8(%rcx,%r8,1),%xmm4
ff ff ff
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm2,%xmm4
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm2,%xmm5
movdqa -0x88(%rcx,%r8,1),%xmm2
ff ff ff
pshufd $0xf5,%xmm2,%xmm6
pmuludq %xmm5,%xmm6
pmuludq %xmm2,%xmm4
movdqa -0x38(%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
movdqa -0xc8(%rcx,%r8,1),%xmm3
ff ff ff
pshufd $0xf5,%xmm3,%xmm4
pmuludq %xmm1,%xmm3
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm1,%xmm4
movdqa -0x78(%rcx,%r8,1),%xmm1
pshufd $0xf5,%xmm1,%xmm5
pmuludq %xmm4,%xmm5
pmuludq %xmm1,%xmm3
movdqa -0x28(%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
movdqa -0xb8(%rcx,%r8,1),%xmm2
ff ff ff
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm0,%xmm2
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm0,%xmm3
movdqa -0x68(%rcx,%r8,1),%xmm0
pshufd $0xf5,%xmm0,%xmm4
pmuludq %xmm3,%xmm4
pmuludq %xmm0,%xmm2
movdqa -0x18(%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    -0xa8(%rcx,%r8,1),%eax
ff
imul   -0xf8(%rcx,%r8,1),%eax
ff ff
imul   -0x58(%rcx,%r8,1),%eax
imul   -0x8(%rcx,%r8,1),%eax
movd   %xmm1,%edx
cmp    %edx,%eax
cmovle %edx,%eax
mov    -0xa4(%rcx,%r8,1),%edx
ff
imul   -0xf4(%rcx,%r8,1),%edx
ff ff
imul   -0x54(%rcx,%r8,1),%edx
imul   -0x4(%rcx,%r8,1),%edx
cmp    %eax,%edx
cmovle %eax,%edx
mov    -0xa0(%rcx,%r8,1),%esi
ff
imul   -0xf0(%rcx,%r8,1),%esi
ff ff
imul   -0x50(%rcx,%r8,1),%esi
imul   (%rcx,%r8,1),%esi
cmp    %edx,%esi
cmovle %edx,%esi
add    $0x50,%rcx
cmp    $0x688,%rcx
jne    1120 <main+0x10>
mov    $0x48,%r9d
jmp    13c1 <main+0x2b1>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x50,%r9
cmp    $0x688,%r9
je     14f8 <main+0x3e8>
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     13e7 <main+0x2d7>
mov    %esi,%edi
imul   %r10d,%eax
mov    -0x38(%r9,%r8,1),%esi
imul   %esi,%edx
imul   %edx,%eax
cmp    %edi,%eax
jg     13fc <main+0x2ec>
mov    %edi,%eax
mov    -0x34(%r9,%r8,1),%edi
imul   %edi,%esi
imul   %esi,%ecx
cmp    %eax,%ecx
jg     140d <main+0x2fd>
mov    %eax,%ecx
mov    -0x30(%r9,%r8,1),%eax
imul   %eax,%edi
imul   %edi,%edx
cmp    %ecx,%edx
jg     141e <main+0x30e>
mov    %ecx,%edx
mov    -0x2c(%r9,%r8,1),%ecx
imul   %ecx,%eax
imul   %eax,%esi
cmp    %edx,%esi
jg     142f <main+0x31f>
mov    %edx,%esi
mov    -0x28(%r9,%r8,1),%edx
imul   %edx,%ecx
imul   %ecx,%edi
cmp    %esi,%edi
jg     1440 <main+0x330>
mov    %esi,%edi
mov    -0x24(%r9,%r8,1),%esi
imul   %esi,%edx
imul   %edx,%eax
cmp    %edi,%eax
jg     1451 <main+0x341>
mov    %edi,%eax
mov    -0x20(%r9,%r8,1),%edi
imul   %edi,%esi
imul   %esi,%ecx
cmp    %eax,%ecx
jg     1462 <main+0x352>
mov    %eax,%ecx
mov    -0x1c(%r9,%r8,1),%eax
imul   %eax,%edi
imul   %edi,%edx
cmp    %ecx,%edx
jg     1473 <main+0x363>
mov    %ecx,%edx
mov    -0x18(%r9,%r8,1),%ecx
imul   %ecx,%eax
imul   %eax,%esi
cmp    %edx,%esi
jg     1484 <main+0x374>
mov    %edx,%esi
mov    -0x14(%r9,%r8,1),%r10d
imul   %r10d,%ecx
imul   %ecx,%edi
cmp    %esi,%edi
jg     1496 <main+0x386>
mov    %esi,%edi
mov    -0x10(%r9,%r8,1),%edx
imul   %edx,%r10d
imul   %r10d,%eax
cmp    %edi,%eax
jg     14a9 <main+0x399>
mov    %edi,%eax
mov    -0xc(%r9,%r8,1),%esi
imul   %esi,%edx
imul   %edx,%ecx
cmp    %eax,%ecx
jg     14ba <main+0x3aa>
mov    %eax,%ecx
mov    -0x8(%r9,%r8,1),%eax
imul   %eax,%esi
imul   %esi,%r10d
cmp    %ecx,%r10d
jg     14ce <main+0x3be>
mov    %ecx,%r10d
mov    -0x4(%r9,%r8,1),%ecx
imul   %ecx,%eax
imul   %eax,%edx
cmp    %r10d,%edx
jg     14e1 <main+0x3d1>
mov    %r10d,%edx
imul   %ecx,%esi
imul   (%r9,%r8,1),%esi
cmp    %edx,%esi
jg     13b0 <main+0x2a0>
mov    %edx,%esi
jmp    13b0 <main+0x2a0>
mov    $0x12c,%ecx
nopl   (%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    $0x67c,%rcx
jne    1500 <main+0x3f0>
mov    $0x120,%ecx
nopl   0x0(%rax,%rax,1)
movd   %esi,%xmm0
movdqa -0x30(%rcx,%r8,1),%xmm1
pshufd $0x0,%xmm0,%xmm8
movdqu -0x7c(%rcx,%r8,1),%xmm2
pshufd $0xf5,%xmm2,%xmm4
pmuludq %xmm1,%xmm2
pshufd $0xf5,%xmm1,%xmm3
movdqu -0xc8(%rcx,%r8,1),%xmm6
ff ff ff
pshufd $0xf5,%xmm6,%xmm1
movdqu -0x114(%rcx,%r8,1),%xmm5
fe ff ff
pmuludq %xmm3,%xmm4
movdqu -0x104(%rcx,%r8,1),%xmm3
fe ff ff
movdqa -0x20(%rcx,%r8,1),%xmm7
movdqu -0x6c(%rcx,%r8,1),%xmm0
pmuludq %xmm6,%xmm2
pshufd $0xf5,%xmm0,%xmm6
pmuludq %xmm7,%xmm0
pshufd $0xf5,%xmm7,%xmm7
pmuludq %xmm4,%xmm1
pmuludq %xmm7,%xmm6
movdqu -0xb8(%rcx,%r8,1),%xmm7
ff ff ff
pshufd $0xf5,%xmm7,%xmm4
pmuludq %xmm6,%xmm4
movdqu -0xf4(%rcx,%r8,1),%xmm6
ff ff ff
pmuludq %xmm5,%xmm2
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm1,%xmm5
movdqu -0xe4(%rcx,%r8,1),%xmm9
ff ff ff
pshufd $0xe8,%xmm2,%xmm1
pmuludq %xmm7,%xmm0
pshufd $0xe8,%xmm5,%xmm5
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm2
pshufd $0xf5,%xmm3,%xmm0
punpckldq %xmm5,%xmm1
movdqa %xmm1,%xmm3
pmuludq %xmm4,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm2
pcmpgtd %xmm8,%xmm3
movdqa -0x10(%rcx,%r8,1),%xmm0
movdqu -0x5c(%rcx,%r8,1),%xmm4
pshufd $0xf5,%xmm4,%xmm5
pand   %xmm3,%xmm1
pmuludq %xmm0,%xmm4
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm0,%xmm5
pandn  %xmm8,%xmm3
movdqu -0xa8(%rcx,%r8,1),%xmm0
ff ff ff
pshufd $0xf5,%xmm0,%xmm7
pmuludq %xmm5,%xmm7
movdqa %xmm2,%xmm5
por    %xmm1,%xmm3
pcmpgtd %xmm3,%xmm5
pmuludq %xmm0,%xmm4
pmuludq %xmm6,%xmm4
pand   %xmm5,%xmm2
pshufd $0xe8,%xmm4,%xmm1
pshufd $0xf5,%xmm6,%xmm0
pmuludq %xmm7,%xmm0
pandn  %xmm3,%xmm5
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm1
movdqa %xmm1,%xmm0
movdqa (%rcx,%r8,1),%xmm3
por    %xmm2,%xmm5
movdqu -0x4c(%rcx,%r8,1),%xmm2
pshufd $0xf5,%xmm2,%xmm4
pmuludq %xmm3,%xmm2
pcmpgtd %xmm5,%xmm0
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm3,%xmm4
movdqu -0x98(%rcx,%r8,1),%xmm3
ff ff ff
pand   %xmm0,%xmm1
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm4,%xmm6
pmuludq %xmm3,%xmm2
pandn  %xmm5,%xmm0
pmuludq %xmm9,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm9,%xmm3
por    %xmm1,%xmm0
pmuludq %xmm6,%xmm3
pshufd $0xe8,%xmm3,%xmm1
punpckldq %xmm1,%xmm2
movdqa %xmm2,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
pshufd $0xee,%xmm1,%xmm0
movdqa %xmm1,%xmm2
pcmpgtd %xmm0,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
pshufd $0x55,%xmm2,%xmm0
movdqa %xmm2,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
movd   %xmm1,%esi
add    $0x50,%rcx
cmp    $0x670,%rcx
jne    1720 <main+0x610>
lea    0xd05(%rip),%rdi
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 = [24 x i8] c"The max product is: %d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [20 x [20 x i32]]
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i32 0, i32* %1
%7 = bitcast [20 x [20 x i32]]* %2 to i8*
store i32 0, i32* %5
store i32 0, i32* %6
store i32 0, i32* %3
br label %8
8: ; preds = %60, %0
%9 = load i32, i32* %3
%10 = icmp sle i32 %9, 16
br i1 %10, label %11, label %63
11: ; preds = %8
store i32 0, i32* %4
br label %12
12: ; preds = %56, %11
%13 = load i32, i32* %4
%14 = icmp slt i32 %13, 19
br i1 %14, label %15, label %59
15: ; preds = %12
%16 = load i32, i32* %3
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %17
%19 = load i32, i32* %4
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [20 x i32], [20 x i32]* %18, i64 0, i64 %20
%22 = load i32, i32* %21
%23 = load i32, i32* %3
%24 = add nsw i32 %23, 1
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %25
%27 = load i32, i32* %4
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [20 x i32], [20 x i32]* %26, i64 0, i64 %28
%30 = load i32, i32* %29
%31 = mul nsw i32 %22, %30
%32 = load i32, i32* %3
%33 = add nsw i32 %32, 2
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %34
%36 = load i32, i32* %4
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [20 x i32], [20 x i32]* %35, i64 0, i64 %37
%39 = load i32, i32* %38
%40 = mul nsw i32 %31, %39
%41 = load i32, i32* %3
%42 = add nsw i32 %41, 3
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %43
%45 = load i32, i32* %4
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [20 x i32], [20 x i32]* %44, i64 0, i64 %46
%48 = load i32, i32* %47
%49 = mul nsw i32 %40, %48
store i32 %49, i32* %5
%50 = load i32, i32* %5
%51 = load i32, i32* %6
%52 = icmp sgt i32 %50, %51
br i1 %52, label %53, label %55
53: ; preds = %15
%54 = load i32, i32* %5
store i32 %54, i32* %6
br label %55
55: ; preds = %53, %15
br label %56
56: ; preds = %55
%57 = load i32, i32* %4
%58 = add nsw i32 %57, 1
store i32 %58, i32* %4
br label %12
59: ; preds = %12
br label %60
60: ; preds = %59
%61 = load i32, i32* %3
%62 = add nsw i32 %61, 1
store i32 %62, i32* %3
br label %8
63: ; preds = %8
store i32 0, i32* %3
br label %64
64: ; preds = %116, %63
%65 = load i32, i32* %3
%66 = icmp sle i32 %65, 19
br i1 %66, label %67, label %119
67: ; preds = %64
store i32 0, i32* %4
br label %68
68: ; preds = %112, %67
%69 = load i32, i32* %4
%70 = icmp slt i32 %69, 16
br i1 %70, label %71, label %115
71: ; preds = %68
%72 = load i32, i32* %3
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %73
%75 = load i32, i32* %4
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [20 x i32], [20 x i32]* %74, i64 0, i64 %76
%78 = load i32, i32* %77
%79 = load i32, i32* %3
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %80
%82 = load i32, i32* %4
%83 = add nsw i32 %82, 1
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [20 x i32], [20 x i32]* %81, i64 0, i64 %84
%86 = load i32, i32* %85
%87 = mul nsw i32 %78, %86
%88 = load i32, i32* %3
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %89
%91 = load i32, i32* %4
%92 = add nsw i32 %91, 2
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds [20 x i32], [20 x i32]* %90, i64 0, i64 %93
%95 = load i32, i32* %94
%96 = mul nsw i32 %87, %95
%97 = load i32, i32* %3
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %98
%100 = load i32, i32* %4
%101 = add nsw i32 %100, 3
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds [20 x i32], [20 x i32]* %99, i64 0, i64 %102
%104 = load i32, i32* %103
%105 = mul nsw i32 %96, %104
store i32 %105, i32* %5
%106 = load i32, i32* %5
%107 = load i32, i32* %6
%108 = icmp sgt i32 %106, %107
br i1 %108, label %109, label %111
109: ; preds = %71
%110 = load i32, i32* %5
store i32 %110, i32* %6
br label %111
111: ; preds = %109, %71
br label %112
112: ; preds = %111
%113 = load i32, i32* %4
%114 = add nsw i32 %113, 1
store i32 %114, i32* %4
br label %68
115: ; preds = %68
br label %116
116: ; preds = %115
%117 = load i32, i32* %3
%118 = add nsw i32 %117, 1
store i32 %118, i32* %3
br label %64
119: ; preds = %64
store i32 0, i32* %3
br label %120
120: ; preds = %175, %119
%121 = load i32, i32* %3
%122 = icmp sle i32 %121, 16
br i1 %122, label %123, label %178
123: ; preds = %120
store i32 0, i32* %4
br label %124
124: ; preds = %171, %123
%125 = load i32, i32* %4
%126 = icmp slt i32 %125, 16
br i1 %126, label %127, label %174
127: ; preds = %124
%128 = load i32, i32* %3
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %129
%131 = load i32, i32* %4
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds [20 x i32], [20 x i32]* %130, i64 0, i64 %132
%134 = load i32, i32* %133
%135 = load i32, i32* %3
%136 = add nsw i32 %135, 1
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %137
%139 = load i32, i32* %4
%140 = add nsw i32 %139, 1
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds [20 x i32], [20 x i32]* %138, i64 0, i64 %141
%143 = load i32, i32* %142
%144 = mul nsw i32 %134, %143
%145 = load i32, i32* %3
%146 = add nsw i32 %145, 2
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %147
%149 = load i32, i32* %4
%150 = add nsw i32 %149, 2
%151 = sext 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 nsw i32 %144, %153
%155 = load i32, i32* %3
%156 = add nsw i32 %155, 3
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %157
%159 = load i32, i32* %4
%160 = add nsw i32 %159, 3
%161 = sext 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 nsw i32 %154, %163
store i32 %164, i32* %5
%165 = load i32, i32* %5
%166 = load i32, i32* %6
%167 = icmp sgt i32 %165, %166
br i1 %167, label %168, label %170
168: ; preds = %127
%169 = load i32, i32* %5
store i32 %169, i32* %6
br label %170
170: ; preds = %168, %127
br label %171
171: ; preds = %170
%172 = load i32, i32* %4
%173 = add nsw i32 %172, 1
store i32 %173, i32* %4
br label %124
174: ; preds = %124
br label %175
175: ; preds = %174
%176 = load i32, i32* %3
%177 = add nsw i32 %176, 1
store i32 %177, i32* %3
br label %120
178: ; preds = %120
store i32 3, i32* %3
br label %179
179: ; preds = %234, %178
%180 = load i32, i32* %3
%181 = icmp sle i32 %180, 19
br i1 %181, label %182, label %237
182: ; preds = %179
store i32 0, i32* %4
br label %183
183: ; preds = %230, %182
%184 = load i32, i32* %4
%185 = icmp slt i32 %184, 16
br i1 %185, label %186, label %233
186: ; preds = %183
%187 = load i32, i32* %3
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %188
%190 = load i32, i32* %4
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds [20 x i32], [20 x i32]* %189, i64 0, i64 %191
%193 = load i32, i32* %192
%194 = load i32, i32* %3
%195 = sub nsw i32 %194, 1
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %196
%198 = load i32, i32* %4
%199 = add nsw i32 %198, 1
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds [20 x i32], [20 x i32]* %197, i64 0, i64 %200
%202 = load i32, i32* %201
%203 = mul nsw i32 %193, %202
%204 = load i32, i32* %3
%205 = sub nsw i32 %204, 2
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %206
%208 = load i32, i32* %4
%209 = add nsw i32 %208, 2
%210 = sext 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 nsw i32 %203, %212
%214 = load i32, i32* %3
%215 = sub nsw i32 %214, 3
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %2, i64 0, i64 %216
%218 = load i32, i32* %4
%219 = add nsw i32 %218, 3
%220 = sext 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 nsw i32 %213, %222
store i32 %223, i32* %5
%224 = load i32, i32* %5
%225 = load i32, i32* %6
%226 = icmp sgt i32 %224, %225
br i1 %226, label %227, label %229
227: ; preds = %186
%228 = load i32, i32* %5
store i32 %228, i32* %6
br label %229
229: ; preds = %227, %186
br label %230
230: ; preds = %229
%231 = load i32, i32* %4
%232 = add nsw i32 %231, 1
store i32 %232, i32* %4
br label %183
233: ; preds = %183
br label %234
234: ; preds = %233
%235 = load i32, i32* %3
%236 = add nsw i32 %235, 1
store i32 %236, i32* %3
br label %179
237: ; preds = %179
%238 = load i32, i32* %6
%239 = call i32 @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), i32 %238)
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 = [24 x i8] c"The max product is: %d\0A\00"
define i32 @main() {
br label %1
1: ; preds = %0, %1
%2 = phi i64 [ 0, %0 ], [ %4, %1 ]
%3 = phi i32 [ 0, %0 ], [ %116, %1 ]
%4 = add nuw nsw i64 %2, 1
%5 = add nuw nsw i64 %2, 2
%6 = add nuw nsw i64 %2, 3
%7 = insertelement <4 x i32> poison, i32 %3, i64 0
%8 = shufflevector <4 x i32> %7, <4 x i32> poison, <4 x i32> zeroinitializer
%9 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 0
%10 = bitcast i32* %9 to <4 x i32>*
%11 = load <4 x i32>, <4 x i32>* %10
%12 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %4, i64 0
%13 = bitcast i32* %12 to <4 x i32>*
%14 = load <4 x i32>, <4 x i32>* %13
%15 = mul nsw <4 x i32> %14, %11
%16 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 0
%17 = bitcast i32* %16 to <4 x i32>*
%18 = load <4 x i32>, <4 x i32>* %17
%19 = mul nsw <4 x i32> %15, %18
%20 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %6, i64 0
%21 = bitcast i32* %20 to <4 x i32>*
%22 = load <4 x i32>, <4 x i32>* %21
%23 = mul nsw <4 x i32> %19, %22
%24 = icmp sgt <4 x i32> %23, %8
%25 = select <4 x i1> %24, <4 x i32> %23, <4 x i32> %8
%26 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 4
%27 = bitcast i32* %26 to <4 x i32>*
%28 = load <4 x i32>, <4 x i32>* %27
%29 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %4, i64 4
%30 = bitcast i32* %29 to <4 x i32>*
%31 = load <4 x i32>, <4 x i32>* %30
%32 = mul nsw <4 x i32> %31, %28
%33 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 4
%34 = bitcast i32* %33 to <4 x i32>*
%35 = load <4 x i32>, <4 x i32>* %34
%36 = mul nsw <4 x i32> %32, %35
%37 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %6, i64 4
%38 = bitcast i32* %37 to <4 x i32>*
%39 = load <4 x i32>, <4 x i32>* %38
%40 = mul nsw <4 x i32> %36, %39
%41 = icmp sgt <4 x i32> %40, %25
%42 = select <4 x i1> %41, <4 x i32> %40, <4 x i32> %25
%43 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 8
%44 = bitcast i32* %43 to <4 x i32>*
%45 = load <4 x i32>, <4 x i32>* %44
%46 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %4, i64 8
%47 = bitcast i32* %46 to <4 x i32>*
%48 = load <4 x i32>, <4 x i32>* %47
%49 = mul nsw <4 x i32> %48, %45
%50 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 8
%51 = bitcast i32* %50 to <4 x i32>*
%52 = load <4 x i32>, <4 x i32>* %51
%53 = mul nsw <4 x i32> %49, %52
%54 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %6, i64 8
%55 = bitcast i32* %54 to <4 x i32>*
%56 = load <4 x i32>, <4 x i32>* %55
%57 = mul nsw <4 x i32> %53, %56
%58 = icmp sgt <4 x i32> %57, %42
%59 = select <4 x i1> %58, <4 x i32> %57, <4 x i32> %42
%60 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 12
%61 = bitcast i32* %60 to <4 x i32>*
%62 = load <4 x i32>, <4 x i32>* %61
%63 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %4, i64 12
%64 = bitcast i32* %63 to <4 x i32>*
%65 = load <4 x i32>, <4 x i32>* %64
%66 = mul nsw <4 x i32> %65, %62
%67 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 12
%68 = bitcast i32* %67 to <4 x i32>*
%69 = load <4 x i32>, <4 x i32>* %68
%70 = mul nsw <4 x i32> %66, %69
%71 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %6, i64 12
%72 = bitcast i32* %71 to <4 x i32>*
%73 = load <4 x i32>, <4 x i32>* %72
%74 = mul nsw <4 x i32> %70, %73
%75 = icmp sgt <4 x i32> %74, %59
%76 = select <4 x i1> %75, <4 x i32> %74, <4 x i32> %59
%77 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %76)
%78 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 16
%79 = load i32, i32* %78
%80 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %4, i64 16
%81 = load i32, i32* %80
%82 = mul nsw i32 %81, %79
%83 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 16
%84 = load i32, i32* %83
%85 = mul nsw i32 %82, %84
%86 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %6, i64 16
%87 = load i32, i32* %86
%88 = mul nsw i32 %85, %87
%89 = icmp sgt i32 %88, %77
%90 = select i1 %89, i32 %88, i32 %77
%91 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 17
%92 = load i32, i32* %91
%93 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %4, i64 17
%94 = load i32, i32* %93
%95 = mul nsw i32 %94, %92
%96 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 17
%97 = load i32, i32* %96
%98 = mul nsw i32 %95, %97
%99 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %6, i64 17
%100 = load i32, i32* %99
%101 = mul nsw i32 %98, %100
%102 = icmp sgt i32 %101, %90
%103 = select i1 %102, i32 %101, i32 %90
%104 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 18
%105 = load i32, i32* %104
%106 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %4, i64 18
%107 = load i32, i32* %106
%108 = mul nsw i32 %107, %105
%109 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 18
%110 = load i32, i32* %109
%111 = mul nsw i32 %108, %110
%112 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %6, i64 18
%113 = load i32, i32* %112
%114 = mul nsw i32 %111, %113
%115 = icmp sgt i32 %114, %103
%116 = select i1 %115, i32 %114, i32 %103
%117 = icmp eq i64 %4, 17
br i1 %117, label %118, label %1
118: ; preds = %1, %118
%119 = phi i64 [ %239, %118 ], [ 0, %1 ]
%120 = phi i32 [ %238, %118 ], [ %116, %1 ]
%121 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 1
%122 = load i32, i32* %121
%123 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 2
%124 = load i32, i32* %123
%125 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 0
%126 = load i32, i32* %125
%127 = mul nsw i32 %122, %126
%128 = mul nsw i32 %127, %124
%129 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 3
%130 = load i32, i32* %129
%131 = mul nsw i32 %128, %130
%132 = icmp sgt i32 %131, %120
%133 = select i1 %132, i32 %131, i32 %120
%134 = mul nsw i32 %124, %122
%135 = mul nsw i32 %134, %130
%136 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 4
%137 = load i32, i32* %136
%138 = mul nsw i32 %135, %137
%139 = icmp sgt i32 %138, %133
%140 = select i1 %139, i32 %138, i32 %133
%141 = mul nsw i32 %130, %124
%142 = mul nsw i32 %141, %137
%143 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 5
%144 = load i32, i32* %143
%145 = mul nsw i32 %142, %144
%146 = icmp sgt i32 %145, %140
%147 = select i1 %146, i32 %145, i32 %140
%148 = mul nsw i32 %137, %130
%149 = mul nsw i32 %148, %144
%150 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 6
%151 = load i32, i32* %150
%152 = mul nsw i32 %149, %151
%153 = icmp sgt i32 %152, %147
%154 = select i1 %153, i32 %152, i32 %147
%155 = mul nsw i32 %144, %137
%156 = mul nsw i32 %155, %151
%157 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 7
%158 = load i32, i32* %157
%159 = mul nsw i32 %156, %158
%160 = icmp sgt i32 %159, %154
%161 = select i1 %160, i32 %159, i32 %154
%162 = mul nsw i32 %151, %144
%163 = mul nsw i32 %162, %158
%164 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 8
%165 = load i32, i32* %164
%166 = mul nsw i32 %163, %165
%167 = icmp sgt i32 %166, %161
%168 = select i1 %167, i32 %166, i32 %161
%169 = mul nsw i32 %158, %151
%170 = mul nsw i32 %169, %165
%171 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 9
%172 = load i32, i32* %171
%173 = mul nsw i32 %170, %172
%174 = icmp sgt i32 %173, %168
%175 = select i1 %174, i32 %173, i32 %168
%176 = mul nsw i32 %165, %158
%177 = mul nsw i32 %176, %172
%178 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 10
%179 = load i32, i32* %178
%180 = mul nsw i32 %177, %179
%181 = icmp sgt i32 %180, %175
%182 = select i1 %181, i32 %180, i32 %175
%183 = mul nsw i32 %172, %165
%184 = mul nsw i32 %183, %179
%185 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 11
%186 = load i32, i32* %185
%187 = mul nsw i32 %184, %186
%188 = icmp sgt i32 %187, %182
%189 = select i1 %188, i32 %187, i32 %182
%190 = mul nsw i32 %179, %172
%191 = mul nsw i32 %190, %186
%192 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 12
%193 = load i32, i32* %192
%194 = mul nsw i32 %191, %193
%195 = icmp sgt i32 %194, %189
%196 = select i1 %195, i32 %194, i32 %189
%197 = mul nsw i32 %186, %179
%198 = mul nsw i32 %197, %193
%199 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 13
%200 = load i32, i32* %199
%201 = mul nsw i32 %198, %200
%202 = icmp sgt i32 %201, %196
%203 = select i1 %202, i32 %201, i32 %196
%204 = mul nsw i32 %193, %186
%205 = mul nsw i32 %204, %200
%206 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 14
%207 = load i32, i32* %206
%208 = mul nsw i32 %205, %207
%209 = icmp sgt i32 %208, %203
%210 = select i1 %209, i32 %208, i32 %203
%211 = mul nsw i32 %200, %193
%212 = mul nsw i32 %211, %207
%213 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 15
%214 = load i32, i32* %213
%215 = mul nsw i32 %212, %214
%216 = icmp sgt i32 %215, %210
%217 = select i1 %216, i32 %215, i32 %210
%218 = mul nsw i32 %207, %200
%219 = mul nsw i32 %218, %214
%220 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 16
%221 = load i32, i32* %220
%222 = mul nsw i32 %219, %221
%223 = icmp sgt i32 %222, %217
%224 = select i1 %223, i32 %222, i32 %217
%225 = mul nsw i32 %214, %207
%226 = mul nsw i32 %225, %221
%227 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 17
%228 = load i32, i32* %227
%229 = mul nsw i32 %226, %228
%230 = icmp sgt i32 %229, %224
%231 = select i1 %230, i32 %229, i32 %224
%232 = mul nsw i32 %221, %214
%233 = mul nsw i32 %232, %228
%234 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %119, i64 18
%235 = load i32, i32* %234
%236 = mul nsw i32 %233, %235
%237 = icmp sgt i32 %236, %231
%238 = select i1 %237, i32 %236, i32 %231
%239 = add nuw nsw i64 %119, 1
%240 = icmp eq i64 %239, 20
br i1 %240, label %241, label %118
241: ; preds = %118, %241
%242 = phi i64 [ %244, %241 ], [ 0, %118 ]
%243 = phi i32 [ %317, %241 ], [ %238, %118 ]
%244 = add nuw nsw i64 %242, 1
%245 = add nuw nsw i64 %242, 2
%246 = add nuw nsw i64 %242, 3
%247 = insertelement <4 x i32> poison, i32 %243, i64 0
%248 = shufflevector <4 x i32> %247, <4 x i32> poison, <4 x i32> zeroinitializer
%249 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %242, i64 0
%250 = bitcast i32* %249 to <4 x i32>*
%251 = load <4 x i32>, <4 x i32>* %250
%252 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %244, i64 1
%253 = bitcast i32* %252 to <4 x i32>*
%254 = load <4 x i32>, <4 x i32>* %253
%255 = mul nsw <4 x i32> %254, %251
%256 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %245, i64 2
%257 = bitcast i32* %256 to <4 x i32>*
%258 = load <4 x i32>, <4 x i32>* %257
%259 = mul nsw <4 x i32> %255, %258
%260 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %246, i64 3
%261 = bitcast i32* %260 to <4 x i32>*
%262 = load <4 x i32>, <4 x i32>* %261
%263 = mul nsw <4 x i32> %259, %262
%264 = icmp sgt <4 x i32> %263, %248
%265 = select <4 x i1> %264, <4 x i32> %263, <4 x i32> %248
%266 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %242, i64 4
%267 = bitcast i32* %266 to <4 x i32>*
%268 = load <4 x i32>, <4 x i32>* %267
%269 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %244, i64 5
%270 = bitcast i32* %269 to <4 x i32>*
%271 = load <4 x i32>, <4 x i32>* %270
%272 = mul nsw <4 x i32> %271, %268
%273 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %245, i64 6
%274 = bitcast i32* %273 to <4 x i32>*
%275 = load <4 x i32>, <4 x i32>* %274
%276 = mul nsw <4 x i32> %272, %275
%277 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %246, i64 7
%278 = bitcast i32* %277 to <4 x i32>*
%279 = load <4 x i32>, <4 x i32>* %278
%280 = mul nsw <4 x i32> %276, %279
%281 = icmp sgt <4 x i32> %280, %265
%282 = select <4 x i1> %281, <4 x i32> %280, <4 x i32> %265
%283 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %242, i64 8
%284 = bitcast i32* %283 to <4 x i32>*
%285 = load <4 x i32>, <4 x i32>* %284
%286 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %244, i64 9
%287 = bitcast i32* %286 to <4 x i32>*
%288 = load <4 x i32>, <4 x i32>* %287
%289 = mul nsw <4 x i32> %288, %285
%290 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %245, i64 10
%291 = bitcast i32* %290 to <4 x i32>*
%292 = load <4 x i32>, <4 x i32>* %291
%293 = mul nsw <4 x i32> %289, %292
%294 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %246, i64 11
%295 = bitcast i32* %294 to <4 x i32>*
%296 = load <4 x i32>, <4 x i32>* %295
%297 = mul nsw <4 x i32> %293, %296
%298 = icmp sgt <4 x i32> %297, %282
%299 = select <4 x i1> %298, <4 x i32> %297, <4 x i32> %282
%300 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %242, i64 12
%301 = bitcast i32* %300 to <4 x i32>*
%302 = load <4 x i32>, <4 x i32>* %301
%303 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %244, i64 13
%304 = bitcast i32* %303 to <4 x i32>*
%305 = load <4 x i32>, <4 x i32>* %304
%306 = mul nsw <4 x i32> %305, %302
%307 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %245, i64 14
%308 = bitcast i32* %307 to <4 x i32>*
%309 = load <4 x i32>, <4 x i32>* %308
%310 = mul nsw <4 x i32> %306, %309
%311 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %246, i64 15
%312 = bitcast i32* %311 to <4 x i32>*
%313 = load <4 x i32>, <4 x i32>* %312
%314 = mul nsw <4 x i32> %310, %313
%315 = icmp sgt <4 x i32> %314, %299
%316 = select <4 x i1> %315, <4 x i32> %314, <4 x i32> %299
%317 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %316)
%318 = icmp eq i64 %244, 17
br i1 %318, label %319, label %241
319: ; preds = %241, %319
%320 = phi i64 [ %396, %319 ], [ 3, %241 ]
%321 = phi i32 [ %395, %319 ], [ %317, %241 ]
%322 = add nsw i64 %320, -1
%323 = add nsw i64 %320, -2
%324 = add nsw i64 %320, -3
%325 = insertelement <4 x i32> poison, i32 %321, i64 0
%326 = shufflevector <4 x i32> %325, <4 x i32> poison, <4 x i32> zeroinitializer
%327 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %320, i64 0
%328 = bitcast i32* %327 to <4 x i32>*
%329 = load <4 x i32>, <4 x i32>* %328
%330 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %322, i64 1
%331 = bitcast i32* %330 to <4 x i32>*
%332 = load <4 x i32>, <4 x i32>* %331
%333 = mul nsw <4 x i32> %332, %329
%334 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %323, i64 2
%335 = bitcast i32* %334 to <4 x i32>*
%336 = load <4 x i32>, <4 x i32>* %335
%337 = mul nsw <4 x i32> %333, %336
%338 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %324, i64 3
%339 = bitcast i32* %338 to <4 x i32>*
%340 = load <4 x i32>, <4 x i32>* %339
%341 = mul nsw <4 x i32> %337, %340
%342 = icmp sgt <4 x i32> %341, %326
%343 = select <4 x i1> %342, <4 x i32> %341, <4 x i32> %326
%344 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %320, i64 4
%345 = bitcast i32* %344 to <4 x i32>*
%346 = load <4 x i32>, <4 x i32>* %345
%347 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %322, i64 5
%348 = bitcast i32* %347 to <4 x i32>*
%349 = load <4 x i32>, <4 x i32>* %348
%350 = mul nsw <4 x i32> %349, %346
%351 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %323, i64 6
%352 = bitcast i32* %351 to <4 x i32>*
%353 = load <4 x i32>, <4 x i32>* %352
%354 = mul nsw <4 x i32> %350, %353
%355 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %324, i64 7
%356 = bitcast i32* %355 to <4 x i32>*
%357 = load <4 x i32>, <4 x i32>* %356
%358 = mul nsw <4 x i32> %354, %357
%359 = icmp sgt <4 x i32> %358, %343
%360 = select <4 x i1> %359, <4 x i32> %358, <4 x i32> %343
%361 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %320, i64 8
%362 = bitcast i32* %361 to <4 x i32>*
%363 = load <4 x i32>, <4 x i32>* %362
%364 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %322, i64 9
%365 = bitcast i32* %364 to <4 x i32>*
%366 = load <4 x i32>, <4 x i32>* %365
%367 = mul nsw <4 x i32> %366, %363
%368 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %323, i64 10
%369 = bitcast i32* %368 to <4 x i32>*
%370 = load <4 x i32>, <4 x i32>* %369
%371 = mul nsw <4 x i32> %367, %370
%372 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %324, i64 11
%373 = bitcast i32* %372 to <4 x i32>*
%374 = load <4 x i32>, <4 x i32>* %373
%375 = mul nsw <4 x i32> %371, %374
%376 = icmp sgt <4 x i32> %375, %360
%377 = select <4 x i1> %376, <4 x i32> %375, <4 x i32> %360
%378 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %320, i64 12
%379 = bitcast i32* %378 to <4 x i32>*
%380 = load <4 x i32>, <4 x i32>* %379
%381 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %322, i64 13
%382 = bitcast i32* %381 to <4 x i32>*
%383 = load <4 x i32>, <4 x i32>* %382
%384 = mul nsw <4 x i32> %383, %380
%385 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %323, i64 14
%386 = bitcast i32* %385 to <4 x i32>*
%387 = load <4 x i32>, <4 x i32>* %386
%388 = mul nsw <4 x i32> %384, %387
%389 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %324, i64 15
%390 = bitcast i32* %389 to <4 x i32>*
%391 = load <4 x i32>, <4 x i32>* %390
%392 = mul nsw <4 x i32> %388, %391
%393 = icmp sgt <4 x i32> %392, %377
%394 = select <4 x i1> %393, <4 x i32> %392, <4 x i32> %377
%395 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %394)
%396 = add nuw nsw i64 %320, 1
%397 = icmp eq i64 %396, 20
br i1 %397, label %398, label %319
398: ; preds = %319
%399 = tail call i32 @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), i32 %395)
ret i32 0
}