#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*/ check_offloading();
int /*<<< orphan*/ printf(char *, ...);
int main(void) {
  check_offloading();
  double A[(992)], B[(992)], C[(992)], D[(992)], E[(992)];
  {
    int i;
    for (i = 0; i < (992); i++) {
      {
        C[i] = 1;
        D[i] = i;
        E[i] = -i;
      }
    }
  };
  int done[1];

#pragma omp parallel if (0)

#pragma omp sections

#pragma omp section

#pragma omp flush(B)

#pragma omp flush(done)

#pragma omp section

#pragma omp flush(done)

#pragma omp flush(B)
  {
    int fail = 0;
    int trial;
    for (int trial = 0; trial < (1) && fail == 0; trial++) {
#pragma omp target teams num_teams(1) thread_limit(1024)
      {{int done = 0;
      for (int i = 0; i < (992); i++) {
        B[i] = -1;
      }
      {
        {
          {
            for (int i = 0; i < (992); i++) {
              B[i] = C[i] + D[i];
            }
            done = 1;
          }
          {
            while (!done) {
            }
            for (int i = 0; i < (992); i++) {
              A[i] = B[i] + D[i] + E[i];
            }
          }
        }
      }
    }
  }
  {
    int i;
    int errorNum = 0;
    for (i = 0; i < (992); i++) {
      if (A[i] != i + 1) {
        printf("Failed at %3d with %s, expected %f, got %f\n", i, "A[i]", i + 1,
               A[i]);
        fail = 1;
        if (errorNum++ > 10)
          break;
      }
    }
  }
}
if (fail) {
  printf("Failed\n");
} else {
  printf("Succeeded\n");
}
}
;
return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x9b40,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x0,%al
call   1040 <check_offloading@plt>
movl   $0x0,-0x9b14(%rbp)
cmpl   $0x3e0,-0x9b14(%rbp)
jge    11b3 <main+0x93>
movslq -0x9b14(%rbp),%rax
movsd  0xea6(%rip),%xmm0
movsd  %xmm0,-0x5d10(%rbp,%rax,8)
ff ff
cvtsi2sdl -0x9b14(%rbp),%xmm0
ff
movslq -0x9b14(%rbp),%rax
movsd  %xmm0,-0x7c10(%rbp,%rax,8)
ff ff
xor    %eax,%eax
sub    -0x9b14(%rbp),%eax
cvtsi2sd %eax,%xmm0
movslq -0x9b14(%rbp),%rax
movsd  %xmm0,-0x9b10(%rbp,%rax,8)
ff ff
mov    -0x9b14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9b14(%rbp)
jmp    1143 <main+0x23>
movl   $0x0,-0x9b1c(%rbp)
movl   $0x0,-0x9b24(%rbp)
xor    %eax,%eax
cmpl   $0x1,-0x9b24(%rbp)
mov    %al,-0x9b3d(%rbp)
jge    11ec <main+0xcc>
cmpl   $0x0,-0x9b1c(%rbp)
sete   %al
mov    %al,-0x9b3d(%rbp)
mov    -0x9b3d(%rbp),%al
test   $0x1,%al
jne    11ff <main+0xdf>
jmp    142d <main+0x30d>
movl   $0x0,-0x9b28(%rbp)
movl   $0x0,-0x9b2c(%rbp)
cmpl   $0x3e0,-0x9b2c(%rbp)
jge    124f <main+0x12f>
movslq -0x9b2c(%rbp),%rax
movsd  0xdce(%rip),%xmm0
movsd  %xmm0,-0x3e10(%rbp,%rax,8)
ff ff
mov    -0x9b2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9b2c(%rbp)
jmp    1213 <main+0xf3>
movl   $0x0,-0x9b30(%rbp)
cmpl   $0x3e0,-0x9b30(%rbp)
jge    12ad <main+0x18d>
movslq -0x9b30(%rbp),%rax
movsd  -0x5d10(%rbp,%rax,8),%xmm0
ff ff
movslq -0x9b30(%rbp),%rax
addsd  -0x7c10(%rbp,%rax,8),%xmm0
ff ff
movslq -0x9b30(%rbp),%rax
movsd  %xmm0,-0x3e10(%rbp,%rax,8)
ff ff
mov    -0x9b30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9b30(%rbp)
jmp    1259 <main+0x139>
movl   $0x1,-0x9b28(%rbp)
cmpl   $0x0,-0x9b28(%rbp)
setne  %al
xor    $0xff,%al
test   $0x1,%al
jne    12d0 <main+0x1b0>
jmp    12d5 <main+0x1b5>
jmp    12b7 <main+0x197>
movl   $0x0,-0x9b34(%rbp)
cmpl   $0x3e0,-0x9b34(%rbp)
jge    1343 <main+0x223>
movslq -0x9b34(%rbp),%rax
movsd  -0x3e10(%rbp,%rax,8),%xmm0
ff ff
movslq -0x9b34(%rbp),%rax
addsd  -0x7c10(%rbp,%rax,8),%xmm0
ff ff
movslq -0x9b34(%rbp),%rax
addsd  -0x9b10(%rbp,%rax,8),%xmm0
ff ff
movslq -0x9b34(%rbp),%rax
movsd  %xmm0,-0x1f10(%rbp,%rax,8)
ff ff
mov    -0x9b34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9b34(%rbp)
jmp    12df <main+0x1bf>
movl   $0x0,-0x9b3c(%rbp)
movl   $0x0,-0x9b38(%rbp)
cmpl   $0x3e0,-0x9b38(%rbp)
jge    1414 <main+0x2f4>
movslq -0x9b38(%rbp),%rax
movsd  -0x1f10(%rbp,%rax,8),%xmm0
ff ff
mov    -0x9b38(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
ucomisd %xmm1,%xmm0
jne    1399 <main+0x279>
jp     1399 <main+0x279>
jmp    13fb <main+0x2db>
mov    -0x9b38(%rbp),%esi
mov    -0x9b38(%rbp),%ecx
add    $0x1,%ecx
movslq -0x9b38(%rbp),%rax
movsd  -0x1f10(%rbp,%rax,8),%xmm0
ff ff
lea    0xc51(%rip),%rdi
lea    0xc76(%rip),%rdx
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0x1,-0x9b1c(%rbp)
mov    -0x9b3c(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x9b3c(%rbp)
cmp    $0xa,%eax
jle    13f6 <main+0x2d6>
jmp    1414 <main+0x2f4>
jmp    13fb <main+0x2db>
jmp    1400 <main+0x2e0>
mov    -0x9b38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9b38(%rbp)
jmp    1357 <main+0x237>
jmp    1419 <main+0x2f9>
mov    -0x9b24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9b24(%rbp)
jmp    11c7 <main+0xa7>
cmpl   $0x0,-0x9b1c(%rbp)
je     144d <main+0x32d>
lea    0xc00(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    145b <main+0x33b>
lea    0xbf5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x9b40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x9b00,%rsp
xor    %eax,%eax
call   1050 <check_offloading@plt>
movdqa 0xeb2(%rip),%xmm0
mov    $0x2,%eax
movdqa 0xeb5(%rip),%xmm1
movapd 0xebd(%rip),%xmm2
movdqa 0xec5(%rip),%xmm3
movdqa 0xecd(%rip),%xmm4
movdqa %xmm0,%xmm5
nopw   0x0(%rax,%rax,1)
movdqa %xmm0,%xmm6
paddd  %xmm1,%xmm6
movapd %xmm2,0x5cf0(%rsp,%rax,8)
cvtdq2pd %xmm0,%xmm7
cvtdq2pd %xmm6,%xmm6
movapd %xmm2,0x5d00(%rsp,%rax,8)
movaps %xmm7,0x1ef0(%rsp,%rax,8)
movdqa %xmm6,0x1f00(%rsp,%rax,8)
pxor   %xmm6,%xmm6
psubd  %xmm5,%xmm6
movdqa %xmm3,%xmm7
psubd  %xmm5,%xmm7
cvtdq2pd %xmm6,%xmm6
cvtdq2pd %xmm7,%xmm7
movaps %xmm6,0x3df0(%rsp,%rax,8)
movaps %xmm7,0x3e00(%rsp,%rax,8)
paddd  %xmm4,%xmm0
paddd  %xmm4,%xmm5
add    $0x4,%rax
cmp    $0x3e2,%rax
jne    1180 <main+0x50>
mov    $0x1e,%eax
movapd 0xe54(%rip),%xmm0
nopl   0x0(%rax)
movapd %xmm0,-0xf0(%rsp,%rax,8)
ff ff
movapd %xmm0,-0xe0(%rsp,%rax,8)
ff ff
movapd %xmm0,-0xd0(%rsp,%rax,8)
ff ff
movapd %xmm0,-0xc0(%rsp,%rax,8)
ff ff
movapd %xmm0,-0xb0(%rsp,%rax,8)
ff ff
movapd %xmm0,-0xa0(%rsp,%rax,8)
ff ff
movapd %xmm0,-0x90(%rsp,%rax,8)
ff ff
movapd %xmm0,-0x80(%rsp,%rax,8)
movapd %xmm0,-0x70(%rsp,%rax,8)
movapd %xmm0,-0x60(%rsp,%rax,8)
movapd %xmm0,-0x50(%rsp,%rax,8)
movapd %xmm0,-0x40(%rsp,%rax,8)
movapd %xmm0,-0x30(%rsp,%rax,8)
movapd %xmm0,-0x20(%rsp,%rax,8)
movapd %xmm0,-0x10(%rsp,%rax,8)
movapd %xmm0,(%rsp,%rax,8)
add    $0x20,%rax
cmp    $0x3fe,%rax
jne    1200 <main+0xd0>
mov    $0x6,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movapd 0x5cd0(%rsp,%rax,8),%xmm0
movapd 0x5ce0(%rsp,%rax,8),%xmm1
movapd 0x5cf0(%rsp,%rax,8),%xmm2
movapd 0x5d00(%rsp,%rax,8),%xmm3
addpd  0x1ed0(%rsp,%rax,8),%xmm0
addpd  0x1ee0(%rsp,%rax,8),%xmm1
movapd %xmm0,-0x30(%rsp,%rax,8)
movapd %xmm1,-0x20(%rsp,%rax,8)
addpd  0x1ef0(%rsp,%rax,8),%xmm2
addpd  0x1f00(%rsp,%rax,8),%xmm3
movapd %xmm2,-0x10(%rsp,%rax,8)
movapd %xmm3,(%rsp,%rax,8)
add    $0x8,%rax
cmp    $0x3e6,%rax
jne    1290 <main+0x160>
mov    $0x6,%eax
movapd -0x30(%rsp,%rax,8),%xmm0
movapd -0x20(%rsp,%rax,8),%xmm1
movapd -0x10(%rsp,%rax,8),%xmm2
movapd (%rsp,%rax,8),%xmm3
addpd  0x1ed0(%rsp,%rax,8),%xmm0
addpd  0x1ee0(%rsp,%rax,8),%xmm1
addpd  0x3dd0(%rsp,%rax,8),%xmm0
addpd  0x3de0(%rsp,%rax,8),%xmm1
movapd %xmm0,0x7bd0(%rsp,%rax,8)
movapd %xmm1,0x7be0(%rsp,%rax,8)
addpd  0x1ef0(%rsp,%rax,8),%xmm2
addpd  0x1f00(%rsp,%rax,8),%xmm3
addpd  0x3df0(%rsp,%rax,8),%xmm2
addpd  0x3e00(%rsp,%rax,8),%xmm3
movapd %xmm2,0x7bf0(%rsp,%rax,8)
movapd %xmm3,0x7c00(%rsp,%rax,8)
add    $0x8,%rax
cmp    $0x3e6,%rax
jne    1300 <main+0x1d0>
xor    %esi,%esi
lea    0xcc4(%rip),%r15
lea    0xce9(%rip),%r12
lea    0xcf1(%rip),%r14
xor    %ebp,%ebp
xor    %eax,%eax
jmp    13c4 <main+0x294>
add    $0x1,%ebp
mov    $0x1,%eax
mov    %rbx,%rsi
cmp    $0x3e0,%rbx
je     13f6 <main+0x2c6>
movsd  0x7c00(%rsp,%rsi,8),%xmm0
lea    0x1(%rsi),%rbx
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
ucomisd %xmm1,%xmm0
jne    13e0 <main+0x2b0>
jnp    13b8 <main+0x288>
mov    %r15,%rdi
mov    %r12,%rdx
mov    %ebx,%ecx
mov    $0x1,%al
call   1040 <printf@plt>
cmp    $0xa,%ebp
jle    13b0 <main+0x280>
jmp    140a <main+0x2da>
test   %eax,%eax
lea    0xc92(%rip),%rax
lea    0xc95(%rip),%r14
cmove  %rax,%r14
mov    %r14,%rdi
call   1030 <puts@plt>
xor    %eax,%eax
add    $0x9b00,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [44 x i8] c"Failed at %3d with %s, expected %f, got %f\0A\00"
@.str.1 = [5 x i8] c"A[i]\00"
@.str.2 = [8 x i8] c"Failed\0A\00"
@.str.3 = [11 x i8] c"Succeeded\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [992 x double]
%3 = alloca [992 x double]
%4 = alloca [992 x double]
%5 = alloca [992 x double]
%6 = alloca [992 x double]
%7 = alloca i32
%8 = alloca [1 x i32]
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
store i32 0, i32* %1
%18 = call i32 (...) @check_offloading()
store i32 0, i32* %7
br label %19
19: ; preds = %37, %0
%20 = load i32, i32* %7
%21 = icmp slt i32 %20, 992
br i1 %21, label %22, label %40
22: ; preds = %19
%23 = load i32, i32* %7
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds [992 x double], [992 x double]* %4, i64 0, i64 %24
store double 1.000000e+00, double* %25
%26 = load i32, i32* %7
%27 = sitofp i32 %26 to double
%28 = load i32, i32* %7
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds [992 x double], [992 x double]* %5, i64 0, i64 %29
store double %27, double* %30
%31 = load i32, i32* %7
%32 = sub nsw i32 0, %31
%33 = sitofp i32 %32 to double
%34 = load i32, i32* %7
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds [992 x double], [992 x double]* %6, i64 0, i64 %35
store double %33, double* %36
br label %37
37: ; preds = %22
%38 = load i32, i32* %7
%39 = add nsw i32 %38, 1
store i32 %39, i32* %7
br label %19
40: ; preds = %19
store i32 0, i32* %9
store i32 0, i32* %11
br label %41
41: ; preds = %143, %40
%42 = load i32, i32* %11
%43 = icmp slt i32 %42, 1
br i1 %43, label %44, label %47
44: ; preds = %41
%45 = load i32, i32* %9
%46 = icmp eq i32 %45, 0
br label %47
47: ; preds = %44, %41
%48 = phi i1 [ false, %41 ], [ %46, %44 ]
br i1 %48, label %49, label %146
49: ; preds = %47
store i32 0, i32* %12
store i32 0, i32* %13
br label %50
50: ; preds = %57, %49
%51 = load i32, i32* %13
%52 = icmp slt i32 %51, 992
br i1 %52, label %53, label %60
53: ; preds = %50
%54 = load i32, i32* %13
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds [992 x double], [992 x double]* %3, i64 0, i64 %55
store double -1.000000e+00, double* %56
br label %57
57: ; preds = %53
%58 = load i32, i32* %13
%59 = add nsw i32 %58, 1
store i32 %59, i32* %13
br label %50
60: ; preds = %50
store i32 0, i32* %14
br label %61
61: ; preds = %77, %60
%62 = load i32, i32* %14
%63 = icmp slt i32 %62, 992
br i1 %63, label %64, label %80
64: ; preds = %61
%65 = load i32, i32* %14
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds [992 x double], [992 x double]* %4, i64 0, i64 %66
%68 = load double, double* %67
%69 = load i32, i32* %14
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [992 x double], [992 x double]* %5, i64 0, i64 %70
%72 = load double, double* %71
%73 = fadd double %68, %72
%74 = load i32, i32* %14
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds [992 x double], [992 x double]* %3, i64 0, i64 %75
store double %73, double* %76
br label %77
77: ; preds = %64
%78 = load i32, i32* %14
%79 = add nsw i32 %78, 1
store i32 %79, i32* %14
br label %61
80: ; preds = %61
store i32 1, i32* %12
br label %81
81: ; preds = %85, %80
%82 = load i32, i32* %12
%83 = icmp ne i32 %82, 0
%84 = xor i1 %83, true
br i1 %84, label %85, label %86
85: ; preds = %81
br label %81
86: ; preds = %81
store i32 0, i32* %15
br label %87
87: ; preds = %108, %86
%88 = load i32, i32* %15
%89 = icmp slt i32 %88, 992
br i1 %89, label %90, label %111
90: ; preds = %87
%91 = load i32, i32* %15
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds [992 x double], [992 x double]* %3, i64 0, i64 %92
%94 = load double, double* %93
%95 = load i32, i32* %15
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [992 x double], [992 x double]* %5, i64 0, i64 %96
%98 = load double, double* %97
%99 = fadd double %94, %98
%100 = load i32, i32* %15
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds [992 x double], [992 x double]* %6, i64 0, i64 %101
%103 = load double, double* %102
%104 = fadd double %99, %103
%105 = load i32, i32* %15
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds [992 x double], [992 x double]* %2, i64 0, i64 %106
store double %104, double* %107
br label %108
108: ; preds = %90
%109 = load i32, i32* %15
%110 = add nsw i32 %109, 1
store i32 %110, i32* %15
br label %87
111: ; preds = %87
store i32 0, i32* %17
store i32 0, i32* %16
br label %112
112: ; preds = %139, %111
%113 = load i32, i32* %16
%114 = icmp slt i32 %113, 992
br i1 %114, label %115, label %142
115: ; preds = %112
%116 = load i32, i32* %16
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds [992 x double], [992 x double]* %2, i64 0, i64 %117
%119 = load double, double* %118
%120 = load i32, i32* %16
%121 = add nsw i32 %120, 1
%122 = sitofp i32 %121 to double
%123 = fcmp une double %119, %122
br i1 %123, label %124, label %138
124: ; preds = %115
%125 = load i32, i32* %16
%126 = load i32, i32* %16
%127 = add nsw i32 %126, 1
%128 = load i32, i32* %16
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds [992 x double], [992 x double]* %2, i64 0, i64 %129
%131 = load double, double* %130
%132 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str, i64 0, i64 0), i32 %125, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 %127, double %131)
store i32 1, i32* %9
%133 = load i32, i32* %17
%134 = add nsw i32 %133, 1
store i32 %134, i32* %17
%135 = icmp sgt i32 %133, 10
br i1 %135, label %136, label %137
136: ; preds = %124
br label %142
137: ; preds = %124
br label %138
138: ; preds = %137, %115
br label %139
139: ; preds = %138
%140 = load i32, i32* %16
%141 = add nsw i32 %140, 1
store i32 %141, i32* %16
br label %112
142: ; preds = %136, %112
br label %143
143: ; preds = %142
%144 = load i32, i32* %11
%145 = add nsw i32 %144, 1
store i32 %145, i32* %11
br label %41
146: ; preds = %47
%147 = load i32, i32* %9
%148 = icmp ne i32 %147, 0
br i1 %148, label %149, label %151
149: ; preds = %146
%150 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %153
151: ; preds = %146
%152 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0))
br label %153
153: ; preds = %151, %149
ret i32 0
}

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