#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() {
  check_offloading();
  int fail = 0;
  int error = 0;
  int a[100];
  int b[100];
  a[0] = 0;
#pragma omp target map(tofrom : a[:1])
  {
#pragma omp parallel for
    for (int ii = 0; ii < 100; ++ii)
#pragma omp atomic
      a[0]++;
  }
  int result = a[0];
  int expect = 100;
  if (result != expect) {
    printf("update (implicit) a %d != %d (error %d)\n", result, expect,
           ++error);
    fail = 1;
  }
  if (!fail)
    printf("successful\n");
  else
    fail = 0;
  a[0] = 0;
#pragma omp target map(tofrom : a[:1])
  {
#pragma omp parallel for
    for (int ii = 0; ii < 100; ++ii)
#pragma omp atomic update
      a[0]++;
  }
  result = a[0];
  expect = 100;
  if (result != expect) {
    printf("update (explicit) a %d != %d (error %d)\n", result, expect,
           ++error);
    fail = 1;
  }
  if (!fail)
    printf("successful\n");
  else
    fail = 0;
  a[0] = 0;
  for (int ii = 0; ii < 100; ++ii)
    b[ii] = -1;
#pragma omp target map(tofrom : a[:1], b[:N])
  {
#pragma omp parallel for
    for (int ii = 0; ii < 100; ++ii) {
      int v = 0;
#pragma omp atomic capture
      v = a[0]++;
      b[ii] = v;
    }
  }
  result = a[0];
  expect = 100;
  if (result != expect) {
    printf("capture a %d != %d (error %d)\n", result, expect, ++error);
    fail = 1;
  }
  for (int ii = 0; ii < 100; ++ii) {
    int pass = 0;
    expect = ii;
    for (int jj = 0; jj < 100; ++jj) {
      result = b[jj];
      if (result == expect)
        pass = 1;
    }
    if (!pass) {
      printf("capture b %d not captured (error %d)\n", expect, ++error);
      fail = 1;
    }
  }
  if (!fail)
    printf("successful\n");
  else
    fail = 0;
  for (int ii = 0; ii < 100; ++ii)
    a[ii] = 0;
#pragma omp target map(tofrom : a[:N])
  {
#pragma omp parallel for
    for (int ii = 0; ii < 100; ++ii)
#pragma omp atomic write
      a[ii] = ii;
  }
  for (int ii = 0; ii < 100; ++ii) {
    result = a[ii];
    expect = ii;
    if (result != expect) {
      printf("write a %d != %d (error %d)\n", result, expect, ++error);
      fail = 1;
    }
  }
  if (!fail)
    printf("successful\n");
  else
    fail = 0;
  for (int ii = 0; ii < 100; ++ii) {
    a[ii] = 0;
    b[ii] = ii;
  }
#pragma omp target map(tofrom : a[:N], b[:N])
  {
#pragma omp parallel for
    for (int ii = 0; ii < 100; ++ii)
#pragma omp atomic read
      a[ii] = b[ii];
  }
  for (int ii = 0; ii < 100; ++ii) {
    result = a[ii];
    expect = b[ii];
    if (result != expect) {
      printf("ar a %d != %d (error %d)\n", result, expect, ++error);
      fail = 1;
    }
  }
  if (!fail)
    printf("successful\n");
  else
    fail = 0;
  a[0] = 0;
#pragma omp target map(tofrom : a[:1])
  {
#pragma omp teams num_teams(10) thread_limit(10)
#pragma omp distribute parallel for
    for (int ii = 0; ii < 100; ++ii)
#pragma omp atomic
      a[0]++;
  }
  result = a[0];
  expect = 100;
  if (result != expect) {
    printf("Multi Team a %d != %d (error %d)\n", result, expect, ++error);
    fail = 1;
  }
  if (!fail)
    printf("successful\n");
  else
    fail = 0;
  a[0] = 0;
#pragma omp target map(tofrom : a[:1])
  {
#pragma omp parallel for
    for (int ii = 0; ii < 100; ++ii)
#pragma omp atomic seq_cst
      a[0]++;
  }
  result = a[0];
  expect = 100;
  if (result != expect) {
    printf("Using seq_cst a %d != %d (error %d)\n", result, expect, ++error);
    fail = 1;
  }
  if (!fail)
    printf("successful\n");
  else
    fail = 0;
  printf("done with %d errors\n", error);
  return error;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x380,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x0,%al
