int candy(int *ratings, int ratingsSize) {
  int candy[ratingsSize];
  int sum = 0;
  int i;
  if (ratingsSize < 2) {
    return ratingsSize;
  }
  for (i = 0; i < ratingsSize; i++) {
    candy[i] = 1;
  }
  for (i = 1; i < ratingsSize; i++) {
    if (ratings[i] > ratings[i - 1]) {
      if (candy[i] <= candy[i - 1]) {
        candy[i] = candy[i - 1] + 1;
      }
    }
  }
  for (i = ratingsSize - 2; i >= 0; i--) {
    if (ratings[i] > ratings[i + 1]) {
      if (candy[i] <= candy[i + 1]) {
        candy[i] = candy[i + 1] + 1;
      }
    }
  }
  for (i = 0; i < ratingsSize; i++) {
    sum += candy[i];
  }
  return sum;
}


x86 assembly (clang, -O0):
<candy>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x20(%rbp)
lea    0xf(,%rax,4),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x40(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpl   $0x2,-0x14(%rbp)
jge    1159 <candy+0x59>
mov    -0x14(%rbp),%eax
mov    %eax,-0x4(%rbp)
movl   $0x1,-0x34(%rbp)
jmp    12ce <candy+0x1ce>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1189 <candy+0x89>
mov    -0x40(%rbp),%rax
movslq -0x30(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1160 <candy+0x60>
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    120c <candy+0x10c>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
mov    -0x30(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jle    11f9 <candy+0xf9>
mov    -0x40(%rbp),%rcx
movslq -0x30(%rbp),%rax
mov    (%rcx,%rax,4),%eax
mov    -0x30(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jg     11f4 <candy+0xf4>
mov    -0x40(%rbp),%rax
mov    -0x30(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
add    $0x1,%edx
movslq -0x30(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    11f9 <candy+0xf9>
jmp    11fe <candy+0xfe>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1190 <candy+0x90>
mov    -0x14(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jl     128f <candy+0x18f>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
mov    -0x30(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jle    127c <candy+0x17c>
mov    -0x40(%rbp),%rcx
movslq -0x30(%rbp),%rax
mov    (%rcx,%rax,4),%eax
mov    -0x30(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jg     1277 <candy+0x177>
mov    -0x40(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
add    $0x1,%edx
movslq -0x30(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    127c <candy+0x17c>
jmp    1281 <candy+0x181>
mov    -0x30(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x30(%rbp)
jmp    1215 <candy+0x115>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12c1 <candy+0x1c1>
mov    -0x40(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1296 <candy+0x196>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x4(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<candy>:
push   %rbp
mov    %rsp,%rbp
mov    %esi,%eax
mov    %esi,%r8d
mov    %rsp,%r11
lea    0xf(,%r8,4),%rcx
and    $0xfffffffffffffff0,%rcx
sub    %rcx,%r11
mov    %r11,%rsp
cmp    $0x2,%esi
jl     143d <candy+0x33d>
cmp    $0x8,%eax
jae    1133 <candy+0x33>
xor    %esi,%esi
jmp    1240 <candy+0x140>
mov    %r8d,%esi
and    $0xfffffff8,%esi
lea    -0x8(%rsi),%rdx
mov    %rdx,%rcx
shr    $0x3,%rcx
add    $0x1,%rcx
mov    %ecx,%r9d
and    $0x7,%r9d
cmp    $0x38,%rdx
jae    115c <candy+0x5c>
xor    %edx,%edx
jmp    1205 <candy+0x105>
and    $0xfffffffffffffff8,%rcx
xor    %edx,%edx
movdqa 0xe96(%rip),%xmm0
nopw   0x0(%rax,%rax,1)
movdqa %xmm0,(%r11,%rdx,4)
movdqa %xmm0,0x10(%r11,%rdx,4)
movdqa %xmm0,0x20(%r11,%rdx,4)
movdqa %xmm0,0x30(%r11,%rdx,4)
movdqa %xmm0,0x40(%r11,%rdx,4)
movdqa %xmm0,0x50(%r11,%rdx,4)
movdqa %xmm0,0x60(%r11,%rdx,4)
movdqa %xmm0,0x70(%r11,%rdx,4)
movdqa %xmm0,0x80(%r11,%rdx,4)
movdqa %xmm0,0x90(%r11,%rdx,4)
movdqa %xmm0,0xa0(%r11,%rdx,4)
movdqa %xmm0,0xb0(%r11,%rdx,4)
movdqa %xmm0,0xc0(%r11,%rdx,4)
movdqa %xmm0,0xd0(%r11,%rdx,4)
movdqa %xmm0,0xe0(%r11,%rdx,4)
movdqa %xmm0,0xf0(%r11,%rdx,4)
add    $0x40,%rdx
add    $0xfffffffffffffff8,%rcx
jne    1170 <candy+0x70>
test   %r9,%r9
je     1234 <candy+0x134>
lea    (%r11,%rdx,4),%rcx
add    $0x10,%rcx
shl    $0x5,%r9
xor    %edx,%edx
movdqa 0xde0(%rip),%xmm0
movdqa %xmm0,-0x10(%rcx,%rdx,1)
movdqa %xmm0,(%rcx,%rdx,1)
add    $0x20,%rdx
cmp    %rdx,%r9
jne    1220 <candy+0x120>
cmp    %r8,%rsi
je     1251 <candy+0x151>
nopl   0x0(%rax)
movl   $0x1,(%r11,%rsi,4)
add    $0x1,%rsi
cmp    %rsi,%r8
jne    1240 <candy+0x140>
cmp    $0x2,%eax
jl     12c4 <candy+0x1c4>
mov    (%rdi),%ecx
lea    -0x1(%r8),%r9
mov    $0x1,%esi
cmp    $0x2,%eax
jne    130c <candy+0x20c>
test   $0x1,%r9b
je     1287 <candy+0x187>
cmp    %ecx,(%rdi,%rsi,4)
jle    1287 <candy+0x187>
mov    -0x4(%r11,%rsi,4),%ecx
cmp    %ecx,(%r11,%rsi,4)
jg     1287 <candy+0x187>
add    $0x1,%ecx
mov    %ecx,(%r11,%rsi,4)
cmp    $0x2,%eax
jl     12c4 <candy+0x1c4>
lea    -0x2(%rax),%ecx
add    $0x1,%rcx
jmp    12a6 <candy+0x1a6>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0xffffffffffffffff,%rcx
jle    12c4 <candy+0x1c4>
mov    -0x4(%rdi,%rcx,4),%edx
cmp    (%rdi,%rcx,4),%edx
jle    12a0 <candy+0x1a0>
mov    (%r11,%rcx,4),%edx
cmp    %edx,-0x4(%r11,%rcx,4)
jg     12a0 <candy+0x1a0>
add    $0x1,%edx
mov    %edx,-0x4(%r11,%rcx,4)
jmp    12a0 <candy+0x1a0>
test   %eax,%eax
jle    12d6 <candy+0x1d6>
cmp    $0x8,%eax
jae    12dd <candy+0x1dd>
xor    %esi,%esi
xor    %eax,%eax
jmp    1430 <candy+0x330>
xor    %eax,%eax
jmp    143d <candy+0x33d>
mov    %r8d,%esi
and    $0xfffffff8,%esi
lea    -0x8(%rsi),%rcx
mov    %rcx,%rdi
shr    $0x3,%rdi
add    $0x1,%rdi
mov    %edi,%eax
and    $0x3,%eax
cmp    $0x18,%rcx
jae    136c <candy+0x26c>
pxor   %xmm0,%xmm0
xor    %ecx,%ecx
pxor   %xmm1,%xmm1
jmp    13d1 <candy+0x2d1>
mov    %r9,%r10
and    $0xfffffffffffffffe,%r10
neg    %r10
mov    $0x1,%esi
jmp    1336 <candy+0x236>
nopl   (%rax)
lea    (%r10,%rsi,1),%rdx
add    $0x2,%rdx
add    $0x2,%rsi
cmp    $0x1,%rdx
je     126a <candy+0x16a>
mov    (%rdi,%rsi,4),%edx
cmp    %ecx,%edx
jle    134f <candy+0x24f>
mov    -0x4(%r11,%rsi,4),%ecx
cmp    %ecx,(%r11,%rsi,4)
jg     134f <candy+0x24f>
add    $0x1,%ecx
mov    %ecx,(%r11,%rsi,4)
mov    0x4(%rdi,%rsi,4),%ecx
cmp    %edx,%ecx
jle    1320 <candy+0x220>
mov    (%r11,%rsi,4),%edx
cmp    %edx,0x4(%r11,%rsi,4)
jg     1320 <candy+0x220>
add    $0x1,%edx
mov    %edx,0x4(%r11,%rsi,4)
jmp    1320 <candy+0x220>
movabs $0x3ffffffffffffff8,%rcx
ff ff 3f
or     $0x4,%rcx
and    %rcx,%rdi
pxor   %xmm0,%xmm0
xor    %ecx,%ecx
pxor   %xmm1,%xmm1
nopw   0x0(%rax,%rax,1)
paddd  (%r11,%rcx,4),%xmm0
paddd  0x10(%r11,%rcx,4),%xmm1
paddd  0x20(%r11,%rcx,4),%xmm0
paddd  0x30(%r11,%rcx,4),%xmm1
paddd  0x40(%r11,%rcx,4),%xmm0
paddd  0x50(%r11,%rcx,4),%xmm1
paddd  0x60(%r11,%rcx,4),%xmm0
paddd  0x70(%r11,%rcx,4),%xmm1
add    $0x20,%rcx
add    $0xfffffffffffffffc,%rdi
jne    1390 <candy+0x290>
test   %rax,%rax
je     1404 <candy+0x304>
lea    (%r11,%rcx,4),%rcx
add    $0x10,%rcx
shl    $0x5,%rax
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
paddd  -0x10(%rcx,%rdx,1),%xmm0
paddd  (%rcx,%rdx,1),%xmm1
add    $0x20,%rdx
cmp    %rdx,%rax
jne    13f0 <candy+0x2f0>
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
cmp    %r8,%rsi
je     143d <candy+0x33d>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    (%r11,%rsi,4),%eax
add    $0x1,%rsi
cmp    %rsi,%r8
jne    1430 <candy+0x330>
mov    %rbp,%rsp
pop    %rbp
ret

LLVM IR (-O0):
define i32 @candy(i32* %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32*
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i64
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i32* %0, i32** %4
store i32 %1, i32* %5
%11 = load i32, i32* %5
%12 = zext i32 %11 to i64
%13 = call i8* @llvm.stacksave()
store i8* %13, i8** %6
%14 = alloca i32, i64 %12
store i64 %12, i64* %7
store i32 0, i32* %8
%15 = load i32, i32* %5
%16 = icmp slt i32 %15, 2
br i1 %16, label %17, label %19
17: ; preds = %2
%18 = load i32, i32* %5
store i32 %18, i32* %3
store i32 1, i32* %10
br label %137
19: ; preds = %2
store i32 0, i32* %9
br label %20
20: ; preds = %28, %19
%21 = load i32, i32* %9
%22 = load i32, i32* %5
%23 = icmp slt i32 %21, %22
br i1 %23, label %24, label %31
24: ; preds = %20
%25 = load i32, i32* %9
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds i32, i32* %14, i64 %26
store i32 1, i32* %27
br label %28
28: ; preds = %24
%29 = load i32, i32* %9
%30 = add nsw i32 %29, 1
store i32 %30, i32* %9
br label %20
31: ; preds = %20
store i32 1, i32* %9
br label %32
32: ; preds = %72, %31
%33 = load i32, i32* %9
%34 = load i32, i32* %5
%35 = icmp slt i32 %33, %34
br i1 %35, label %36, label %75
36: ; preds = %32
%37 = load i32*, i32** %4
%38 = load i32, i32* %9
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds i32, i32* %37, i64 %39
%41 = load i32, i32* %40
%42 = load i32*, i32** %4
%43 = load i32, i32* %9
%44 = sub nsw i32 %43, 1
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i32, i32* %42, i64 %45
%47 = load i32, i32* %46
%48 = icmp sgt i32 %41, %47
br i1 %48, label %49, label %71
49: ; preds = %36
%50 = load i32, i32* %9
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i32, i32* %14, i64 %51
%53 = load i32, i32* %52
%54 = load i32, i32* %9
%55 = sub nsw i32 %54, 1
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i32, i32* %14, i64 %56
%58 = load i32, i32* %57
%59 = icmp sle i32 %53, %58
br i1 %59, label %60, label %70
60: ; preds = %49
%61 = load i32, i32* %9
%62 = sub nsw i32 %61, 1
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i32, i32* %14, i64 %63
%65 = load i32, i32* %64
%66 = add nsw i32 %65, 1
%67 = load i32, i32* %9
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds i32, i32* %14, i64 %68
store i32 %66, i32* %69
br label %70
70: ; preds = %60, %49
br label %71
71: ; preds = %70, %36
br label %72
72: ; preds = %71
%73 = load i32, i32* %9
%74 = add nsw i32 %73, 1
store i32 %74, i32* %9
br label %32
75: ; preds = %32
%76 = load i32, i32* %5
%77 = sub nsw i32 %76, 2
store i32 %77, i32* %9
br label %78
78: ; preds = %117, %75
%79 = load i32, i32* %9
%80 = icmp sge i32 %79, 0
br i1 %80, label %81, label %120
81: ; preds = %78
%82 = load i32*, i32** %4
%83 = load i32, i32* %9
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds i32, i32* %82, i64 %84
%86 = load i32, i32* %85
%87 = load i32*, i32** %4
%88 = load i32, i32* %9
%89 = add nsw i32 %88, 1
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds i32, i32* %87, i64 %90
%92 = load i32, i32* %91
%93 = icmp sgt i32 %86, %92
br i1 %93, label %94, label %116
94: ; preds = %81
%95 = load i32, i32* %9
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i32, i32* %14, i64 %96
%98 = load i32, i32* %97
%99 = load i32, i32* %9
%100 = add nsw i32 %99, 1
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds i32, i32* %14, i64 %101
%103 = load i32, i32* %102
%104 = icmp sle i32 %98, %103
br i1 %104, label %105, label %115
105: ; preds = %94
%106 = load i32, i32* %9
%107 = add nsw i32 %106, 1
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds i32, i32* %14, i64 %108
%110 = load i32, i32* %109
%111 = add nsw i32 %110, 1
%112 = load i32, i32* %9
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i32, i32* %14, i64 %113
store i32 %111, i32* %114
br label %115
115: ; preds = %105, %94
br label %116
116: ; preds = %115, %81
br label %117
117: ; preds = %116
%118 = load i32, i32* %9
%119 = add nsw i32 %118, -1
store i32 %119, i32* %9
br label %78
120: ; preds = %78
store i32 0, i32* %9
br label %121
121: ; preds = %132, %120
%122 = load i32, i32* %9
%123 = load i32, i32* %5
%124 = icmp slt i32 %122, %123
br i1 %124, label %125, label %135
125: ; preds = %121
%126 = load i32, i32* %9
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds i32, i32* %14, i64 %127
%129 = load i32, i32* %128
%130 = load i32, i32* %8
%131 = add nsw i32 %130, %129
store i32 %131, i32* %8
br label %132
132: ; preds = %125
%133 = load i32, i32* %9
%134 = add nsw i32 %133, 1
store i32 %134, i32* %9
br label %121
135: ; preds = %121
%136 = load i32, i32* %8
store i32 %136, i32* %3
store i32 1, i32* %10
br label %137
137: ; preds = %135, %17
%138 = load i8*, i8** %6
%139 = load i32, i32* %3
ret i32 %139
}

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