#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 Problem011_(void) {
  int inner, outer;
  int product, biggest = 0;
  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, 04, 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, 02, 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, 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 (outer = 0; outer < 16; outer++) {
    for (inner = 0; inner < 20; inner++) {
      product = grid[outer][inner] * grid[outer + 1][inner] *
                grid[outer + 2][inner] * grid[outer + 3][inner];
      biggest = (biggest > product) ? biggest : product;
      product = grid[inner][outer] * grid[inner][outer + 1] *
                grid[inner][outer + 2] * grid[inner][outer + 3];
      biggest = (biggest > product) ? biggest : product;
    }
  }
  for (outer = 0; outer < 16; outer++) {
    for (inner = 0; inner < 16; inner++) {
      product = grid[outer][inner] * grid[outer + 1][inner + 1] *
                grid[outer + 2][inner + 2] * grid[outer + 3][inner + 3];
      biggest = (biggest > product) ? biggest : product;
      product = grid[outer + 3][inner] * grid[outer + 2][inner + 1] *
                grid[outer + 1][inner + 2] * grid[outer][inner + 3];
      biggest = (biggest > product) ? biggest : product;
    }
  }
  printf("%30d", biggest);
  return 0;
}


x86 assembly (clang, -O0):
<Problem011_>:
push   %rbp
mov    %rsp,%rbp
sub    $0x660,%rsp
movl   $0x0,-0x10(%rbp)
lea    -0x650(%rbp),%rdi
lea    0xec0(%rip),%rsi
mov    $0x640,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    12d7 <Problem011_+0x1b7>
movl   $0x0,-0x4(%rbp)
cmpl   $0x14,-0x4(%rbp)
jge    12c4 <Problem011_+0x1a4>
movslq -0x8(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x4(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
movslq -0x4(%rbp),%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x8(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
movslq -0x4(%rbp),%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x8(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
movslq -0x4(%rbp),%rdx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0xc(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    11ff <Problem011_+0xdf>
mov    -0x10(%rbp),%eax
mov    %eax,-0x654(%rbp)
jmp    1208 <Problem011_+0xe8>
mov    -0xc(%rbp),%eax
mov    %eax,-0x654(%rbp)
mov    -0x654(%rbp),%eax
mov    %eax,-0x10(%rbp)
movslq -0x4(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
movslq -0x4(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x8(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
movslq -0x4(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x8(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
movslq -0x4(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x8(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0xc(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    12a4 <Problem011_+0x184>
mov    -0x10(%rbp),%eax
mov    %eax,-0x658(%rbp)
jmp    12ad <Problem011_+0x18d>
mov    -0xc(%rbp),%eax
mov    %eax,-0x658(%rbp)
mov    -0x658(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1162 <Problem011_+0x42>
jmp    12c9 <Problem011_+0x1a9>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1151 <Problem011_+0x31>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1482 <Problem011_+0x362>
movl   $0x0,-0x4(%rbp)
cmpl   $0x10,-0x4(%rbp)
jge    146f <Problem011_+0x34f>
movslq -0x8(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x4(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x4(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x8(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x4(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x8(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x4(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0xc(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    139b <Problem011_+0x27b>
mov    -0x10(%rbp),%eax
mov    %eax,-0x65c(%rbp)
jmp    13a4 <Problem011_+0x284>
mov    -0xc(%rbp),%eax
mov    %eax,-0x65c(%rbp)
mov    -0x65c(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x4(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x8(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x4(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x4(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
movslq -0x8(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x4(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    %eax,-0xc(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    144f <Problem011_+0x32f>
mov    -0x10(%rbp),%eax
mov    %eax,-0x660(%rbp)
jmp    1458 <Problem011_+0x338>
mov    -0xc(%rbp),%eax
mov    %eax,-0x660(%rbp)
mov    -0x660(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    12ef <Problem011_+0x1cf>
jmp    1474 <Problem011_+0x354>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12de <Problem011_+0x1be>
mov    -0x10(%rbp),%esi
lea    0x11b4(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x660,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Problem011_>:
push   %r14
push   %rbx
push   %rax
xor    %r8d,%r8d
lea    0xfd2(%rip),%rcx
lea    0xee7(%rip),%r9
xor    %esi,%esi
nopw   0x0(%rax,%rax,1)
add    $0x1,%r8
mov    $0xffffffffffffffec,%rdi
mov    %r9,%rdx
xchg   %ax,%ax
mov    -0x50(%rcx,%rdi,4),%eax
imul   -0xa0(%rcx,%rdi,4),%eax
ff
imul   (%rcx,%rdi,4),%eax
imul   0x50(%rcx,%rdi,4),%eax
cmp    %eax,%esi
cmovg  %esi,%eax
mov    -0x8(%rdx),%esi
imul   -0xc(%rdx),%esi
imul   -0x4(%rdx),%esi
imul   (%rdx),%esi
cmp    %esi,%eax
cmovg  %eax,%esi
add    $0x50,%rdx
inc    %rdi
jne    1140 <Problem011_+0x30>
add    $0x50,%rcx
add    $0x4,%r9
cmp    $0x10,%r8
jne    1130 <Problem011_+0x20>
mov    $0x31,%r9d
lea    0xf6b(%rip),%r14
xor    %r10d,%r10d
lea    0xe65(%rip),%r8
nopl   0x0(%rax,%rax,1)
mov    %r9d,%edx
lea    (%r10,%r10,4),%rcx
add    $0x1,%r10
shl    $0x4,%rcx
mov    0xa4(%rcx,%r8,1),%r9d
mov    %r9d,%ecx
xor    %edi,%edi
nopl   0x0(%rax)
imul   -0xfc(%r14,%rdi,4),%edx
ff ff
mov    -0xa4(%r14,%rdi,4),%r11d
ff
mov    -0x54(%r14,%rdi,4),%ebx
imul   %ebx,%edx
imul   (%r14,%rdi,4),%edx
cmp    %edx,%esi
cmovg  %esi,%edx
imul   -0xc(%r14,%rdi,4),%ecx
imul   %r11d,%ecx
imul   -0xf0(%r14,%rdi,4),%ecx
ff ff
lea    0x1(%rdi),%rax
cmp    %ecx,%edx
mov    %ecx,%esi
cmovg  %edx,%esi
mov    %ebx,%ecx
mov    %r11d,%edx
mov    %rax,%rdi
cmp    $0x10,%rax
jne    11c0 <Problem011_+0xb0>
add    $0x50,%r14
cmp    $0x10,%r10
jne    11a0 <Problem011_+0x90>
lea    0x1420(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
@__const.Problem011_.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 = [5 x i8] c"%30d\00"
define i32 @Problem011_() {
br label %1
1: ; preds = %0, %38
%2 = phi i64 [ 0, %0 ], [ %4, %38 ]
%3 = phi i32 [ 0, %0 ], [ %35, %38 ]
%4 = add nuw nsw i64 %2, 1
%5 = add nuw nsw i64 %2, 2
%6 = add nuw nsw i64 %2, 3
br label %7
7: ; preds = %1, %7
%8 = phi i64 [ 0, %1 ], [ %36, %7 ]
%9 = phi i32 [ %3, %1 ], [ %35, %7 ]
%10 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %2, i64 %8
%11 = load i32, i32* %10
%12 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %4, i64 %8
%13 = load i32, i32* %12
%14 = mul nsw i32 %13, %11
%15 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %5, i64 %8
%16 = load i32, i32* %15
%17 = mul nsw i32 %14, %16
%18 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %6, i64 %8
%19 = load i32, i32* %18
%20 = mul nsw i32 %17, %19
%21 = icmp sgt i32 %9, %20
%22 = select i1 %21, i32 %9, i32 %20
%23 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %8, i64 %2
%24 = load i32, i32* %23
%25 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %8, i64 %4
%26 = load i32, i32* %25
%27 = mul nsw i32 %26, %24
%28 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %8, i64 %5
%29 = load i32, i32* %28
%30 = mul nsw i32 %27, %29
%31 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %8, i64 %6
%32 = load i32, i32* %31
%33 = mul nsw i32 %30, %32
%34 = icmp sgt i32 %22, %33
%35 = select i1 %34, i32 %22, i32 %33
%36 = add nuw nsw i64 %8, 1
%37 = icmp eq i64 %36, 20
br i1 %37, label %38, label %7
38: ; preds = %7
%39 = icmp eq i64 %4, 16
br i1 %39, label %40, label %1
40: ; preds = %38, %80
%41 = phi i32 [ %48, %80 ], [ 49, %38 ]
%42 = phi i64 [ %44, %80 ], [ 0, %38 ]
%43 = phi i32 [ %78, %80 ], [ %35, %38 ]
%44 = add nuw nsw i64 %42, 1
%45 = add nuw nsw i64 %42, 2
%46 = add nuw nsw i64 %42, 3
%47 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %45, i64 1
%48 = load i32, i32* %47
br label %49
49: ; preds = %40, %49
%50 = phi i32 [ %48, %40 ], [ %60, %49 ]
%51 = phi i32 [ %41, %40 ], [ %72, %49 ]
%52 = phi i64 [ 0, %40 ], [ %56, %49 ]
%53 = phi i32 [ %43, %40 ], [ %78, %49 ]
%54 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %42, i64 %52
%55 = load i32, i32* %54
%56 = add nuw nsw i64 %52, 1
%57 = mul nsw i32 %51, %55
%58 = add nuw nsw i64 %52, 2
%59 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %45, i64 %58
%60 = load i32, i32* %59
%61 = mul nsw i32 %57, %60
%62 = add nuw nsw i64 %52, 3
%63 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %46, i64 %62
%64 = load i32, i32* %63
%65 = mul nsw i32 %61, %64
%66 = icmp sgt i32 %53, %65
%67 = select i1 %66, i32 %53, i32 %65
%68 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %46, i64 %52
%69 = load i32, i32* %68
%70 = mul nsw i32 %50, %69
%71 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %44, i64 %58
%72 = load i32, i32* %71
%73 = mul nsw i32 %70, %72
%74 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.Problem011_.grid, i64 0, i64 %42, i64 %62
%75 = load i32, i32* %74
%76 = mul nsw i32 %73, %75
%77 = icmp sgt i32 %67, %76
%78 = select i1 %77, i32 %67, i32 %76
%79 = icmp eq i64 %56, 16
br i1 %79, label %80, label %49
80: ; preds = %49
%81 = icmp eq i64 %44, 16
br i1 %81, label %82, label %40
82: ; preds = %80
%83 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i32 %78)
ret i32 0
}