call   1040 <check_offloading@plt>
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
movl   $0x0,-0x1a0(%rbp)
movl   $0x0,-0x334(%rbp)
cmpl   $0x64,-0x334(%rbp)
jge    118b <main+0x6b>
mov    -0x1a0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1a0(%rbp)
mov    -0x334(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x334(%rbp)
jmp    115b <main+0x3b>
mov    -0x1a0(%rbp),%eax
mov    %eax,-0x338(%rbp)
movl   $0x64,-0x33c(%rbp)
mov    -0x338(%rbp),%eax
cmp    -0x33c(%rbp),%eax
je     11dd <main+0xbd>
mov    -0x338(%rbp),%esi
mov    -0x33c(%rbp),%edx
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0xc(%rbp)
lea    0xe31(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cmpl   $0x0,-0x8(%rbp)
jne    11fa <main+0xda>
lea    0xe3b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1201 <main+0xe1>
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0x1a0(%rbp)
movl   $0x0,-0x340(%rbp)
cmpl   $0x64,-0x340(%rbp)
jge    1245 <main+0x125>
mov    -0x1a0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1a0(%rbp)
mov    -0x340(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x340(%rbp)
jmp    1215 <main+0xf5>
mov    -0x1a0(%rbp),%eax
mov    %eax,-0x338(%rbp)
movl   $0x64,-0x33c(%rbp)
mov    -0x338(%rbp),%eax
cmp    -0x33c(%rbp),%eax
je     1297 <main+0x177>
mov    -0x338(%rbp),%esi
mov    -0x33c(%rbp),%edx
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0xc(%rbp)
lea    0xdac(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cmpl   $0x0,-0x8(%rbp)
jne    12b4 <main+0x194>
lea    0xd81(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    12bb <main+0x19b>
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0x1a0(%rbp)
movl   $0x0,-0x344(%rbp)
cmpl   $0x64,-0x344(%rbp)
jge    1302 <main+0x1e2>
movslq -0x344(%rbp),%rax
movl   $0xffffffff,-0x330(%rbp,%rax,4)
ff ff ff ff
mov    -0x344(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x344(%rbp)
jmp    12cf <main+0x1af>
movl   $0x0,-0x348(%rbp)
cmpl   $0x64,-0x348(%rbp)
jge    1362 <main+0x242>
movl   $0x0,-0x34c(%rbp)
mov    -0x1a0(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x1a0(%rbp)
mov    %eax,-0x34c(%rbp)
mov    -0x34c(%rbp),%ecx
movslq -0x348(%rbp),%rax
mov    %ecx,-0x330(%rbp,%rax,4)
mov    -0x348(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x348(%rbp)
jmp    130c <main+0x1ec>
mov    -0x1a0(%rbp),%eax
mov    %eax,-0x338(%rbp)
movl   $0x64,-0x33c(%rbp)
mov    -0x338(%rbp),%eax
cmp    -0x33c(%rbp),%eax
je     13b4 <main+0x294>
mov    -0x338(%rbp),%esi
mov    -0x33c(%rbp),%edx
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0xc(%rbp)
lea    0xcb8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
movl   $0x0,-0x350(%rbp)
cmpl   $0x64,-0x350(%rbp)
jge    148b <main+0x36b>
movl   $0x0,-0x354(%rbp)
mov    -0x350(%rbp),%eax
mov    %eax,-0x33c(%rbp)
movl   $0x0,-0x358(%rbp)
cmpl   $0x64,-0x358(%rbp)
jge    1441 <main+0x321>
movslq -0x358(%rbp),%rax
mov    -0x330(%rbp,%rax,4),%eax
mov    %eax,-0x338(%rbp)
mov    -0x338(%rbp),%eax
cmp    -0x33c(%rbp),%eax
jne    1428 <main+0x308>
movl   $0x1,-0x354(%rbp)
jmp    142d <main+0x30d>
mov    -0x358(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x358(%rbp)
jmp    13eb <main+0x2cb>
cmpl   $0x0,-0x354(%rbp)
jne    1472 <main+0x352>
mov    -0x33c(%rbp),%esi
mov    -0xc(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0xc(%rbp)
lea    0xc19(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
jmp    1477 <main+0x357>
mov    -0x350(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x350(%rbp)
jmp    13be <main+0x29e>
cmpl   $0x0,-0x8(%rbp)
jne    14a8 <main+0x388>
lea    0xb8d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    14af <main+0x38f>
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0x35c(%rbp)
cmpl   $0x64,-0x35c(%rbp)
jge    14ec <main+0x3cc>
movslq -0x35c(%rbp),%rax
movl   $0x0,-0x1a0(%rbp,%rax,4)
mov    -0x35c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x35c(%rbp)
jmp    14b9 <main+0x399>
movl   $0x0,-0x360(%rbp)
cmpl   $0x64,-0x360(%rbp)
jge    152b <main+0x40b>
mov    -0x360(%rbp),%ecx
movslq -0x360(%rbp),%rax
mov    %ecx,-0x1a0(%rbp,%rax,4)
mov    -0x360(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x360(%rbp)
jmp    14f6 <main+0x3d6>
movl   $0x0,-0x364(%rbp)
cmpl   $0x64,-0x364(%rbp)
jge    15b7 <main+0x497>
movslq -0x364(%rbp),%rax
mov    -0x1a0(%rbp,%rax,4),%eax
mov    %eax,-0x338(%rbp)
mov    -0x364(%rbp),%eax
mov    %eax,-0x33c(%rbp)
mov    -0x338(%rbp),%eax
cmp    -0x33c(%rbp),%eax
je     159e <main+0x47e>
mov    -0x338(%rbp),%esi
mov    -0x33c(%rbp),%edx
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0xc(%rbp)
lea    0xb13(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
jmp    15a3 <main+0x483>
mov    -0x364(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x364(%rbp)
jmp    1535 <main+0x415>
cmpl   $0x0,-0x8(%rbp)
jne    15d4 <main+0x4b4>
lea    0xa61(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    15db <main+0x4bb>
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0x368(%rbp)
cmpl   $0x64,-0x368(%rbp)
jge    162c <main+0x50c>
movslq -0x368(%rbp),%rax
movl   $0x0,-0x1a0(%rbp,%rax,4)
mov    -0x368(%rbp),%ecx
movslq -0x368(%rbp),%rax
mov    %ecx,-0x330(%rbp,%rax,4)
mov    -0x368(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x368(%rbp)
jmp    15e5 <main+0x4c5>
movl   $0x0,-0x36c(%rbp)
cmpl   $0x64,-0x36c(%rbp)
jge    1673 <main+0x553>
movslq -0x36c(%rbp),%rax
mov    -0x330(%rbp,%rax,4),%ecx
movslq -0x36c(%rbp),%rax
mov    %ecx,-0x1a0(%rbp,%rax,4)
mov    -0x36c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x36c(%rbp)
jmp    1636 <main+0x516>
movl   $0x0,-0x370(%rbp)
cmpl   $0x64,-0x370(%rbp)
jge    1707 <main+0x5e7>
movslq -0x370(%rbp),%rax
mov    -0x1a0(%rbp,%rax,4),%eax
mov    %eax,-0x338(%rbp)
movslq -0x370(%rbp),%rax
mov    -0x330(%rbp,%rax,4),%eax
mov    %eax,-0x33c(%rbp)
mov    -0x338(%rbp),%eax
cmp    -0x33c(%rbp),%eax
je     16ee <main+0x5ce>
mov    -0x338(%rbp),%esi
mov    -0x33c(%rbp),%edx
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0xc(%rbp)
lea    0x9e0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
jmp    16f3 <main+0x5d3>
mov    -0x370(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x370(%rbp)
jmp    167d <main+0x55d>
cmpl   $0x0,-0x8(%rbp)
jne    1724 <main+0x604>
lea    0x911(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    172b <main+0x60b>
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0x1a0(%rbp)
movl   $0x0,-0x374(%rbp)
cmpl   $0x64,-0x374(%rbp)
jge    176f <main+0x64f>
mov    -0x1a0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1a0(%rbp)
mov    -0x374(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x374(%rbp)
jmp    173f <main+0x61f>
mov    -0x1a0(%rbp),%eax
mov    %eax,-0x338(%rbp)
movl   $0x64,-0x33c(%rbp)
mov    -0x338(%rbp),%eax
cmp    -0x33c(%rbp),%eax
je     17c1 <main+0x6a1>
mov    -0x338(%rbp),%esi
mov    -0x33c(%rbp),%edx
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0xc(%rbp)
lea    0x927(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cmpl   $0x0,-0x8(%rbp)
jne    17de <main+0x6be>
lea    0x857(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    17e5 <main+0x6c5>
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0x1a0(%rbp)
movl   $0x0,-0x378(%rbp)
cmpl   $0x64,-0x378(%rbp)
jge    1829 <main+0x709>
mov    -0x1a0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1a0(%rbp)
mov    -0x378(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x378(%rbp)
jmp    17f9 <main+0x6d9>
mov    -0x1a0(%rbp),%eax
mov    %eax,-0x338(%rbp)
movl   $0x64,-0x33c(%rbp)
mov    -0x338(%rbp),%eax
cmp    -0x33c(%rbp),%eax
je     187b <main+0x75b>
mov    -0x338(%rbp),%esi
mov    -0x33c(%rbp),%edx
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0xc(%rbp)
lea    0x88f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cmpl   $0x0,-0x8(%rbp)
jne    1898 <main+0x778>
lea    0x79d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    189f <main+0x77f>
movl   $0x0,-0x8(%rbp)
mov    -0xc(%rbp),%esi
lea    0x878(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x380,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x380,%rsp
xor    %ebx,%ebx
xor    %eax,%eax
call   1070 <check_offloading@plt>
movl   $0x64,0x1f0(%rsp)
lea    0x1088(%rip),%rbp
mov    %rbp,%rdi
call   1030 <puts@plt>
mov    %rbp,%rdi
call   1030 <puts@plt>
mov    %rsp,%rdi
mov    $0x190,%edx
mov    $0xff,%esi
call   1050 <memset@plt>
movaps 0xe5d(%rip),%xmm0
movaps %xmm0,(%rsp)
movaps 0xe62(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xe66(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xe6a(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0xe6e(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0xe72(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movdqa 0xe74(%rip),%xmm8
movdqa %xmm8,0x60(%rsp)
movdqa 0xe74(%rip),%xmm9
movdqa %xmm9,0x70(%rsp)
movdqa 0xe74(%rip),%xmm10
movdqa %xmm10,0x80(%rsp)
movdqa 0xe71(%rip),%xmm11
movdqa %xmm11,0x90(%rsp)
movdqa 0xe6e(%rip),%xmm12
movdqa %xmm12,0xa0(%rsp)
movdqa 0xe6b(%rip),%xmm13
movdqa %xmm13,0xb0(%rsp)
movdqa 0xe68(%rip),%xmm14
movdqa %xmm14,0xc0(%rsp)
movdqa 0xe65(%rip),%xmm15
movdqa %xmm15,0xd0(%rsp)
movaps 0xe64(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xe65(%rip),%xmm0
movaps %xmm0,0xf0(%rsp)
movaps 0xe66(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
movaps 0xe67(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movaps 0xe68(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movaps 0xe69(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
movaps 0xe6a(%rip),%xmm0
movaps %xmm0,0x140(%rsp)
movaps 0xe6b(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movaps 0xe6c(%rip),%xmm0
movaps %xmm0,0x160(%rsp)
movaps 0xe6d(%rip),%xmm0
movaps %xmm0,0x170(%rsp)
movaps 0xe6e(%rip),%xmm0
movaps %xmm0,0x180(%rsp)
mov    $0x1,%r15b
lea    0xe6c(%rip),%r14
xor    %r12d,%r12d
movaps (%rsp),%xmm0
movaps %xmm0,0x1e0(%rsp)
movaps 0x10(%rsp),%xmm0
movaps %xmm0,0x1d0(%rsp)
movaps 0x20(%rsp),%xmm0
movaps %xmm0,0x1c0(%rsp)
movaps 0x30(%rsp),%xmm0
movaps %xmm0,0x1b0(%rsp)
movaps 0x40(%rsp),%xmm0
movaps %xmm0,0x1a0(%rsp)
movaps 0x50(%rsp),%xmm0
movaps %xmm0,0x190(%rsp)
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movd   %ebx,%xmm0
pshufd $0x0,%xmm0,%xmm0
movdqa 0x1e0(%rsp),%xmm2
pcmpeqd %xmm0,%xmm2
movdqa 0x1d0(%rsp),%xmm3
pcmpeqd %xmm0,%xmm3
movdqa 0x1c0(%rsp),%xmm1
pcmpeqd %xmm0,%xmm1
por    %xmm3,%xmm1
por    %xmm2,%xmm1
movdqa 0x1b0(%rsp),%xmm3
pcmpeqd %xmm0,%xmm3
movdqa 0x1a0(%rsp),%xmm4
pcmpeqd %xmm0,%xmm4
movdqa 0x190(%rsp),%xmm5
pcmpeqd %xmm0,%xmm5
movdqa %xmm8,%xmm6
pcmpeqd %xmm0,%xmm6
movdqa %xmm9,%xmm7
pcmpeqd %xmm0,%xmm7
movdqa %xmm10,%xmm2
pcmpeqd %xmm0,%xmm2
por    %xmm7,%xmm2
por    %xmm6,%xmm2
por    %xmm5,%xmm2
por    %xmm4,%xmm2
por    %xmm3,%xmm2
movdqa %xmm11,%xmm4
pcmpeqd %xmm0,%xmm4
movdqa %xmm12,%xmm5
pcmpeqd %xmm0,%xmm5
movdqa %xmm13,%xmm6
pcmpeqd %xmm0,%xmm6
movdqa %xmm14,%xmm7
pcmpeqd %xmm0,%xmm7
movdqa %xmm15,%xmm3
pcmpeqd %xmm0,%xmm3
por    %xmm7,%xmm3
por    %xmm6,%xmm3
por    %xmm5,%xmm3
por    %xmm4,%xmm3
movdqa 0xc8d(%rip),%xmm5
pcmpeqd %xmm0,%xmm5
movdqa 0xc91(%rip),%xmm6
pcmpeqd %xmm0,%xmm6
movdqa 0xc95(%rip),%xmm7
pcmpeqd %xmm0,%xmm7
movdqa 0xc99(%rip),%xmm4
pcmpeqd %xmm0,%xmm4
por    %xmm7,%xmm4
por    %xmm6,%xmm4
por    %xmm5,%xmm4
movdqa 0xc91(%rip),%xmm5
pcmpeqd %xmm0,%xmm5
movdqa 0xc95(%rip),%xmm6
pcmpeqd %xmm0,%xmm6
movdqa 0xc99(%rip),%xmm7
pcmpeqd %xmm0,%xmm7
por    %xmm6,%xmm7
por    %xmm5,%xmm7
movdqa 0xc95(%rip),%xmm5
pcmpeqd %xmm0,%xmm5
movdqa 0xc99(%rip),%xmm6
pcmpeqd %xmm0,%xmm6
por    %xmm5,%xmm6
movdqa 0xc99(%rip),%xmm5
pcmpeqd %xmm0,%xmm5
pcmpeqd 0xc9d(%rip),%xmm0
por    %xmm5,%xmm0
por    %xmm6,%xmm0
por    %xmm7,%xmm0
por    %xmm4,%xmm0
por    %xmm3,%xmm0
por    %xmm2,%xmm0
por    %xmm1,%xmm0
pslld  $0x1f,%xmm0
movmskps %xmm0,%eax
test   %eax,%eax
je     1519 <main+0x3c9>
add    $0x1,%ebx
cmp    $0x64,%ebx
jne    1380 <main+0x230>
jmp    1587 <main+0x437>
add    $0x1,%r12d
xor    %r15d,%r15d
mov    %r14,%rdi
mov    %ebx,%esi
mov    %r12d,%edx
xor    %eax,%eax
call   1040 <printf@plt>
movdqa 0xb98(%rip),%xmm15
movdqa 0xb7f(%rip),%xmm14
movdqa 0xb66(%rip),%xmm13
movdqa 0xb4d(%rip),%xmm12
movdqa 0xb34(%rip),%xmm11
movdqa 0xb1b(%rip),%xmm10
movdqa 0xb02(%rip),%xmm9
movdqa 0xae9(%rip),%xmm8
lea    0x1(%rbx),%eax
cmp    $0x63,%ebx
mov    %eax,%ebx
jne    1380 <main+0x230>
jmp    1599 <main+0x449>
test   $0x1,%r15b
je     1599 <main+0x449>
lea    0xc6e(%rip),%rdi
call   1030 <puts@plt>
lea    0x1f0(%rsp),%rdi
xor    %ebx,%ebx
mov    $0x190,%edx
xor    %esi,%esi
call   1050 <memset@plt>
movaps 0xb19(%rip),%xmm8
movaps 0xb02(%rip),%xmm7
movaps 0xaeb(%rip),%xmm6
movaps 0xad4(%rip),%xmm5
movaps 0xabd(%rip),%xmm4
movaps 0xaa6(%rip),%xmm3
movaps 0xa8f(%rip),%xmm2
movaps 0xa78(%rip),%xmm1
movaps 0xa11(%rip),%xmm0
movaps %xmm0,0x1f0(%rsp)
movaps 0xa12(%rip),%xmm0
movaps %xmm0,0x200(%rsp)
movaps 0xa13(%rip),%xmm0
movaps %xmm0,0x210(%rsp)
movaps 0xa14(%rip),%xmm0
movaps %xmm0,0x220(%rsp)
movaps 0xa15(%rip),%xmm0
movaps %xmm0,0x230(%rsp)
movaps 0xa16(%rip),%xmm0
movaps %xmm0,0x240(%rsp)
movaps %xmm1,0x250(%rsp)
movaps %xmm2,0x260(%rsp)
movaps %xmm3,0x270(%rsp)
movaps %xmm4,0x280(%rsp)
movaps %xmm5,0x290(%rsp)
movaps %xmm6,0x2a0(%rsp)
movaps %xmm7,0x2b0(%rsp)
movaps %xmm8,0x2c0(%rsp)
movaps 0xa56(%rip),%xmm0
movaps %xmm0,0x2d0(%rsp)
movaps 0xa57(%rip),%xmm0
movaps %xmm0,0x2e0(%rsp)
movaps 0xa58(%rip),%xmm0
movaps %xmm0,0x2f0(%rsp)
movaps 0xa59(%rip),%xmm0
movaps %xmm0,0x300(%rsp)
movaps 0xa5a(%rip),%xmm0
movaps %xmm0,0x310(%rsp)
movaps 0xa5b(%rip),%xmm0
movaps %xmm0,0x320(%rsp)
movaps 0xa5c(%rip),%xmm0
movaps %xmm0,0x330(%rsp)
movaps 0xa5d(%rip),%xmm0
movaps %xmm0,0x340(%rsp)
movaps 0xa5e(%rip),%xmm0
movaps %xmm0,0x350(%rsp)
movaps 0xa5f(%rip),%xmm0
movaps %xmm0,0x360(%rsp)
movaps 0xa60(%rip),%xmm0
movaps %xmm0,0x370(%rsp)
mov    $0x1,%bpl
lea    0xa84(%rip),%r14
add    $0x1,%rbx
cs nopw 0x0(%rax,%rax,1)
lea    -0x1(%rbx),%rax
mov    0x1ec(%rsp,%rbx,4),%esi
cmp    %rsi,%rax
jne    1760 <main+0x610>
add    $0x1,%rbx
cmp    $0x65,%rbx
jne    1740 <main+0x5f0>
jmp    17bb <main+0x66b>
nopl   0x0(%rax)
add    $0x1,%r12d
lea    -0x1(%rbx),%edx
xor    %ebp,%ebp
mov    %r14,%rdi
mov    %r12d,%ecx
xor    %eax,%eax
call   1040 <printf@plt>
movaps 0x952(%rip),%xmm8
movaps 0x93b(%rip),%xmm7
movaps 0x924(%rip),%xmm6
movaps 0x90d(%rip),%xmm5
movaps 0x8f6(%rip),%xmm4
movaps 0x8df(%rip),%xmm3
movaps 0x8c8(%rip),%xmm2
movaps 0x8b1(%rip),%xmm1
cmp    $0x64,%rbx
jne    1732 <main+0x5e2>
jmp    1806 <main+0x6b6>
test   $0x1,%bpl
je     1806 <main+0x6b6>
lea    0xa3a(%rip),%rdi
call   1030 <puts@plt>
movaps 0x8fb(%rip),%xmm8
movaps 0x8e4(%rip),%xmm7
movaps 0x8cd(%rip),%xmm6
movaps 0x8b6(%rip),%xmm5
movaps 0x89f(%rip),%xmm4
movaps 0x888(%rip),%xmm3
movaps 0x871(%rip),%xmm2
movaps 0x85a(%rip),%xmm1
movaps 0x7f3(%rip),%xmm0
movaps %xmm0,(%rsp)
movaps 0x7f8(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0x7fc(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0x800(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0x804(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0x808(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps %xmm1,0x60(%rsp)
movaps %xmm2,0x70(%rsp)
movaps %xmm3,0x80(%rsp)
movaps %xmm4,0x90(%rsp)
movaps %xmm5,0xa0(%rsp)
movaps %xmm6,0xb0(%rsp)
movaps %xmm7,0xc0(%rsp)
movaps %xmm8,0xd0(%rsp)
movaps 0x851(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0x852(%rip),%xmm0
movaps %xmm0,0xf0(%rsp)
movaps 0x853(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
movaps 0x854(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movaps 0x855(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movaps 0x856(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
movaps 0x857(%rip),%xmm0
movaps %xmm0,0x140(%rsp)
movaps 0x858(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movaps 0x859(%rip),%xmm0
movaps %xmm0,0x160(%rsp)
movaps 0x85a(%rip),%xmm0
movaps %xmm0,0x170(%rsp)
movaps 0x85b(%rip),%xmm0
movaps %xmm0,0x180(%rsp)
lea    0x1f0(%rsp),%rdi
mov    %rsp,%rsi
mov    $0x190,%edx
call   1060 <memcpy@plt>
mov    $0x1,%bpl
xor    %ebx,%ebx
lea    0x885(%rip),%r14
add    $0x1,%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x1ec(%rsp,%rbx,4),%esi
mov    -0x4(%rsp,%rbx,4),%edx
cmp    %edx,%esi
jne    1980 <main+0x830>
add    $0x1,%rbx
cmp    $0x65,%rbx
jne    1960 <main+0x810>
jmp    199b <main+0x84b>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12d
xor    %ebp,%ebp
mov    %r14,%rdi
mov    %r12d,%ecx
xor    %eax,%eax
call   1040 <printf@plt>
cmp    $0x64,%rbx
jne    194e <main+0x7fe>
jmp    19ad <main+0x85d>
test   $0x1,%bpl
je     19ad <main+0x85d>
lea    0x85a(%rip),%rdi
call   1030 <puts@plt>
lea    0x84e(%rip),%rbx
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x822(%rip),%rdi
mov    %r12d,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r12d,%eax
add    $0x380,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [41 x i8] c"update (implicit) a %d != %d (error %d)\0A\00"
@.str.1 = [12 x i8] c"successful\0A\00"
@.str.2 = [41 x i8] c"update (explicit) a %d != %d (error %d)\0A\00"
@.str.3 = [31 x i8] c"capture a %d != %d (error %d)\0A\00"
@.str.4 = [38 x i8] c"capture b %d not captured (error %d)\0A\00"
@.str.5 = [29 x i8] c"write a %d != %d (error %d)\0A\00"
@.str.6 = [26 x i8] c"ar a %d != %d (error %d)\0A\00"
@.str.7 = [34 x i8] c"Multi Team a %d != %d (error %d)\0A\00"
@.str.8 = [37 x i8] c"Using seq_cst a %d != %d (error %d)\0A\00"
@.str.9 = [21 x i8] c"done with %d errors\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca [100 x i32]
%5 = alloca [100 x i32]
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
store i32 0, i32* %1
%24 = call i32 (...) @check_offloading()
store i32 0, i32* %2
store i32 0, i32* %3
%25 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
store i32 0, i32* %25
store i32 0, i32* %6
br label %26
26: ; preds = %33, %0
%27 = load i32, i32* %6
%28 = icmp slt i32 %27, 100
br i1 %28, label %29, label %36
29: ; preds = %26
%30 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%31 = load i32, i32* %30
%32 = add nsw i32 %31, 1
store i32 %32, i32* %30
br label %33
33: ; preds = %29
%34 = load i32, i32* %6
%35 = add nsw i32 %34, 1
store i32 %35, i32* %6
br label %26
36: ; preds = %26
%37 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%38 = load i32, i32* %37
store i32 %38, i32* %7
store i32 100, i32* %8
%39 = load i32, i32* %7
%40 = load i32, i32* %8
%41 = icmp ne i32 %39, %40
br i1 %41, label %42, label %48
42: ; preds = %36
%43 = load i32, i32* %7
%44 = load i32, i32* %8
%45 = load i32, i32* %3
%46 = add nsw i32 %45, 1
store i32 %46, i32* %3
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str, i64 0, i64 0), i32 %43, i32 %44, i32 %46)
store i32 1, i32* %2
br label %48
48: ; preds = %42, %36
%49 = load i32, i32* %2
%50 = icmp ne i32 %49, 0
br i1 %50, label %53, label %51
51: ; preds = %48
%52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
br label %54
53: ; preds = %48
store i32 0, i32* %2
br label %54
54: ; preds = %53, %51
%55 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
store i32 0, i32* %55
store i32 0, i32* %9
br label %56
56: ; preds = %63, %54
%57 = load i32, i32* %9
%58 = icmp slt i32 %57, 100
br i1 %58, label %59, label %66
59: ; preds = %56
%60 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%61 = load i32, i32* %60
%62 = add nsw i32 %61, 1
store i32 %62, i32* %60
br label %63
63: ; preds = %59
%64 = load i32, i32* %9
%65 = add nsw i32 %64, 1
store i32 %65, i32* %9
br label %56
66: ; preds = %56
%67 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%68 = load i32, i32* %67
store i32 %68, i32* %7
store i32 100, i32* %8
%69 = load i32, i32* %7
%70 = load i32, i32* %8
%71 = icmp ne i32 %69, %70
br i1 %71, label %72, label %78
72: ; preds = %66
%73 = load i32, i32* %7
%74 = load i32, i32* %8
%75 = load i32, i32* %3
%76 = add nsw i32 %75, 1
store i32 %76, i32* %3
%77 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.2, i64 0, i64 0), i32 %73, i32 %74, i32 %76)
store i32 1, i32* %2
br label %78
78: ; preds = %72, %66
%79 = load i32, i32* %2
%80 = icmp ne i32 %79, 0
br i1 %80, label %83, label %81
81: ; preds = %78
%82 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
br label %84
83: ; preds = %78
store i32 0, i32* %2
br label %84
84: ; preds = %83, %81
%85 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
store i32 0, i32* %85
store i32 0, i32* %10
br label %86
86: ; preds = %93, %84
%87 = load i32, i32* %10
%88 = icmp slt i32 %87, 100
br i1 %88, label %89, label %96
89: ; preds = %86
%90 = load i32, i32* %10
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %91
store i32 -1, i32* %92
br label %93
93: ; preds = %89
%94 = load i32, i32* %10
%95 = add nsw i32 %94, 1
store i32 %95, i32* %10
br label %86
96: ; preds = %86
store i32 0, i32* %11
br label %97
97: ; preds = %108, %96
%98 = load i32, i32* %11
%99 = icmp slt i32 %98, 100
br i1 %99, label %100, label %111
100: ; preds = %97
store i32 0, i32* %12
%101 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%102 = load i32, i32* %101
%103 = add nsw i32 %102, 1
store i32 %103, i32* %101
store i32 %102, i32* %12
%104 = load i32, i32* %12
%105 = load i32, i32* %11
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %106
store i32 %104, i32* %107
br label %108
108: ; preds = %100
%109 = load i32, i32* %11
%110 = add nsw i32 %109, 1
store i32 %110, i32* %11
br label %97
111: ; preds = %97
%112 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%113 = load i32, i32* %112
store i32 %113, i32* %7
store i32 100, i32* %8
%114 = load i32, i32* %7
%115 = load i32, i32* %8
%116 = icmp ne i32 %114, %115
br i1 %116, label %117, label %123
117: ; preds = %111
%118 = load i32, i32* %7
%119 = load i32, i32* %8
%120 = load i32, i32* %3
%121 = add nsw i32 %120, 1
store i32 %121, i32* %3
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.3, i64 0, i64 0), i32 %118, i32 %119, i32 %121)
store i32 1, i32* %2
br label %123
123: ; preds = %117, %111
store i32 0, i32* %13
br label %124
124: ; preds = %154, %123
%125 = load i32, i32* %13
%126 = icmp slt i32 %125, 100
br i1 %126, label %127, label %157
127: ; preds = %124
store i32 0, i32* %14
%128 = load i32, i32* %13
store i32 %128, i32* %8
store i32 0, i32* %15
br label %129
129: ; preds = %142, %127
%130 = load i32, i32* %15
%131 = icmp slt i32 %130, 100
br i1 %131, label %132, label %145
132: ; preds = %129
%133 = load i32, i32* %15
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %134
%136 = load i32, i32* %135
store i32 %136, i32* %7
%137 = load i32, i32* %7
%138 = load i32, i32* %8
%139 = icmp eq i32 %137, %138
br i1 %139, label %140, label %141
140: ; preds = %132
store i32 1, i32* %14
br label %141
141: ; preds = %140, %132
br label %142
142: ; preds = %141
%143 = load i32, i32* %15
%144 = add nsw i32 %143, 1
store i32 %144, i32* %15
br label %129
145: ; preds = %129
%146 = load i32, i32* %14
%147 = icmp ne i32 %146, 0
br i1 %147, label %153, label %148
148: ; preds = %145
%149 = load i32, i32* %8
%150 = load i32, i32* %3
%151 = add nsw i32 %150, 1
store i32 %151, i32* %3
%152 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.4, i64 0, i64 0), i32 %149, i32 %151)
store i32 1, i32* %2
br label %153
153: ; preds = %148, %145
br label %154
154: ; preds = %153
%155 = load i32, i32* %13
%156 = add nsw i32 %155, 1
store i32 %156, i32* %13
br label %124
157: ; preds = %124
%158 = load i32, i32* %2
%159 = icmp ne i32 %158, 0
br i1 %159, label %162, label %160
160: ; preds = %157
%161 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
br label %163
162: ; preds = %157
store i32 0, i32* %2
br label %163
163: ; preds = %162, %160
store i32 0, i32* %16
br label %164
164: ; preds = %171, %163
%165 = load i32, i32* %16
%166 = icmp slt i32 %165, 100
br i1 %166, label %167, label %174
167: ; preds = %164
%168 = load i32, i32* %16
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 %169
store i32 0, i32* %170
br label %171
171: ; preds = %167
%172 = load i32, i32* %16
%173 = add nsw i32 %172, 1
store i32 %173, i32* %16
br label %164
174: ; preds = %164
store i32 0, i32* %17
br label %175
175: ; preds = %183, %174
%176 = load i32, i32* %17
%177 = icmp slt i32 %176, 100
br i1 %177, label %178, label %186
178: ; preds = %175
%179 = load i32, i32* %17
%180 = load i32, i32* %17
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 %181
store i32 %179, i32* %182
br label %183
183: ; preds = %178
%184 = load i32, i32* %17
%185 = add nsw i32 %184, 1
store i32 %185, i32* %17
br label %175
186: ; preds = %175
store i32 0, i32* %18
br label %187
187: ; preds = %206, %186
%188 = load i32, i32* %18
%189 = icmp slt i32 %188, 100
br i1 %189, label %190, label %209
190: ; preds = %187
%191 = load i32, i32* %18
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 %192
%194 = load i32, i32* %193
store i32 %194, i32* %7
%195 = load i32, i32* %18
store i32 %195, i32* %8
%196 = load i32, i32* %7
%197 = load i32, i32* %8
%198 = icmp ne i32 %196, %197
br i1 %198, label %199, label %205
199: ; preds = %190
%200 = load i32, i32* %7
%201 = load i32, i32* %8
%202 = load i32, i32* %3
%203 = add nsw i32 %202, 1
store i32 %203, i32* %3
%204 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.5, i64 0, i64 0), i32 %200, i32 %201, i32 %203)
store i32 1, i32* %2
br label %205
205: ; preds = %199, %190
br label %206
206: ; preds = %205
%207 = load i32, i32* %18
%208 = add nsw i32 %207, 1
store i32 %208, i32* %18
br label %187
209: ; preds = %187
%210 = load i32, i32* %2
%211 = icmp ne i32 %210, 0
br i1 %211, label %214, label %212
212: ; preds = %209
%213 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
br label %215
214: ; preds = %209
store i32 0, i32* %2
br label %215
215: ; preds = %214, %212
store i32 0, i32* %19
br label %216
216: ; preds = %227, %215
%217 = load i32, i32* %19
%218 = icmp slt i32 %217, 100
br i1 %218, label %219, label %230
219: ; preds = %216
%220 = load i32, i32* %19
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 %221
store i32 0, i32* %222
%223 = load i32, i32* %19
%224 = load i32, i32* %19
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %225
store i32 %223, i32* %226
br label %227
227: ; preds = %219
%228 = load i32, i32* %19
%229 = add nsw i32 %228, 1
store i32 %229, i32* %19
br label %216
230: ; preds = %216
store i32 0, i32* %20
br label %231
231: ; preds = %242, %230
%232 = load i32, i32* %20
%233 = icmp slt i32 %232, 100
br i1 %233, label %234, label %245
234: ; preds = %231
%235 = load i32, i32* %20
%236 = sext i32 %235 to i64
%237 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %236
%238 = load i32, i32* %237
%239 = load i32, i32* %20
%240 = sext i32 %239 to i64
%241 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 %240
store i32 %238, i32* %241
br label %242
242: ; preds = %234
%243 = load i32, i32* %20
%244 = add nsw i32 %243, 1
store i32 %244, i32* %20
br label %231
245: ; preds = %231
store i32 0, i32* %21
br label %246
246: ; preds = %268, %245
%247 = load i32, i32* %21
%248 = icmp slt i32 %247, 100
br i1 %248, label %249, label %271
249: ; preds = %246
%250 = load i32, i32* %21
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 %251
%253 = load i32, i32* %252
store i32 %253, i32* %7
%254 = load i32, i32* %21
%255 = sext i32 %254 to i64
%256 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %255
%257 = load i32, i32* %256
store i32 %257, i32* %8
%258 = load i32, i32* %7
%259 = load i32, i32* %8
%260 = icmp ne i32 %258, %259
br i1 %260, label %261, label %267
261: ; preds = %249
%262 = load i32, i32* %7
%263 = load i32, i32* %8
%264 = load i32, i32* %3
%265 = add nsw i32 %264, 1
store i32 %265, i32* %3
%266 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.6, i64 0, i64 0), i32 %262, i32 %263, i32 %265)
store i32 1, i32* %2
br label %267
267: ; preds = %261, %249
br label %268
268: ; preds = %267
%269 = load i32, i32* %21
%270 = add nsw i32 %269, 1
store i32 %270, i32* %21
br label %246
271: ; preds = %246
%272 = load i32, i32* %2
%273 = icmp ne i32 %272, 0
br i1 %273, label %276, label %274
274: ; preds = %271
%275 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
br label %277
276: ; preds = %271
store i32 0, i32* %2
br label %277
277: ; preds = %276, %274
%278 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
store i32 0, i32* %278
store i32 0, i32* %22
br label %279
279: ; preds = %286, %277
%280 = load i32, i32* %22
%281 = icmp slt i32 %280, 100
br i1 %281, label %282, label %289
282: ; preds = %279
%283 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%284 = load i32, i32* %283
%285 = add nsw i32 %284, 1
store i32 %285, i32* %283
br label %286
286: ; preds = %282
%287 = load i32, i32* %22
%288 = add nsw i32 %287, 1
store i32 %288, i32* %22
br label %279
289: ; preds = %279
%290 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%291 = load i32, i32* %290
store i32 %291, i32* %7
store i32 100, i32* %8
%292 = load i32, i32* %7
%293 = load i32, i32* %8
%294 = icmp ne i32 %292, %293
br i1 %294, label %295, label %301
295: ; preds = %289
%296 = load i32, i32* %7
%297 = load i32, i32* %8
%298 = load i32, i32* %3
%299 = add nsw i32 %298, 1
store i32 %299, i32* %3
%300 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.7, i64 0, i64 0), i32 %296, i32 %297, i32 %299)
store i32 1, i32* %2
br label %301
301: ; preds = %295, %289
%302 = load i32, i32* %2
%303 = icmp ne i32 %302, 0
br i1 %303, label %306, label %304
304: ; preds = %301
%305 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
br label %307
306: ; preds = %301
store i32 0, i32* %2
br label %307
307: ; preds = %306, %304
%308 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
store i32 0, i32* %308
store i32 0, i32* %23
br label %309
309: ; preds = %316, %307
%310 = load i32, i32* %23
%311 = icmp slt i32 %310, 100
br i1 %311, label %312, label %319
312: ; preds = %309
%313 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%314 = load i32, i32* %313
%315 = add nsw i32 %314, 1
store i32 %315, i32* %313
br label %316
316: ; preds = %312
%317 = load i32, i32* %23
%318 = add nsw i32 %317, 1
store i32 %318, i32* %23
br label %309
319: ; preds = %309
%320 = getelementptr inbounds [100 x i32], [100 x i32]* %4, i64 0, i64 0
%321 = load i32, i32* %320
store i32 %321, i32* %7
store i32 100, i32* %8
%322 = load i32, i32* %7
%323 = load i32, i32* %8
%324 = icmp ne i32 %322, %323
br i1 %324, label %325, label %331
325: ; preds = %319
%326 = load i32, i32* %7
%327 = load i32, i32* %8
%328 = load i32, i32* %3
%329 = add nsw i32 %328, 1
store i32 %329, i32* %3
%330 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.8, i64 0, i64 0), i32 %326, i32 %327, i32 %329)
store i32 1, i32* %2
br label %331
331: ; preds = %325, %319
%332 = load i32, i32* %2
%333 = icmp ne i32 %332, 0
br i1 %333, label %336, label %334
334: ; preds = %331
%335 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
br label %337
336: ; preds = %331
store i32 0, i32* %2
br label %337
337: ; preds = %336, %334
%338 = load i32, i32* %3
%339 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.9, i64 0, i64 0), i32 %338)
%340 = load i32, i32* %3
ret i32 %340
}

LLVM IR (-O2):
@.str.4 = [38 x i8] c"capture b %d not captured (error %d)\0A\00"
@.str.5 = [29 x i8] c"write a %d != %d (error %d)\0A\00"
@.str.6 = [26 x i8] c"ar a %d != %d (error %d)\0A\00"
@.str.9 = [21 x i8] c"done with %d errors\0A\00"
@str.15 = [11 x i8] c"successful\00"
define i32 @main() {
%1 = alloca [100 x i32]
%2 = bitcast [100 x i32]* %1 to i8*
%3 = alloca [100 x i32]
%4 = bitcast [100 x i32]* %3 to i8*
%5 = tail call i32 (...) @check_offloading()
%6 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 0
store i32 100, i32* %6
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.15, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.15, i64 0, i64 0))
%9 = bitcast [100 x i32]* %3 to <4 x i32>*
store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32>* %9
%10 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 4
%11 = bitcast i32* %10 to <4 x i32>*
store <4 x i32> <i32 4, i32 5, i32 6, i32 7>, <4 x i32>* %11
%12 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 8
%13 = bitcast i32* %12 to <4 x i32>*
store <4 x i32> <i32 8, i32 9, i32 10, i32 11>, <4 x i32>* %13
%14 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 12
%15 = bitcast i32* %14 to <4 x i32>*
store <4 x i32> <i32 12, i32 13, i32 14, i32 15>, <4 x i32>* %15
%16 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 16
%17 = bitcast i32* %16 to <4 x i32>*
store <4 x i32> <i32 16, i32 17, i32 18, i32 19>, <4 x i32>* %17
%18 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 20
%19 = bitcast i32* %18 to <4 x i32>*
store <4 x i32> <i32 20, i32 21, i32 22, i32 23>, <4 x i32>* %19
%20 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 24
%21 = bitcast i32* %20 to <4 x i32>*
store <4 x i32> <i32 24, i32 25, i32 26, i32 27>, <4 x i32>* %21
%22 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 28
%23 = bitcast i32* %22 to <4 x i32>*
store <4 x i32> <i32 28, i32 29, i32 30, i32 31>, <4 x i32>* %23
%24 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 32
%25 = bitcast i32* %24 to <4 x i32>*
store <4 x i32> <i32 32, i32 33, i32 34, i32 35>, <4 x i32>* %25
%26 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 36
%27 = bitcast i32* %26 to <4 x i32>*
store <4 x i32> <i32 36, i32 37, i32 38, i32 39>, <4 x i32>* %27
%28 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 40
%29 = bitcast i32* %28 to <4 x i32>*
store <4 x i32> <i32 40, i32 41, i32 42, i32 43>, <4 x i32>* %29
%30 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 44
%31 = bitcast i32* %30 to <4 x i32>*
store <4 x i32> <i32 44, i32 45, i32 46, i32 47>, <4 x i32>* %31
%32 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 48
%33 = bitcast i32* %32 to <4 x i32>*
store <4 x i32> <i32 48, i32 49, i32 50, i32 51>, <4 x i32>* %33
%34 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 52
%35 = bitcast i32* %34 to <4 x i32>*
store <4 x i32> <i32 52, i32 53, i32 54, i32 55>, <4 x i32>* %35
%36 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 56
%37 = bitcast i32* %36 to <4 x i32>*
store <4 x i32> <i32 56, i32 57, i32 58, i32 59>, <4 x i32>* %37
%38 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 60
%39 = bitcast i32* %38 to <4 x i32>*
store <4 x i32> <i32 60, i32 61, i32 62, i32 63>, <4 x i32>* %39
%40 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 64
%41 = bitcast i32* %40 to <4 x i32>*
store <4 x i32> <i32 64, i32 65, i32 66, i32 67>, <4 x i32>* %41
%42 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 68
%43 = bitcast i32* %42 to <4 x i32>*
store <4 x i32> <i32 68, i32 69, i32 70, i32 71>, <4 x i32>* %43
%44 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 72
%45 = bitcast i32* %44 to <4 x i32>*
store <4 x i32> <i32 72, i32 73, i32 74, i32 75>, <4 x i32>* %45
%46 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 76
%47 = bitcast i32* %46 to <4 x i32>*
store <4 x i32> <i32 76, i32 77, i32 78, i32 79>, <4 x i32>* %47
%48 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 80
%49 = bitcast i32* %48 to <4 x i32>*
store <4 x i32> <i32 80, i32 81, i32 82, i32 83>, <4 x i32>* %49
%50 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 84
%51 = bitcast i32* %50 to <4 x i32>*
store <4 x i32> <i32 84, i32 85, i32 86, i32 87>, <4 x i32>* %51
%52 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 88
%53 = bitcast i32* %52 to <4 x i32>*
store <4 x i32> <i32 88, i32 89, i32 90, i32 91>, <4 x i32>* %53
%54 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 92
%55 = bitcast i32* %54 to <4 x i32>*
store <4 x i32> <i32 92, i32 93, i32 94, i32 95>, <4 x i32>* %55
%56 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 96
%57 = bitcast i32* %56 to <4 x i32>*
store <4 x i32> <i32 96, i32 97, i32 98, i32 99>, <4 x i32>* %57
%58 = bitcast [100 x i32]* %3 to <4 x i32>*
%59 = load <4 x i32>, <4 x i32>* %58
%60 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 4
%61 = bitcast i32* %60 to <4 x i32>*
%62 = load <4 x i32>, <4 x i32>* %61
%63 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 8
%64 = bitcast i32* %63 to <4 x i32>*
%65 = load <4 x i32>, <4 x i32>* %64
%66 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 12
%67 = bitcast i32* %66 to <4 x i32>*
%68 = load <4 x i32>, <4 x i32>* %67
%69 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 16
%70 = bitcast i32* %69 to <4 x i32>*
%71 = load <4 x i32>, <4 x i32>* %70
%72 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 20
%73 = bitcast i32* %72 to <4 x i32>*
%74 = load <4 x i32>, <4 x i32>* %73
%75 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 24
%76 = bitcast i32* %75 to <4 x i32>*
%77 = load <4 x i32>, <4 x i32>* %76
%78 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 28
%79 = bitcast i32* %78 to <4 x i32>*
%80 = load <4 x i32>, <4 x i32>* %79
%81 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 32
%82 = bitcast i32* %81 to <4 x i32>*
%83 = load <4 x i32>, <4 x i32>* %82
%84 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 36
%85 = bitcast i32* %84 to <4 x i32>*
%86 = load <4 x i32>, <4 x i32>* %85
%87 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 40
%88 = bitcast i32* %87 to <4 x i32>*
%89 = load <4 x i32>, <4 x i32>* %88
%90 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 44
%91 = bitcast i32* %90 to <4 x i32>*
%92 = load <4 x i32>, <4 x i32>* %91
%93 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 48
%94 = bitcast i32* %93 to <4 x i32>*
%95 = load <4 x i32>, <4 x i32>* %94
%96 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 52
%97 = bitcast i32* %96 to <4 x i32>*
%98 = load <4 x i32>, <4 x i32>* %97
%99 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 56
%100 = bitcast i32* %99 to <4 x i32>*
%101 = load <4 x i32>, <4 x i32>* %100
%102 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 60
%103 = bitcast i32* %102 to <4 x i32>*
%104 = load <4 x i32>, <4 x i32>* %103
%105 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 64
%106 = bitcast i32* %105 to <4 x i32>*
%107 = load <4 x i32>, <4 x i32>* %106
%108 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 68
%109 = bitcast i32* %108 to <4 x i32>*
%110 = load <4 x i32>, <4 x i32>* %109
%111 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 72
%112 = bitcast i32* %111 to <4 x i32>*
%113 = load <4 x i32>, <4 x i32>* %112
%114 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 76
%115 = bitcast i32* %114 to <4 x i32>*
%116 = load <4 x i32>, <4 x i32>* %115
%117 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 80
%118 = bitcast i32* %117 to <4 x i32>*
%119 = load <4 x i32>, <4 x i32>* %118
%120 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 84
%121 = bitcast i32* %120 to <4 x i32>*
%122 = load <4 x i32>, <4 x i32>* %121
%123 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 88
%124 = bitcast i32* %123 to <4 x i32>*
%125 = load <4 x i32>, <4 x i32>* %124
%126 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 92
%127 = bitcast i32* %126 to <4 x i32>*
%128 = load <4 x i32>, <4 x i32>* %127
%129 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 96
%130 = bitcast i32* %129 to <4 x i32>*
%131 = load <4 x i32>, <4 x i32>* %130
br label %132
132: ; preds = %0, %195
%133 = phi i32 [ %198, %195 ], [ 0, %0 ]
%134 = phi i32 [ %196, %195 ], [ 0, %0 ]
%135 = phi i1 [ false, %195 ], [ true, %0 ]
br label %136
136: ; preds = %192, %132
%137 = phi i32 [ %193, %192 ], [ %133, %132 ]
%138 = insertelement <4 x i32> poison, i32 %137, i64 0
%139 = shufflevector <4 x i32> %138, <4 x i32> poison, <4 x i32> zeroinitializer
%140 = icmp eq <4 x i32> %59, %139
%141 = icmp eq <4 x i32> %62, %139
%142 = icmp eq <4 x i32> %65, %139
%143 = icmp eq <4 x i32> %68, %139
%144 = icmp eq <4 x i32> %71, %139
%145 = icmp eq <4 x i32> %74, %139
%146 = icmp eq <4 x i32> %77, %139
%147 = icmp eq <4 x i32> %80, %139
%148 = icmp eq <4 x i32> %83, %139
%149 = icmp eq <4 x i32> %86, %139
%150 = icmp eq <4 x i32> %89, %139
%151 = icmp eq <4 x i32> %92, %139
%152 = icmp eq <4 x i32> %95, %139
%153 = icmp eq <4 x i32> %98, %139
%154 = icmp eq <4 x i32> %101, %139
%155 = icmp eq <4 x i32> %104, %139
%156 = icmp eq <4 x i32> %107, %139
%157 = icmp eq <4 x i32> %110, %139
%158 = icmp eq <4 x i32> %113, %139
%159 = icmp eq <4 x i32> %116, %139
%160 = icmp eq <4 x i32> %119, %139
%161 = icmp eq <4 x i32> %122, %139
%162 = icmp eq <4 x i32> %125, %139
%163 = icmp eq <4 x i32> %128, %139
%164 = icmp eq <4 x i32> %131, %139
%165 = select <4 x i1> %164, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %163
%166 = select <4 x i1> %165, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %162
%167 = select <4 x i1> %166, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %161
%168 = select <4 x i1> %167, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %160
%169 = select <4 x i1> %168, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %159
%170 = select <4 x i1> %169, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %158
%171 = select <4 x i1> %170, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %157
%172 = select <4 x i1> %171, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %156
%173 = select <4 x i1> %172, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %155
%174 = select <4 x i1> %173, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %154
%175 = select <4 x i1> %174, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %153
%176 = select <4 x i1> %175, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %152
%177 = select <4 x i1> %176, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %151
%178 = select <4 x i1> %177, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %150
%179 = select <4 x i1> %178, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %149
%180 = select <4 x i1> %179, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %148
%181 = select <4 x i1> %180, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %147
%182 = select <4 x i1> %181, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %146
%183 = select <4 x i1> %182, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %145
%184 = select <4 x i1> %183, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %144
%185 = select <4 x i1> %184, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %143
%186 = select <4 x i1> %185, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %142
%187 = select <4 x i1> %186, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %141
%188 = select <4 x i1> %187, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %140
%189 = bitcast <4 x i1> %188 to i4
%190 = icmp eq i4 %189, 0
br i1 %190, label %195, label %192
191: ; preds = %192
br i1 %135, label %200, label %202
192: ; preds = %136
%193 = add nuw nsw i32 %137, 1
%194 = icmp eq i32 %193, 100
br i1 %194, label %191, label %136
195: ; preds = %136
%196 = add nuw nsw i32 %134, 1
%197 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @.str.4, i64 0, i64 0), i32 %137, i32 %196)
%198 = add nuw nsw i32 %137, 1
%199 = icmp eq i32 %198, 100
br i1 %199, label %202, label %132
200: ; preds = %191
%201 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.15, i64 0, i64 0))
br label %202
202: ; preds = %195, %191, %200
%203 = phi i32 [ %134, %191 ], [ %134, %200 ], [ %196, %195 ]
%204 = bitcast [100 x i32]* %1 to <4 x i32>*
store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32>* %204
%205 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 4
%206 = bitcast i32* %205 to <4 x i32>*
store <4 x i32> <i32 4, i32 5, i32 6, i32 7>, <4 x i32>* %206
%207 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 8
%208 = bitcast i32* %207 to <4 x i32>*
store <4 x i32> <i32 8, i32 9, i32 10, i32 11>, <4 x i32>* %208
%209 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 12
%210 = bitcast i32* %209 to <4 x i32>*
store <4 x i32> <i32 12, i32 13, i32 14, i32 15>, <4 x i32>* %210
%211 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 16
%212 = bitcast i32* %211 to <4 x i32>*
store <4 x i32> <i32 16, i32 17, i32 18, i32 19>, <4 x i32>* %212
%213 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 20
%214 = bitcast i32* %213 to <4 x i32>*
store <4 x i32> <i32 20, i32 21, i32 22, i32 23>, <4 x i32>* %214
%215 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 24
%216 = bitcast i32* %215 to <4 x i32>*
store <4 x i32> <i32 24, i32 25, i32 26, i32 27>, <4 x i32>* %216
%217 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 28
%218 = bitcast i32* %217 to <4 x i32>*
store <4 x i32> <i32 28, i32 29, i32 30, i32 31>, <4 x i32>* %218
%219 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 32
%220 = bitcast i32* %219 to <4 x i32>*
store <4 x i32> <i32 32, i32 33, i32 34, i32 35>, <4 x i32>* %220
%221 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 36
%222 = bitcast i32* %221 to <4 x i32>*
store <4 x i32> <i32 36, i32 37, i32 38, i32 39>, <4 x i32>* %222
%223 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 40
%224 = bitcast i32* %223 to <4 x i32>*
store <4 x i32> <i32 40, i32 41, i32 42, i32 43>, <4 x i32>* %224
%225 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 44
%226 = bitcast i32* %225 to <4 x i32>*
store <4 x i32> <i32 44, i32 45, i32 46, i32 47>, <4 x i32>* %226
%227 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 48
%228 = bitcast i32* %227 to <4 x i32>*
store <4 x i32> <i32 48, i32 49, i32 50, i32 51>, <4 x i32>* %228
%229 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 52
%230 = bitcast i32* %229 to <4 x i32>*
store <4 x i32> <i32 52, i32 53, i32 54, i32 55>, <4 x i32>* %230
%231 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 56
%232 = bitcast i32* %231 to <4 x i32>*
store <4 x i32> <i32 56, i32 57, i32 58, i32 59>, <4 x i32>* %232
%233 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 60
%234 = bitcast i32* %233 to <4 x i32>*
store <4 x i32> <i32 60, i32 61, i32 62, i32 63>, <4 x i32>* %234
%235 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 64
%236 = bitcast i32* %235 to <4 x i32>*
store <4 x i32> <i32 64, i32 65, i32 66, i32 67>, <4 x i32>* %236
%237 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 68
%238 = bitcast i32* %237 to <4 x i32>*
store <4 x i32> <i32 68, i32 69, i32 70, i32 71>, <4 x i32>* %238
%239 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 72
%240 = bitcast i32* %239 to <4 x i32>*
store <4 x i32> <i32 72, i32 73, i32 74, i32 75>, <4 x i32>* %240
%241 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 76
%242 = bitcast i32* %241 to <4 x i32>*
store <4 x i32> <i32 76, i32 77, i32 78, i32 79>, <4 x i32>* %242
%243 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 80
%244 = bitcast i32* %243 to <4 x i32>*
store <4 x i32> <i32 80, i32 81, i32 82, i32 83>, <4 x i32>* %244
%245 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 84
%246 = bitcast i32* %245 to <4 x i32>*
store <4 x i32> <i32 84, i32 85, i32 86, i32 87>, <4 x i32>* %246
%247 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 88
%248 = bitcast i32* %247 to <4 x i32>*
store <4 x i32> <i32 88, i32 89, i32 90, i32 91>, <4 x i32>* %248
%249 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 92
%250 = bitcast i32* %249 to <4 x i32>*
store <4 x i32> <i32 92, i32 93, i32 94, i32 95>, <4 x i32>* %250
%251 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 96
%252 = bitcast i32* %251 to <4 x i32>*
store <4 x i32> <i32 96, i32 97, i32 98, i32 99>, <4 x i32>* %252
br label %253
253: ; preds = %202, %267
%254 = phi i64 [ %271, %267 ], [ 0, %202 ]
%255 = phi i32 [ %268, %267 ], [ %203, %202 ]
%256 = phi i1 [ false, %267 ], [ true, %202 ]
br label %258
257: ; preds = %264
br i1 %256, label %273, label %275
258: ; preds = %253, %264
%259 = phi i64 [ %265, %264 ], [ %254, %253 ]
%260 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 %259
%261 = load i32, i32* %260
%262 = zext i32 %261 to i64
%263 = icmp eq i64 %259, %262
br i1 %263, label %264, label %267
264: ; preds = %258
%265 = add nuw nsw i64 %259, 1
%266 = icmp eq i64 %265, 100
br i1 %266, label %257, label %258
267: ; preds = %258
%268 = add nsw i32 %255, 1
%269 = trunc i64 %259 to i32
%270 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.5, i64 0, i64 0), i32 %261, i32 %269, i32 %268)
%271 = add nuw nsw i64 %259, 1
%272 = icmp eq i64 %271, 100
br i1 %272, label %275, label %253
273: ; preds = %257
%274 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.15, i64 0, i64 0))
br label %275
275: ; preds = %257, %273, %267
%276 = phi i32 [ %255, %257 ], [ %255, %273 ], [ %268, %267 ]
%277 = bitcast [100 x i32]* %3 to <4 x i32>*
store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32>* %277
%278 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 4
%279 = bitcast i32* %278 to <4 x i32>*
store <4 x i32> <i32 4, i32 5, i32 6, i32 7>, <4 x i32>* %279
%280 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 8
%281 = bitcast i32* %280 to <4 x i32>*
store <4 x i32> <i32 8, i32 9, i32 10, i32 11>, <4 x i32>* %281
%282 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 12
%283 = bitcast i32* %282 to <4 x i32>*
store <4 x i32> <i32 12, i32 13, i32 14, i32 15>, <4 x i32>* %283
%284 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 16
%285 = bitcast i32* %284 to <4 x i32>*
store <4 x i32> <i32 16, i32 17, i32 18, i32 19>, <4 x i32>* %285
%286 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 20
%287 = bitcast i32* %286 to <4 x i32>*
store <4 x i32> <i32 20, i32 21, i32 22, i32 23>, <4 x i32>* %287
%288 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 24
%289 = bitcast i32* %288 to <4 x i32>*
store <4 x i32> <i32 24, i32 25, i32 26, i32 27>, <4 x i32>* %289
%290 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 28
%291 = bitcast i32* %290 to <4 x i32>*
store <4 x i32> <i32 28, i32 29, i32 30, i32 31>, <4 x i32>* %291
%292 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 32
%293 = bitcast i32* %292 to <4 x i32>*
store <4 x i32> <i32 32, i32 33, i32 34, i32 35>, <4 x i32>* %293
%294 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 36
%295 = bitcast i32* %294 to <4 x i32>*
store <4 x i32> <i32 36, i32 37, i32 38, i32 39>, <4 x i32>* %295
%296 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 40
%297 = bitcast i32* %296 to <4 x i32>*
store <4 x i32> <i32 40, i32 41, i32 42, i32 43>, <4 x i32>* %297
%298 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 44
%299 = bitcast i32* %298 to <4 x i32>*
store <4 x i32> <i32 44, i32 45, i32 46, i32 47>, <4 x i32>* %299
%300 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 48
%301 = bitcast i32* %300 to <4 x i32>*
store <4 x i32> <i32 48, i32 49, i32 50, i32 51>, <4 x i32>* %301
%302 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 52
%303 = bitcast i32* %302 to <4 x i32>*
store <4 x i32> <i32 52, i32 53, i32 54, i32 55>, <4 x i32>* %303
%304 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 56
%305 = bitcast i32* %304 to <4 x i32>*
store <4 x i32> <i32 56, i32 57, i32 58, i32 59>, <4 x i32>* %305
%306 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 60
%307 = bitcast i32* %306 to <4 x i32>*
store <4 x i32> <i32 60, i32 61, i32 62, i32 63>, <4 x i32>* %307
%308 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 64
%309 = bitcast i32* %308 to <4 x i32>*
store <4 x i32> <i32 64, i32 65, i32 66, i32 67>, <4 x i32>* %309
%310 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 68
%311 = bitcast i32* %310 to <4 x i32>*
store <4 x i32> <i32 68, i32 69, i32 70, i32 71>, <4 x i32>* %311
%312 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 72
%313 = bitcast i32* %312 to <4 x i32>*
store <4 x i32> <i32 72, i32 73, i32 74, i32 75>, <4 x i32>* %313
%314 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 76
%315 = bitcast i32* %314 to <4 x i32>*
store <4 x i32> <i32 76, i32 77, i32 78, i32 79>, <4 x i32>* %315
%316 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 80
%317 = bitcast i32* %316 to <4 x i32>*
store <4 x i32> <i32 80, i32 81, i32 82, i32 83>, <4 x i32>* %317
%318 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 84
%319 = bitcast i32* %318 to <4 x i32>*
store <4 x i32> <i32 84, i32 85, i32 86, i32 87>, <4 x i32>* %319
%320 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 88
%321 = bitcast i32* %320 to <4 x i32>*
store <4 x i32> <i32 88, i32 89, i32 90, i32 91>, <4 x i32>* %321
%322 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 92
%323 = bitcast i32* %322 to <4 x i32>*
store <4 x i32> <i32 92, i32 93, i32 94, i32 95>, <4 x i32>* %323
%324 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 96
%325 = bitcast i32* %324 to <4 x i32>*
store <4 x i32> <i32 96, i32 97, i32 98, i32 99>, <4 x i32>* %325
br label %326
326: ; preds = %341, %275
%327 = phi i64 [ %344, %341 ], [ 0, %275 ]
%328 = phi i32 [ %342, %341 ], [ %276, %275 ]
%329 = phi i1 [ false, %341 ], [ true, %275 ]
br label %331
330: ; preds = %338
br i1 %329, label %346, label %348
331: ; preds = %326, %338
%332 = phi i64 [ %339, %338 ], [ %327, %326 ]
%333 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 %332
%334 = load i32, i32* %333
%335 = getelementptr inbounds [100 x i32], [100 x i32]* %3, i64 0, i64 %332
%336 = load i32, i32* %335
%337 = icmp eq i32 %334, %336
br i1 %337, label %338, label %341
338: ; preds = %331
%339 = add nuw nsw i64 %332, 1
%340 = icmp eq i64 %339, 100
br i1 %340, label %330, label %331
341: ; preds = %331
%342 = add nsw i32 %328, 1
%343 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.6, i64 0, i64 0), i32 %334, i32 %336, i32 %342)
%344 = add nuw nsw i64 %332, 1
%345 = icmp eq i64 %344, 100
br i1 %345, label %348, label %326
346: ; preds = %330
%347 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.15, i64 0, i64 0))
br label %348
348: ; preds = %341, %330, %346
%349 = phi i32 [ %328, %330 ], [ %328, %346 ], [ %342, %341 ]
%350 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.15, i64 0, i64 0))
%351 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.15, i64 0, i64 0))
%352 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.9, i64 0, i64 0), i32 %349)
ret i32 %349
}