#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 INT_MIN;
void *malloc(int);
int rob3(int *nums, int numsSize) {
  if (numsSize <= 0)
    return 0;
  int **array = malloc(sizeof(int *) * numsSize);
  for (int i = 0; i < numsSize; i++)
    array[i] = malloc(sizeof(int) * numsSize);
  for (int i = 0; i < numsSize; i++)
    array[i][i] = nums[i];
  for (int length = 2; length <= numsSize; length++) {
    for (int i = 0; i < numsSize - length + 1; i++) {
      int j = i + length - 1;
      array[i][j] = INT_MIN;
      for (int k = i; k <= j; k++) {
        int tmp = nums[k];
        if (k >= 2 + i && k <= j - 2)
          tmp += array[i][k - 2] + array[k + 2][j];
        else if (k <= j - 2)
          tmp += array[k + 2][j];
        else if (k >= 2 + i)
          tmp += array[i][k - 2];
        if (array[i][j] < tmp)
          array[i][j] = tmp;
      }
    }
  }
  return array[0][numsSize - 1];
}


x86 assembly (clang, -O0):
<rob3>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jg     1135 <rob3+0x25>
movl   $0x0,-0x4(%rbp)
jmp    1387 <rob3+0x277>
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1187 <rob3+0x77>
movslq -0x14(%rbp),%rax
shl    $0x2,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,%rdx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    114f <rob3+0x3f>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11c6 <rob3+0xb6>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    118e <rob3+0x7e>
movl   $0x2,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     1371 <rob3+0x261>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    -0x2c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    135e <rob3+0x24e>
mov    -0x30(%rbp),%eax
add    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    0x2de1(%rip),%rax
mov    (%rax),%edx
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     134b <rob3+0x23b>
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x30(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jl     1299 <rob3+0x189>
mov    -0x38(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jg     1299 <rob3+0x189>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x38(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
mov    -0x38(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
movslq -0x34(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    1306 <rob3+0x1f6>
mov    -0x38(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jg     12cd <rob3+0x1bd>
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    1301 <rob3+0x1f1>
mov    -0x38(%rbp),%eax
mov    -0x30(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jl     12fc <rob3+0x1ec>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x38(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    1301 <rob3+0x1f1>
jmp    1306 <rob3+0x1f6>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x3c(%rbp),%eax
jge    1338 <rob3+0x228>
mov    -0x3c(%rbp),%edx
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    133d <rob3+0x22d>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1222 <rob3+0x112>
jmp    1350 <rob3+0x240>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11e0 <rob3+0xd0>
jmp    1363 <rob3+0x253>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11cd <rob3+0xbd>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rob3>:
test   %esi,%esi
jle    1184 <rob3+0x74>
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %esi,%ebp
mov    %rdi,%rbx
lea    0x0(,%rbp,8),%edi
call   1030 <malloc@plt>
mov    %rax,%r15
lea    0x0(,%rbp,4),%r14d
mov    %rbp,%r12
mov    %ebp,%edx
xor    %ebp,%ebp
mov    %rdx,0x8(%rsp)
nopw   0x0(%rax,%rax,1)
mov    %r14d,%edi
call   1030 <malloc@plt>
mov    0x8(%rsp),%rdx
mov    %rax,(%r15,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%rdx
jne    1150 <rob3+0x40>
mov    %r12,%rbp
test   %ebp,%ebp
jle    11e9 <rob3+0xd9>
lea    -0x1(%rdx),%rcx
mov    %edx,%eax
and    $0x3,%eax
cmp    $0x3,%rcx
jae    1187 <rob3+0x77>
xor    %ecx,%ecx
jmp    11ca <rob3+0xba>
xor    %eax,%eax
ret
mov    %edx,%r8d
and    $0xfffffffc,%r8d
xor    %ecx,%ecx
mov    (%rbx,%rcx,4),%esi
mov    (%r15,%rcx,8),%rdi
mov    %esi,(%rdi,%rcx,4)
mov    0x4(%rbx,%rcx,4),%esi
mov    0x8(%r15,%rcx,8),%rdi
mov    %esi,0x4(%rdi,%rcx,4)
mov    0x8(%rbx,%rcx,4),%esi
mov    0x10(%r15,%rcx,8),%rdi
mov    %esi,0x8(%rdi,%rcx,4)
mov    0xc(%rbx,%rcx,4),%esi
mov    0x18(%r15,%rcx,8),%rdi
mov    %esi,0xc(%rdi,%rcx,4)
add    $0x4,%rcx
cmp    %rcx,%r8
jne    1190 <rob3+0x80>
test   %rax,%rax
je     11e4 <rob3+0xd4>
nop
mov    (%rbx,%rcx,4),%edi
mov    (%r15,%rcx,8),%rsi
mov    %edi,(%rsi,%rcx,4)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rax
jne    11d0 <rob3+0xc0>
cmp    $0x1,%ebp
jg     11f3 <rob3+0xe3>
add    $0xffffffff,%ebp
mov    %ebp,%ecx
jmp    135f <rob3+0x24f>
lea    -0x1(%rbp),%eax
add    $0x1,%ebp
mov    $0x2,%r9d
xor    %ecx,%ecx
mov    %rcx,0x10(%rsp)
mov    %eax,0x4(%rsp)
mov    %eax,(%rsp)
mov    %rbp,0x18(%rsp)
jmp    1241 <rob3+0x131>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r9
addl   $0xffffffff,(%rsp)
addq   $0x1,0x10(%rsp)
mov    0x18(%rsp),%rbp
cmp    %rbp,%r9
mov    0x8(%rsp),%rdx
je     135b <rob3+0x24b>
cmp    %rdx,%r9
ja     1220 <rob3+0x110>
mov    (%rsp),%eax
mov    %rax,0x20(%rsp)
mov    %r9,%r11
xor    %edi,%edi
jmp    126e <rob3+0x15e>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r11
mov    %r12,%rdi
cmp    0x20(%rsp),%r12
je     1220 <rob3+0x110>
lea    (%rdi,%r9,1),%rsi
mov    0x2d6f(%rip),%rax
mov    (%rax),%r10d
mov    (%r15,%rdi,8),%rbp
mov    %r10d,-0x4(%rbp,%rsi,4)
lea    (%rdi,%r9,1),%rdx
add    $0xfffffffffffffffd,%rdx
lea    0x2(%rdi),%r8d
mov    (%rbx,%rdi,4),%eax
cmp    %rdx,%rdi
jg     12a1 <rob3+0x191>
mov    (%r15,%r8,8),%rcx
add    -0x4(%rcx,%rsi,4),%eax
cmp    %eax,%r10d
jge    12ad <rob3+0x19d>
mov    %eax,-0x4(%rbp,%rsi,4)
mov    %eax,%r10d
mov    0x4(%rbx,%rdi,4),%eax
cmp    %rdx,%rdi
jge    12c1 <rob3+0x1b1>
lea    0x3(%rdi),%ecx
mov    (%r15,%rcx,8),%rcx
add    -0x4(%rcx,%rsi,4),%eax
cmp    %eax,%r10d
jge    12cd <rob3+0x1bd>
mov    %eax,-0x4(%rbp,%rsi,4)
mov    %eax,%r10d
lea    0x1(%rdi),%r12
add    $0x2,%rdi
mov    0x10(%rsp),%r13
cmp    %r11,%rdi
jne    12fe <rob3+0x1ee>
jmp    1260 <rob3+0x150>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rdi
add    $0xffffffffffffffff,%r13
je     1260 <rob3+0x150>
mov    (%rbx,%rdi,4),%r14d
cmp    %r8,%rdi
jb     1320 <rob3+0x210>
cmp    %rdx,%rdi
jg     1320 <rob3+0x210>
lea    0x2(%rdi),%eax
mov    (%r15,%rax,8),%rax
add    -0x8(%rbp,%rdi,4),%r14d
jmp    1347 <rob3+0x237>
nopw   0x0(%rax,%rax,1)
cmp    %rdx,%rdi
jle    1340 <rob3+0x230>
cmp    %r8,%rdi
jb     134c <rob3+0x23c>
add    -0x8(%rbp,%rdi,4),%r14d
jmp    134c <rob3+0x23c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    0x2(%rdi),%eax
mov    (%r15,%rax,8),%rax
add    -0x4(%rax,%rsi,4),%r14d
cmp    %r14d,%r10d
jge    12f0 <rob3+0x1e0>
mov    %r14d,-0x4(%rbp,%rsi,4)
mov    %r14d,%r10d
jmp    12f0 <rob3+0x1e0>
mov    0x4(%rsp),%ecx
mov    (%r15),%rax
mov    %ecx,%ecx
mov    (%rax,%rcx,4),%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@INT_MIN = global i32 0
define i32 @rob3(i32* nocapture %0, i32 %1) {
%3 = icmp slt i32 %1, 1
br i1 %3, label %186, label %4
4: ; preds = %2
%5 = shl i32 %1, 3
%6 = tail call i8* @malloc(i32 %5)
%7 = bitcast i8* %6 to i32**
%8 = shl i32 %1, 2
%9 = zext i32 %1 to i64
br label %18
10: ; preds = %18
%11 = icmp sgt i32 %1, 0
br i1 %11, label %12, label %41
12: ; preds = %10
%13 = add nsw i64 %9, -1
%14 = and i64 %9, 3
%15 = icmp ult i64 %13, 3
br i1 %15, label %25, label %16
16: ; preds = %12
%17 = and i64 %9, 4294967292
br label %48
18: ; preds = %4, %18
%19 = phi i64 [ 0, %4 ], [ %23, %18 ]
%20 = tail call i8* @malloc(i32 %8)
%21 = getelementptr inbounds i32*, i32** %7, i64 %19
%22 = bitcast i32** %21 to i8**
store i8* %20, i8** %22
%23 = add nuw nsw i64 %19, 1
%24 = icmp eq i64 %23, %9
br i1 %24, label %10, label %18
25: ; preds = %48, %12
%26 = phi i64 [ 0, %12 ], [ %74, %48 ]
%27 = icmp eq i64 %14, 0
br i1 %27, label %39, label %28
28: ; preds = %25, %28
%29 = phi i64 [ %36, %28 ], [ %26, %25 ]
%30 = phi i64 [ %37, %28 ], [ 0, %25 ]
%31 = getelementptr inbounds i32, i32* %0, i64 %29
%32 = load i32, i32* %31
%33 = getelementptr inbounds i32*, i32** %7, i64 %29
%34 = load i32*, i32** %33
%35 = getelementptr inbounds i32, i32* %34, i64 %29
store i32 %32, i32* %35
%36 = add nuw nsw i64 %29, 1
%37 = add i64 %30, 1
%38 = icmp eq i64 %37, %14
br i1 %38, label %39, label %28
39: ; preds = %28, %25
%40 = icmp slt i32 %1, 2
br i1 %40, label %41, label %43
41: ; preds = %10, %39
%42 = add nsw i32 %1, -1
br label %83
43: ; preds = %39
%44 = add nsw i32 %1, -1
%45 = zext i32 %1 to i64
%46 = add nuw i32 %1, 1
%47 = zext i32 %46 to i64
br label %77
48: ; preds = %48, %16
%49 = phi i64 [ 0, %16 ], [ %74, %48 ]
%50 = phi i64 [ 0, %16 ], [ %75, %48 ]
%51 = getelementptr inbounds i32, i32* %0, i64 %49
%52 = load i32, i32* %51
%53 = getelementptr inbounds i32*, i32** %7, i64 %49
%54 = load i32*, i32** %53
%55 = getelementptr inbounds i32, i32* %54, i64 %49
store i32 %52, i32* %55
%56 = or i64 %49, 1
%57 = getelementptr inbounds i32, i32* %0, i64 %56
%58 = load i32, i32* %57
%59 = getelementptr inbounds i32*, i32** %7, i64 %56
%60 = load i32*, i32** %59
%61 = getelementptr inbounds i32, i32* %60, i64 %56
store i32 %58, i32* %61
%62 = or i64 %49, 2
%63 = getelementptr inbounds i32, i32* %0, i64 %62
%64 = load i32, i32* %63
%65 = getelementptr inbounds i32*, i32** %7, i64 %62
%66 = load i32*, i32** %65
%67 = getelementptr inbounds i32, i32* %66, i64 %62
store i32 %64, i32* %67
%68 = or i64 %49, 3
%69 = getelementptr inbounds i32, i32* %0, i64 %68
%70 = load i32, i32* %69
%71 = getelementptr inbounds i32*, i32** %7, i64 %68
%72 = load i32*, i32** %71
%73 = getelementptr inbounds i32, i32* %72, i64 %68
store i32 %70, i32* %73
%74 = add nuw nsw i64 %49, 4
%75 = add i64 %50, 4
%76 = icmp eq i64 %75, %17
br i1 %76, label %25, label %48
77: ; preds = %43, %89
%78 = phi i32 [ %44, %43 ], [ %91, %89 ]
%79 = phi i64 [ 2, %43 ], [ %90, %89 ]
%80 = icmp ugt i64 %79, %45
br i1 %80, label %89, label %81
81: ; preds = %77
%82 = zext i32 %78 to i64
br label %93
83: ; preds = %89, %41
%84 = phi i32 [ %42, %41 ], [ %44, %89 ]
%85 = load i32*, i32** %7
%86 = zext i32 %84 to i64
%87 = getelementptr inbounds i32, i32* %85, i64 %86
%88 = load i32, i32* %87
br label %186
89: ; preds = %140, %77
%90 = add nuw nsw i64 %79, 1
%91 = add i32 %78, -1
%92 = icmp eq i64 %90, %47
br i1 %92, label %83, label %77
93: ; preds = %140, %81
%94 = phi i64 [ %79, %81 ], [ %141, %140 ]
%95 = phi i64 [ 0, %81 ], [ %120, %140 ]
%96 = add nuw nsw i64 %95, %79
%97 = add nsw i64 %96, -1
%98 = load i32, i32* @INT_MIN
%99 = getelementptr inbounds i32*, i32** %7, i64 %95
%100 = load i32*, i32** %99
%101 = getelementptr inbounds i32, i32* %100, i64 %97
store i32 %98, i32* %101
%102 = add nsw i64 %96, -3
%103 = add nuw i64 %95, 2
%104 = and i64 %103, 4294967295
%105 = getelementptr inbounds i32, i32* %0, i64 %95
%106 = load i32, i32* %105
%107 = icmp sgt i64 %95, %102
br i1 %107, label %114, label %108
108: ; preds = %93
%109 = getelementptr inbounds i32*, i32** %7, i64 %104
%110 = load i32*, i32** %109
%111 = getelementptr inbounds i32, i32* %110, i64 %97
%112 = load i32, i32* %111
%113 = add nsw i32 %112, %106
br label %114
114: ; preds = %93, %108
%115 = phi i32 [ %113, %108 ], [ %106, %93 ]
%116 = icmp slt i32 %98, %115
br i1 %116, label %117, label %118
117: ; preds = %114
store i32 %115, i32* %101
br label %118
118: ; preds = %117, %114
%119 = phi i32 [ %115, %117 ], [ %98, %114 ]
%120 = add nuw nsw i64 %95, 1
%121 = getelementptr inbounds i32, i32* %0, i64 %120
%122 = load i32, i32* %121
%123 = icmp slt i64 %95, %102
br i1 %123, label %124, label %132
124: ; preds = %118
%125 = add nuw i64 %95, 3
%126 = and i64 %125, 4294967295
%127 = getelementptr inbounds i32*, i32** %7, i64 %126
%128 = load i32*, i32** %127
%129 = getelementptr inbounds i32, i32* %128, i64 %97
%130 = load i32, i32* %129
%131 = add nsw i32 %130, %122
br label %132
132: ; preds = %118, %124
%133 = phi i32 [ %131, %124 ], [ %122, %118 ]
%134 = icmp slt i32 %119, %133
br i1 %134, label %135, label %136
135: ; preds = %132
store i32 %133, i32* %101
br label %136
136: ; preds = %135, %132
%137 = phi i32 [ %133, %135 ], [ %119, %132 ]
%138 = add nuw nsw i64 %95, 2
%139 = icmp eq i64 %138, %94
br i1 %139, label %140, label %143
140: ; preds = %182, %136
%141 = add nuw nsw i64 %94, 1
%142 = icmp eq i64 %120, %82
br i1 %142, label %89, label %93
143: ; preds = %136, %182
%144 = phi i32 [ %183, %182 ], [ %137, %136 ]
%145 = phi i64 [ %184, %182 ], [ %138, %136 ]
%146 = getelementptr inbounds i32, i32* %0, i64 %145
%147 = load i32, i32* %146
%148 = icmp ult i64 %145, %104
%149 = icmp sgt i64 %145, %102
%150 = select i1 %148, i1 true, i1 %149
br i1 %150, label %163, label %151
151: ; preds = %143
%152 = add nsw i64 %145, -2
%153 = getelementptr inbounds i32, i32* %100, i64 %152
%154 = load i32, i32* %153
%155 = add nuw i64 %145, 2
%156 = and i64 %155, 4294967295
%157 = getelementptr inbounds i32*, i32** %7, i64 %156
%158 = load i32*, i32** %157
%159 = getelementptr inbounds i32, i32* %158, i64 %97
%160 = load i32, i32* %159
%161 = add i32 %154, %147
%162 = add i32 %161, %160
br label %178
163: ; preds = %143
br i1 %149, label %172, label %164
164: ; preds = %163
%165 = add nuw i64 %145, 2
%166 = and i64 %165, 4294967295
%167 = getelementptr inbounds i32*, i32** %7, i64 %166
%168 = load i32*, i32** %167
%169 = getelementptr inbounds i32, i32* %168, i64 %97
%170 = load i32, i32* %169
%171 = add nsw i32 %170, %147
br label %178
172: ; preds = %163
br i1 %148, label %178, label %173
173: ; preds = %172
%174 = add nsw i64 %145, -2
%175 = getelementptr inbounds i32, i32* %100, i64 %174
%176 = load i32, i32* %175
%177 = add nsw i32 %176, %147
br label %178
178: ; preds = %164, %173, %172, %151
%179 = phi i32 [ %162, %151 ], [ %171, %164 ], [ %177, %173 ], [ %147, %172 ]
%180 = icmp slt i32 %144, %179
br i1 %180, label %181, label %182
181: ; preds = %178
store i32 %179, i32* %101
br label %182
182: ; preds = %181, %178
%183 = phi i32 [ %179, %181 ], [ %144, %178 ]
%184 = add nuw nsw i64 %145, 1
%185 = icmp eq i64 %184, %94
br i1 %185, label %140, label %143
186: ; preds = %2, %83
%187 = phi i32 [ %88, %83 ], [ 0, %2 ]
ret i32 %187
}