#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 omp_get_thread_num();
int /*<<< orphan*/ printf(char *, int, ...);
int main() {
  int a[64], aa[64];
  int b[64], bb[64];
  int c[64], cc[64];
  int d[64], dd[64];
  int e[64], ee[64];
  int i, errors;
  int cond = 0;
  check_offloading();
  for (i = 0; i < 64; i++) {
    a[i] = aa[i] = i + 1;
    b[i] = bb[i] = 2 * i + 1;
  }
#pragma omp target map(tofrom : a, b)
  {
#pragma omp parallel num_threads(64)
    {
      int id = omp_get_thread_num();
      a[id]++;
#pragma omp task firstprivate(id) shared(b)
      {
        ;
        int id = omp_get_thread_num();
        b[id]++;
#pragma omp task firstprivate(id) shared(b)
        {
          ;
          int id = omp_get_thread_num();
          b[id]++;
#pragma omp task firstprivate(id) shared(b)
          {
            ;
            int id = omp_get_thread_num();
            b[id]++;
          }
#pragma omp taskwait
        }
#pragma omp taskwait
      }
    }
  }
  for (i = 0; i < 64; i++) {
    aa[i]++;
    bb[i] += 3;
  }
  errors = 0;
  for (i = 0; i < 64; i++) {
    if (a[i] != aa[i])
      printf("%4i: got a %d, expected %d, error %d\n", i, a[i], aa[i],
             ++errors);
    if (b[i] != bb[i])
      printf("%4i: got b %d, expected %d, error %d\n", i, b[i], bb[i],
             ++errors);
  }
  printf("got %d errors\n", errors);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa30,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0xa1c(%rbp)
mov    $0x0,%al
call   1050 <check_offloading@plt>
movl   $0x0,-0xa14(%rbp)
cmpl   $0x40,-0xa14(%rbp)
jge    11cb <main+0x9b>
mov    -0xa14(%rbp),%ecx
add    $0x1,%ecx
movslq -0xa14(%rbp),%rax
mov    %ecx,-0x210(%rbp,%rax,4)
movslq -0xa14(%rbp),%rax
mov    %ecx,-0x110(%rbp,%rax,4)
mov    -0xa14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq -0xa14(%rbp),%rax
mov    %ecx,-0x410(%rbp,%rax,4)
movslq -0xa14(%rbp),%rax
mov    %ecx,-0x310(%rbp,%rax,4)
mov    -0xa14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa14(%rbp)
jmp    115d <main+0x2d>
mov    $0x0,%al
call   1030 <omp_get_thread_num@plt>
mov    %eax,-0xa20(%rbp)
movslq -0xa20(%rbp),%rax
mov    -0x110(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x110(%rbp,%rax,4)
mov    $0x0,%al
call   1030 <omp_get_thread_num@plt>
mov    %eax,-0xa24(%rbp)
movslq -0xa24(%rbp),%rax
mov    -0x310(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x310(%rbp,%rax,4)
mov    $0x0,%al
call   1030 <omp_get_thread_num@plt>
mov    %eax,-0xa28(%rbp)
movslq -0xa28(%rbp),%rax
mov    -0x310(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x310(%rbp,%rax,4)
mov    $0x0,%al
call   1030 <omp_get_thread_num@plt>
mov    %eax,-0xa2c(%rbp)
movslq -0xa2c(%rbp),%rax
mov    -0x310(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x310(%rbp,%rax,4)
movl   $0x0,-0xa14(%rbp)
cmpl   $0x40,-0xa14(%rbp)
jge    12ba <main+0x18a>
movslq -0xa14(%rbp),%rax
mov    -0x210(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x210(%rbp,%rax,4)
movslq -0xa14(%rbp),%rax
mov    -0x410(%rbp,%rax,4),%ecx
add    $0x3,%ecx
mov    %ecx,-0x410(%rbp,%rax,4)
mov    -0xa14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa14(%rbp)
jmp    1269 <main+0x139>
movl   $0x0,-0xa18(%rbp)
movl   $0x0,-0xa14(%rbp)
cmpl   $0x40,-0xa14(%rbp)
jge    13bc <main+0x28c>
movslq -0xa14(%rbp),%rax
mov    -0x110(%rbp,%rax,4),%eax
movslq -0xa14(%rbp),%rcx
cmp    -0x210(%rbp,%rcx,4),%eax
je     133f <main+0x20f>
mov    -0xa14(%rbp),%esi
movslq -0xa14(%rbp),%rax
mov    -0x110(%rbp,%rax,4),%edx
movslq -0xa14(%rbp),%rax
mov    -0x210(%rbp,%rax,4),%ecx
mov    -0xa18(%rbp),%r8d
add    $0x1,%r8d
mov    %r8d,-0xa18(%rbp)
lea    0xcc8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0xa14(%rbp),%rax
mov    -0x310(%rbp,%rax,4),%eax
movslq -0xa14(%rbp),%rcx
cmp    -0x410(%rbp,%rcx,4),%eax
je     13a3 <main+0x273>
mov    -0xa14(%rbp),%esi
movslq -0xa14(%rbp),%rax
mov    -0x310(%rbp,%rax,4),%edx
movslq -0xa14(%rbp),%rax
mov    -0x410(%rbp,%rax,4),%ecx
mov    -0xa18(%rbp),%r8d
add    $0x1,%r8d
mov    %r8d,-0xa18(%rbp)
lea    0xc8a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    13a8 <main+0x278>
mov    -0xa14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa14(%rbp)
jmp    12ce <main+0x19e>
mov    -0xa18(%rbp),%esi
lea    0xc83(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0xa30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x408,%rsp
xor    %ebx,%ebx
xor    %eax,%eax
call   1050 <check_offloading@plt>
movaps 0xeb3(%rip),%xmm0
movaps 0xebc(%rip),%xmm4
movdqa 0xec4(%rip),%xmm2
pcmpeqd %xmm8,%xmm8
movdqa 0xec6(%rip),%xmm9
movdqa 0xecd(%rip),%xmm10
movdqa 0xed4(%rip),%xmm11
movdqa 0xedc(%rip),%xmm7
movdqa 0xee4(%rip),%xmm3
nopl   0x0(%rax)
movaps %xmm4,%xmm1
shufps $0x88,%xmm0,%xmm1
movaps %xmm1,%xmm5
psubd  %xmm8,%xmm5
movdqa %xmm5,0x100(%rsp,%rbx,4)
movdqa %xmm5,0x300(%rsp,%rbx,4)
movdqa %xmm2,%xmm5
paddd  %xmm2,%xmm5
movdqa %xmm5,%xmm6
por    %xmm9,%xmm6
movdqa %xmm6,(%rsp,%rbx,4)
movdqa %xmm6,0x200(%rsp,%rbx,4)
paddd  %xmm10,%xmm1
movdqa %xmm1,0x110(%rsp,%rbx,4)
movdqa %xmm1,0x310(%rsp,%rbx,4)
paddd  %xmm11,%xmm5
movdqa %xmm5,0x10(%rsp,%rbx,4)
movdqa %xmm5,0x210(%rsp,%rbx,4)
add    $0x8,%rbx
paddq  %xmm7,%xmm4
paddq  %xmm7,%xmm0
paddd  %xmm3,%xmm2
cmp    $0x40,%rbx
jne    1190 <main+0x60>
xor    %eax,%eax
call   1030 <omp_get_thread_num@plt>
cltq
addl   $0x1,0x300(%rsp,%rax,4)
01
xor    %eax,%eax
call   1030 <omp_get_thread_num@plt>
cltq
addl   $0x1,0x200(%rsp,%rax,4)
01
xor    %eax,%eax
call   1030 <omp_get_thread_num@plt>
cltq
addl   $0x1,0x200(%rsp,%rax,4)
01
xor    %eax,%eax
call   1030 <omp_get_thread_num@plt>
cltq
addl   $0x1,0x200(%rsp,%rax,4)
01
pcmpeqd %xmm0,%xmm0
movdqa 0x100(%rsp),%xmm1
movdqa 0x110(%rsp),%xmm2
movdqa 0x120(%rsp),%xmm3
movdqa 0x130(%rsp),%xmm4
psubd  %xmm0,%xmm1
movdqa %xmm1,0x100(%rsp)
movdqa 0xdea(%rip),%xmm1
movdqa (%rsp),%xmm5
paddd  %xmm1,%xmm5
movdqa %xmm5,(%rsp)
psubd  %xmm0,%xmm2
movdqa %xmm2,0x110(%rsp)
movdqa 0x10(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0x10(%rsp)
psubd  %xmm0,%xmm3
movdqa %xmm3,0x120(%rsp)
movdqa 0x20(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0x20(%rsp)
psubd  %xmm0,%xmm4
movdqa %xmm4,0x130(%rsp)
movdqa 0x30(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0x30(%rsp)
movdqa 0x140(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x140(%rsp)
movdqa 0x40(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0x40(%rsp)
movdqa 0x150(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x150(%rsp)
movdqa 0x50(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0x50(%rsp)
movdqa 0x160(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x160(%rsp)
movdqa 0x60(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0x60(%rsp)
movdqa 0x170(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x170(%rsp)
movdqa 0x70(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0x70(%rsp)
movdqa 0x180(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x180(%rsp)
movdqa 0x80(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0x80(%rsp)
movdqa 0x190(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x190(%rsp)
movdqa 0x90(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0x90(%rsp)
movdqa 0x1a0(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x1a0(%rsp)
movdqa 0xa0(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0xa0(%rsp)
movdqa 0x1b0(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x1b0(%rsp)
movdqa 0xb0(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0xb0(%rsp)
movdqa 0x1c0(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x1c0(%rsp)
movdqa 0xc0(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0xc0(%rsp)
movdqa 0x1d0(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x1d0(%rsp)
movdqa 0xd0(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0xd0(%rsp)
movdqa 0x1e0(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x1e0(%rsp)
movdqa 0xe0(%rsp),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,0xe0(%rsp)
movdqa 0x1f0(%rsp),%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,0x1f0(%rsp)
paddd  0xf0(%rsp),%xmm1
movdqa %xmm1,0xf0(%rsp)
lea    0xbc0(%rip),%r14
lea    0xb93(%rip),%r15
xor    %ebx,%ebx
xor    %ebp,%ebp
jmp    151a <main+0x3ea>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rbx
cmp    $0x40,%rbx
je     1560 <main+0x430>
mov    0x300(%rsp,%rbx,4),%edx
mov    0x100(%rsp,%rbx,4),%ecx
cmp    %ecx,%edx
je     153e <main+0x40e>
add    $0x1,%ebp
mov    %r15,%rdi
mov    %ebx,%esi
mov    %ebp,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x200(%rsp,%rbx,4),%edx
mov    (%rsp,%rbx,4),%ecx
cmp    %ecx,%edx
je     1510 <main+0x3e0>
add    $0x1,%ebp
mov    %r14,%rdi
mov    %ebx,%esi
mov    %ebp,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1510 <main+0x3e0>
lea    0xb75(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x408,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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