#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*/ abort();
int /*<<< orphan*/ gang(int *);
int /*<<< orphan*/ seq(int *);
int /*<<< orphan*/ vector(int *);
int /*<<< orphan*/ worker(int *);
int main(int argc, char **argv) {
  int i;
  int a[32];
  int b[8 * 32];
  i = 0;
  for (i = 0; i < 32; i++)
    a[i] = 0;
#pragma acc parallel copy(a [0:N])
  {
#pragma acc loop seq
    for (i = 0; i < 32; i++)
      seq(&a[0]);
  }
  for (i = 0; i < 32; i++) {
    if (a[i] != 32)
      abort();
  }
#pragma acc parallel copy(a [0:N])
  {
#pragma acc loop seq
    for (i = 0; i < 32; i++)
      gang(&a[0]);
  }
  for (i = 0; i < 32; i++) {
    if (a[i] != 32 + (32 * (-1 * i)))
      abort();
  }
  for (i = 0; i < 32; i++)
    a[i] = i;
#pragma acc parallel copy(b [0:M * N])
  { worker(&b[0]); }
  for (i = 0; i < 32; i++) {
    if (a[i] != i)
      abort();
  }
  for (i = 0; i < 32; i++)
    a[i] = i;
#pragma acc parallel copy(a [0:N])
  {
#pragma acc loop
    for (i = 0; i < 32; i++)
      vector(&a[0]);
  }
  for (i = 0; i < 32; i++) {
    if (a[i] != 0)
      abort();
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x4a0,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    119e <main+0x4e>
movslq -0x14(%rbp),%rax
movl   $0x0,-0xa0(%rbp,%rax,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1177 <main+0x27>
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    11c9 <main+0x79>
lea    -0xa0(%rbp),%rdi
call   1060 <seq@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11a5 <main+0x55>
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    1206 <main+0xb6>
movslq -0x14(%rbp),%rax
cmpl   $0x20,-0xa0(%rbp,%rax,4)
20
je     11f3 <main+0xa3>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    11f8 <main+0xa8>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11d0 <main+0x80>
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    1231 <main+0xe1>
lea    -0xa0(%rbp),%rdi
call   1040 <gang@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    120d <main+0xbd>
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    127c <main+0x12c>
movslq -0x14(%rbp),%rax
mov    -0xa0(%rbp,%rax,4),%eax
imul   $0xffffffff,-0x14(%rbp),%ecx
shl    $0x5,%ecx
add    $0x20,%ecx
cmp    %ecx,%eax
je     1269 <main+0x119>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    126e <main+0x11e>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1238 <main+0xe8>
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    12a9 <main+0x159>
mov    -0x14(%rbp),%ecx
movslq -0x14(%rbp),%rax
mov    %ecx,-0xa0(%rbp,%rax,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1283 <main+0x133>
lea    -0x4a0(%rbp),%rdi
call   1050 <worker@plt>
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    12f4 <main+0x1a4>
movslq -0x14(%rbp),%rax
mov    -0xa0(%rbp,%rax,4),%eax
cmp    -0x14(%rbp),%eax
je     12e1 <main+0x191>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    12e6 <main+0x196>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12bc <main+0x16c>
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    1321 <main+0x1d1>
mov    -0x14(%rbp),%ecx
movslq -0x14(%rbp),%rax
mov    %ecx,-0xa0(%rbp,%rax,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12fb <main+0x1ab>
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    134c <main+0x1fc>
lea    -0xa0(%rbp),%rdi
call   1070 <vector@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1328 <main+0x1d8>
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    1389 <main+0x239>
movslq -0x14(%rbp),%rax
cmpl   $0x0,-0xa0(%rbp,%rax,4)
je     1376 <main+0x226>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    137b <main+0x22b>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1353 <main+0x203>
xor    %eax,%eax
add    $0x4a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x480,%rsp
pxor   %xmm0,%xmm0
movdqa %xmm0,(%rsp)
movdqa %xmm0,0x10(%rsp)
movdqa %xmm0,0x20(%rsp)
movdqa %xmm0,0x30(%rsp)
movdqa %xmm0,0x40(%rsp)
movdqa %xmm0,0x50(%rsp)
movdqa %xmm0,0x60(%rsp)
movdqa %xmm0,0x70(%rsp)
mov    %rsp,%rbx
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
mov    %rbx,%rdi
call   1060 <seq@plt>
cmpl   $0x20,(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x4(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x8(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0xc(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x10(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x14(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x18(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x1c(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x20(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x24(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x28(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x2c(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x30(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x34(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x38(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x3c(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x40(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x44(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x48(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x4c(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x50(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x54(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x58(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x5c(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x60(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x64(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x68(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x6c(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x70(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x74(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x78(%rsp)
jne    1872 <main+0x722>
cmpl   $0x20,0x7c(%rsp)
jne    1872 <main+0x722>
mov    %rsp,%rbx
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
mov    %rbx,%rdi
call   1040 <gang@plt>
lea    0xc(%rsp),%rax
mov    $0x400,%ecx
nopw   0x0(%rax,%rax,1)
lea    -0x3e0(%rcx),%edx
cmp    -0xc(%rax),%edx
jne    1872 <main+0x722>
lea    -0x400(%rcx),%edx
cmp    -0x8(%rax),%edx
jne    1872 <main+0x722>
lea    -0x420(%rcx),%edx
cmp    -0x4(%rax),%edx
jne    1872 <main+0x722>
add    $0xffffffffffffff80,%rcx
lea    -0x3c0(%rcx),%edx
cmp    (%rax),%edx
jne    1872 <main+0x722>
add    $0x10,%rax
test   %rcx,%rcx
jne    1500 <main+0x3b0>
movaps 0xab1(%rip),%xmm0
movaps %xmm0,(%rsp)
movaps 0xab6(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xaba(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xabe(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0xac2(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0xac6(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps 0xaca(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movaps 0xace(%rip),%xmm0
movaps %xmm0,0x70(%rsp)
lea    0x80(%rsp),%rdi
call   1050 <worker@plt>
movdqa 0xab3(%rip),%xmm12
movdqa 0xa9a(%rip),%xmm11
movdqa 0xa81(%rip),%xmm10
movdqa 0xa68(%rip),%xmm9
movdqa 0xa4f(%rip),%xmm8
movdqa 0xa37(%rip),%xmm7
movdqa 0xa1f(%rip),%xmm6
movdqa 0xa07(%rip),%xmm5
movdqa 0x70(%rsp),%xmm0
pcmpeqd %xmm12,%xmm0
pcmpeqd %xmm4,%xmm4
pxor   %xmm4,%xmm0
movdqa 0x60(%rsp),%xmm1
pcmpeqd %xmm11,%xmm1
pxor   %xmm4,%xmm1
packssdw %xmm0,%xmm1
movdqa 0x50(%rsp),%xmm2
pcmpeqd %xmm10,%xmm2
pxor   %xmm4,%xmm2
movdqa 0x40(%rsp),%xmm0
pcmpeqd %xmm9,%xmm0
pxor   %xmm4,%xmm0
packssdw %xmm2,%xmm0
packsswb %xmm1,%xmm0
movdqa 0x30(%rsp),%xmm1
pcmpeqd %xmm8,%xmm1
pxor   %xmm4,%xmm1
movdqa 0x20(%rsp),%xmm2
pcmpeqd %xmm7,%xmm2
pxor   %xmm4,%xmm2
packssdw %xmm1,%xmm2
movdqa 0x10(%rsp),%xmm1
pcmpeqd %xmm6,%xmm1
pxor   %xmm4,%xmm1
movdqa (%rsp),%xmm3
pcmpeqd %xmm5,%xmm3
pxor   %xmm4,%xmm3
packssdw %xmm1,%xmm3
packsswb %xmm2,%xmm3
por    %xmm0,%xmm3
pmovmskb %xmm3,%eax
test   %eax,%eax
jne    1872 <main+0x722>
movdqa %xmm5,(%rsp)
movdqa %xmm6,0x10(%rsp)
movdqa %xmm7,0x20(%rsp)
movdqa %xmm8,0x30(%rsp)
movdqa %xmm9,0x40(%rsp)
movdqa %xmm10,0x50(%rsp)
movdqa %xmm11,0x60(%rsp)
movdqa %xmm12,0x70(%rsp)
mov    %rsp,%rbx
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
mov    %rbx,%rdi
call   1070 <vector@plt>
pxor   %xmm0,%xmm0
movdqa 0x70(%rsp),%xmm1
pcmpeqd %xmm0,%xmm1
pcmpeqd %xmm4,%xmm4
pxor   %xmm4,%xmm1
movdqa 0x60(%rsp),%xmm2
pcmpeqd %xmm0,%xmm2
pxor   %xmm4,%xmm2
packssdw %xmm1,%xmm2
movdqa 0x50(%rsp),%xmm3
pcmpeqd %xmm0,%xmm3
pxor   %xmm4,%xmm3
movdqa 0x40(%rsp),%xmm1
pcmpeqd %xmm0,%xmm1
pxor   %xmm4,%xmm1
packssdw %xmm3,%xmm1
packsswb %xmm2,%xmm1
movdqa 0x30(%rsp),%xmm2
pcmpeqd %xmm0,%xmm2
pxor   %xmm4,%xmm2
movdqa 0x20(%rsp),%xmm3
pcmpeqd %xmm0,%xmm3
pxor   %xmm4,%xmm3
packssdw %xmm2,%xmm3
movdqa 0x10(%rsp),%xmm2
pcmpeqd %xmm0,%xmm2
pxor   %xmm4,%xmm2
pcmpeqd (%rsp),%xmm0
pxor   %xmm4,%xmm0
packssdw %xmm2,%xmm0
packsswb %xmm3,%xmm0
por    %xmm1,%xmm0
pmovmskb %xmm0,%eax
test   %eax,%eax
jne    1872 <main+0x722>
xor    %eax,%eax
add    $0x480,%rsp
pop    %rbx
ret
xor    %eax,%eax
call   1030 <abort@plt>

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

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