int main() {
  double array[100];
  int i, j;
  for (i = 0; i < 100; i++) {
    array[i] = (double)i;
  }
  double sum = 0;
#pragma acc parallel loop reduction(+ : sum)
  for (i = 0; i < 100; i++) {
    sum += array[i];
  }
  if (sum != 4950.0)
    return 1;
  sum = 0;
#pragma acc parallel loop reduction(+ : sum) copy(sum)
  for (i = 0; i < 100; i++) {
    sum += array[i];
  }
  if (sum != 4950.0)
    return 2;
  sum = 0;
#pragma acc data copy(sum)
  {
#pragma acc parallel loop reduction(+ : sum)
    for (i = 0; i < 50; i++) {
      sum += array[i];
    }
  }
  if (sum != 1225.0)
    return 3;
  sum = 100;
#pragma acc data copy(sum)
  {
#pragma acc parallel loop reduction(+ : sum)
    for (i = 50; i < 100; i++) {
      sum += array[i];
    }
  }
  if (sum != 3825.0)
    return 4;
  sum = 50;
#pragma acc parallel loop reduction(+ : sum) vector_length(32)
  for (i = 0; i < 100; i++)
    sum += array[i];
  if (sum != 5000.0)
    return 5;
  sum = 50;
#pragma acc parallel loop reduction(+ : sum) vector_length(512)
  for (i = 0; i < 100; i++)
    sum += array[i];
  if (sum != 5000.0)
    return 6;
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2c0,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x334(%rbp)
cmpl   $0x64,-0x334(%rbp)
jge    1155 <main+0x55>
cvtsi2sdl -0x334(%rbp),%xmm0
ff
movslq -0x334(%rbp),%rax
movsd  %xmm0,-0x330(%rbp,%rax,8)
ff ff
mov    -0x334(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x334(%rbp)
jmp    111c <main+0x1c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x340(%rbp)
ff
movl   $0x0,-0x334(%rbp)
cmpl   $0x64,-0x334(%rbp)
jge    11ab <main+0xab>
movslq -0x334(%rbp),%rax
movsd  -0x330(%rbp,%rax,8),%xmm0
ff ff
addsd  -0x340(%rbp),%xmm0
ff
movsd  %xmm0,-0x340(%rbp)
ff
mov    -0x334(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x334(%rbp)
jmp    116a <main+0x6a>
movsd  -0x340(%rbp),%xmm0
ff
movsd  0xe45(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11d0 <main+0xd0>
jp     11d0 <main+0xd0>
jmp    11dc <main+0xdc>
movl   $0x1,-0x4(%rbp)
jmp    1495 <main+0x395>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x340(%rbp)
ff
movl   $0x0,-0x334(%rbp)
cmpl   $0x64,-0x334(%rbp)
jge    1232 <main+0x132>
movslq -0x334(%rbp),%rax
movsd  -0x330(%rbp,%rax,8),%xmm0
ff ff
addsd  -0x340(%rbp),%xmm0
ff
movsd  %xmm0,-0x340(%rbp)
ff
mov    -0x334(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x334(%rbp)
jmp    11f1 <main+0xf1>
movsd  -0x340(%rbp),%xmm0
ff
movsd  0xdbe(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1257 <main+0x157>
jp     1257 <main+0x157>
jmp    1263 <main+0x163>
movl   $0x2,-0x4(%rbp)
jmp    1495 <main+0x395>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x340(%rbp)
ff
movl   $0x0,-0x334(%rbp)
cmpl   $0x32,-0x334(%rbp)
jge    12b9 <main+0x1b9>
movslq -0x334(%rbp),%rax
movsd  -0x330(%rbp,%rax,8),%xmm0
ff ff
addsd  -0x340(%rbp),%xmm0
ff
movsd  %xmm0,-0x340(%rbp)
ff
mov    -0x334(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x334(%rbp)
jmp    1278 <main+0x178>
movsd  -0x340(%rbp),%xmm0
ff
movsd  0xd3f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12de <main+0x1de>
jp     12de <main+0x1de>
jmp    12ea <main+0x1ea>
movl   $0x3,-0x4(%rbp)
jmp    1495 <main+0x395>
movsd  0xd1e(%rip),%xmm0
movsd  %xmm0,-0x340(%rbp)
ff
movl   $0x32,-0x334(%rbp)
cmpl   $0x64,-0x334(%rbp)
jge    1345 <main+0x245>
movslq -0x334(%rbp),%rax
movsd  -0x330(%rbp,%rax,8),%xmm0
ff ff
addsd  -0x340(%rbp),%xmm0
ff
movsd  %xmm0,-0x340(%rbp)
ff
mov    -0x334(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x334(%rbp)
jmp    1304 <main+0x204>
movsd  -0x340(%rbp),%xmm0
ff
movsd  0xcc3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    136a <main+0x26a>
jp     136a <main+0x26a>
jmp    1376 <main+0x276>
movl   $0x4,-0x4(%rbp)
jmp    1495 <main+0x395>
movsd  0xca2(%rip),%xmm0
movsd  %xmm0,-0x340(%rbp)
ff
movl   $0x0,-0x334(%rbp)
cmpl   $0x64,-0x334(%rbp)
jge    13d1 <main+0x2d1>
movslq -0x334(%rbp),%rax
movsd  -0x330(%rbp,%rax,8),%xmm0
ff ff
addsd  -0x340(%rbp),%xmm0
ff
movsd  %xmm0,-0x340(%rbp)
ff
mov    -0x334(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x334(%rbp)
jmp    1390 <main+0x290>
movsd  -0x340(%rbp),%xmm0
ff
movsd  0xc47(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    13f6 <main+0x2f6>
jp     13f6 <main+0x2f6>
jmp    1402 <main+0x302>
movl   $0x5,-0x4(%rbp)
jmp    1495 <main+0x395>
movsd  0xc16(%rip),%xmm0
movsd  %xmm0,-0x340(%rbp)
ff
movl   $0x0,-0x334(%rbp)
cmpl   $0x64,-0x334(%rbp)
jge    145d <main+0x35d>
movslq -0x334(%rbp),%rax
movsd  -0x330(%rbp,%rax,8),%xmm0
ff ff
addsd  -0x340(%rbp),%xmm0
ff
movsd  %xmm0,-0x340(%rbp)
ff
mov    -0x334(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x334(%rbp)
jmp    141c <main+0x31c>
movsd  -0x340(%rbp),%xmm0
ff
movsd  0xbbb(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1482 <main+0x382>
jp     1482 <main+0x382>
jmp    148e <main+0x38e>
movl   $0x6,-0x4(%rbp)
jmp    1495 <main+0x395>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x2c0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x2a8,%rsp
movdqa 0xef1(%rip),%xmm0
mov    $0x8,%eax
movdqa 0xef4(%rip),%xmm1
movdqa 0xefc(%rip),%xmm2
movdqa 0xf04(%rip),%xmm3
movdqa 0xf0c(%rip),%xmm4
movdqa 0xf14(%rip),%xmm5
nopl   0x0(%rax)
cvtdq2pd %xmm0,%xmm6
movaps %xmm6,-0xc0(%rsp,%rax,8)
ff
movdqa %xmm0,%xmm6
paddd  %xmm1,%xmm6
cvtdq2pd %xmm6,%xmm6
movaps %xmm6,-0xb0(%rsp,%rax,8)
ff
movdqa %xmm0,%xmm6
paddd  %xmm2,%xmm6
cvtdq2pd %xmm6,%xmm6
movaps %xmm6,-0xa0(%rsp,%rax,8)
ff
movdqa %xmm0,%xmm6
paddd  %xmm3,%xmm6
cvtdq2pd %xmm6,%xmm6
movaps %xmm6,-0x90(%rsp,%rax,8)
ff
movdqa %xmm0,%xmm6
paddd  %xmm4,%xmm6
cvtdq2pd %xmm6,%xmm6
movaps %xmm6,-0x80(%rsp,%rax,8)
paddd  %xmm5,%xmm0
add    $0xa,%rax
cmp    $0x6c,%rax
jne    1140 <main+0x40>
pxor   %xmm0,%xmm0
mov    $0x4,%eax
addsd  -0xa0(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x98(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x90(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x88(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x80(%rsp,%rax,8),%xmm0
add    $0x5,%rax
cmp    $0x68,%rax
jne    11b0 <main+0xb0>
mov    $0x1,%eax
ucomisd 0xe6f(%rip),%xmm0
jne    11f5 <main+0xf5>
jnp    11fd <main+0xfd>
add    $0x2a8,%rsp
ret
xorpd  %xmm0,%xmm0
mov    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
addsd  -0xa0(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x98(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x90(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x88(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x80(%rsp,%rax,8),%xmm0
add    $0x5,%rax
cmp    $0x68,%rax
jne    1210 <main+0x110>
mov    $0x2,%eax
ucomisd 0xe0f(%rip),%xmm0
jne    11f5 <main+0xf5>
jp     11f5 <main+0xf5>
xorpd  %xmm0,%xmm0
mov    $0x4,%eax
xchg   %ax,%ax
addsd  -0xa0(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x98(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x90(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x88(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x80(%rsp,%rax,8),%xmm0
add    $0x5,%rax
cmp    $0x36,%rax
jne    1260 <main+0x160>
mov    $0x3,%eax
ucomisd 0xdc7(%rip),%xmm0
jne    11f5 <main+0xf5>
jp     11f5 <main+0xf5>
movsd  0xdbb(%rip),%xmm0
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
addsd  0x110(%rsp,%rax,8),%xmm0
addsd  0x118(%rsp,%rax,8),%xmm0
addsd  0x120(%rsp,%rax,8),%xmm0
addsd  0x128(%rsp,%rax,8),%xmm0
addsd  0x130(%rsp,%rax,8),%xmm0
add    $0x5,%rax
cmp    $0x32,%rax
jne    12c0 <main+0x1c0>
mov    $0x4,%eax
ucomisd 0xd74(%rip),%xmm0
jne    11f5 <main+0xf5>
jp     11f5 <main+0xf5>
movsd  0xd68(%rip),%xmm0
mov    $0x4,%eax
nopl   (%rax)
addsd  -0xa0(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x98(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x90(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x88(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x80(%rsp,%rax,8),%xmm0
add    $0x5,%rax
cmp    $0x68,%rax
jne    1320 <main+0x220>
mov    $0x5,%eax
ucomisd 0xd27(%rip),%xmm0
jne    11f5 <main+0xf5>
jp     11f5 <main+0xf5>
movsd  0xd0b(%rip),%xmm0
mov    $0x4,%eax
nopw   0x0(%rax,%rax,1)
addsd  -0xa0(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x98(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x90(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x88(%rsp,%rax,8),%xmm0
ff ff
addsd  -0x80(%rsp,%rax,8),%xmm0
add    $0x5,%rax
cmp    $0x68,%rax
jne    1380 <main+0x280>
xor    %eax,%eax
ucomisd 0xcca(%rip),%xmm0
mov    $0x6,%ecx
cmovne %ecx,%eax
cmovp  %ecx,%eax
add    $0x2a8,%rsp
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca [100 x double]
%3 = alloca i32
%4 = alloca i32
%5 = alloca double
store i32 0, i32* %1
store i32 0, i32* %3
br label %6
6: ; preds = %15, %0
%7 = load i32, i32* %3
%8 = icmp slt i32 %7, 100
br i1 %8, label %9, label %18
9: ; preds = %6
%10 = load i32, i32* %3
%11 = sitofp i32 %10 to double
%12 = load i32, i32* %3
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %13
store double %11, double* %14
br label %15
15: ; preds = %9
%16 = load i32, i32* %3
%17 = add nsw i32 %16, 1
store i32 %17, i32* %3
br label %6
18: ; preds = %6
store double 0.000000e+00, double* %5
store i32 0, i32* %3
br label %19
19: ; preds = %29, %18
%20 = load i32, i32* %3
%21 = icmp slt i32 %20, 100
br i1 %21, label %22, label %32
22: ; preds = %19
%23 = load i32, i32* %3
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %24
%26 = load double, double* %25
%27 = load double, double* %5
%28 = fadd double %27, %26
store double %28, double* %5
br label %29
29: ; preds = %22
%30 = load i32, i32* %3
%31 = add nsw i32 %30, 1
store i32 %31, i32* %3
br label %19
32: ; preds = %19
%33 = load double, double* %5
%34 = fcmp une double %33, 4.950000e+03
br i1 %34, label %35, label %36
35: ; preds = %32
store i32 1, i32* %1
br label %127
36: ; preds = %32
store double 0.000000e+00, double* %5
store i32 0, i32* %3
br label %37
37: ; preds = %47, %36
%38 = load i32, i32* %3
%39 = icmp slt i32 %38, 100
br i1 %39, label %40, label %50
40: ; preds = %37
%41 = load i32, i32* %3
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %42
%44 = load double, double* %43
%45 = load double, double* %5
%46 = fadd double %45, %44
store double %46, double* %5
br label %47
47: ; preds = %40
%48 = load i32, i32* %3
%49 = add nsw i32 %48, 1
store i32 %49, i32* %3
br label %37
50: ; preds = %37
%51 = load double, double* %5
%52 = fcmp une double %51, 4.950000e+03
br i1 %52, label %53, label %54
53: ; preds = %50
store i32 2, i32* %1
br label %127
54: ; preds = %50
store double 0.000000e+00, double* %5
store i32 0, i32* %3
br label %55
55: ; preds = %65, %54
%56 = load i32, i32* %3
%57 = icmp slt i32 %56, 50
br i1 %57, label %58, label %68
58: ; preds = %55
%59 = load i32, i32* %3
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %60
%62 = load double, double* %61
%63 = load double, double* %5
%64 = fadd double %63, %62
store double %64, double* %5
br label %65
65: ; preds = %58
%66 = load i32, i32* %3
%67 = add nsw i32 %66, 1
store i32 %67, i32* %3
br label %55
68: ; preds = %55
%69 = load double, double* %5
%70 = fcmp une double %69, 1.225000e+03
br i1 %70, label %71, label %72
71: ; preds = %68
store i32 3, i32* %1
br label %127
72: ; preds = %68
store double 1.000000e+02, double* %5
store i32 50, i32* %3
br label %73
73: ; preds = %83, %72
%74 = load i32, i32* %3
%75 = icmp slt i32 %74, 100
br i1 %75, label %76, label %86
76: ; preds = %73
%77 = load i32, i32* %3
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %78
%80 = load double, double* %79
%81 = load double, double* %5
%82 = fadd double %81, %80
store double %82, double* %5
br label %83
83: ; preds = %76
%84 = load i32, i32* %3
%85 = add nsw i32 %84, 1
store i32 %85, i32* %3
br label %73
86: ; preds = %73
%87 = load double, double* %5
%88 = fcmp une double %87, 3.825000e+03
br i1 %88, label %89, label %90
89: ; preds = %86
store i32 4, i32* %1
br label %127
90: ; preds = %86
store double 5.000000e+01, double* %5
store i32 0, i32* %3
br label %91
91: ; preds = %101, %90
%92 = load i32, i32* %3
%93 = icmp slt i32 %92, 100
br i1 %93, label %94, label %104
94: ; preds = %91
%95 = load i32, i32* %3
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %96
%98 = load double, double* %97
%99 = load double, double* %5
%100 = fadd double %99, %98
store double %100, double* %5
br label %101
101: ; preds = %94
%102 = load i32, i32* %3
%103 = add nsw i32 %102, 1
store i32 %103, i32* %3
br label %91
104: ; preds = %91
%105 = load double, double* %5
%106 = fcmp une double %105, 5.000000e+03
br i1 %106, label %107, label %108
107: ; preds = %104
store i32 5, i32* %1
br label %127
108: ; preds = %104
store double 5.000000e+01, double* %5
store i32 0, i32* %3
br label %109
109: ; preds = %119, %108
%110 = load i32, i32* %3
%111 = icmp slt i32 %110, 100
br i1 %111, label %112, label %122
112: ; preds = %109
%113 = load i32, i32* %3
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %114
%116 = load double, double* %115
%117 = load double, double* %5
%118 = fadd double %117, %116
store double %118, double* %5
br label %119
119: ; preds = %112
%120 = load i32, i32* %3
%121 = add nsw i32 %120, 1
store i32 %121, i32* %3
br label %109
122: ; preds = %109
%123 = load double, double* %5
%124 = fcmp une double %123, 5.000000e+03
br i1 %124, label %125, label %126
125: ; preds = %122
store i32 6, i32* %1
br label %127
126: ; preds = %122
store i32 0, i32* %1
br label %127
127: ; preds = %126, %125, %107, %89, %71, %53, %35
%128 = load i32, i32* %1
ret i32 %128
}

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