int main() {
  int i;
  int int_red;
  int_red = 100;
#pragma acc parallel
#pragma acc loop reduction(+ : int_red)
  for (i = 0; i < 1000000; i++) {
    int_red += 1;
  }
  if (int_red != 1000100) {
    return 1;
  }
  int_red = 2;
#pragma acc parallel
#pragma acc loop reduction(* : int_red)
  for (i = 0; i < 128; i++) {
    if (i % 8 == 0) {
      int_red *= 2;
    } else {
      int_red *= 1;
    }
  }
  if (int_red != 131072) {
    return 2;
  }
  int_red = 123;
#pragma acc parallel
#pragma acc loop reduction(max : int_red)
  for (i = 0; i < 1000000; i++) {
    if (int_red < i) {
      int_red = i;
    }
  }
  if (int_red != 999999) {
    return 3;
  }
  int_red = 33333;
#pragma acc parallel
#pragma acc loop reduction(min : int_red)
  for (i = 0; i < 1000000; i++) {
    if (int_red > i - 2) {
      int_red = i - 2;
    }
  }
  if (int_red != -2) {
    return 4;
  }
  int_red = 123456789;
#pragma acc parallel
#pragma acc loop reduction(& : int_red)
  for (i = 0; i < 1000000; i++) {
    int_red &= ((i << 5) + 21);
  }
  if (int_red != 21) {
    return 5;
  }
  int_red = 1065536;
#pragma acc parallel
#pragma acc loop reduction(| : int_red)
  for (i = 0; i < 1000000; i++) {
    int_red |= i;
  }
  if (int_red != 2097151) {
    return 6;
  }
  int_red = 123456;
#pragma acc parallel
#pragma acc loop reduction(^ : int_red)
  for (i = 0; i < 1000000; i++) {
    int_red ^= i + 1;
  }
  if (int_red != 958464) {
    return 7;
  }
  int_red = 0;
#pragma acc parallel
#pragma acc loop reduction(&& : int_red)
  for (i = 0; i < 1000000; i++) {
    int_red = int_red && 1;
  }
  if (int_red) {
    return 8;
  }
  int_red = 1;
#pragma acc parallel
#pragma acc loop reduction(|| : int_red)
  for (i = 0; i < 1000000; i++) {
    int_red = int_red || 0;
  }
  if (!int_red) {
    return 9;
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
movl   $0x64,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xf4240,-0x8(%rbp)
jge    113d <main+0x3d>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1119 <main+0x19>
cmpl   $0xf42a4,-0xc(%rbp)
je     1156 <main+0x56>
movl   $0x1,-0x4(%rbp)
jmp    1433 <main+0x333>
movl   $0x2,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0x80,-0x8(%rbp)
jge    11af <main+0xaf>
mov    -0x8(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1193 <main+0x93>
mov    -0xc(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    119c <main+0x9c>
mov    -0xc(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0xc(%rbp)
jmp    11a1 <main+0xa1>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1164 <main+0x64>
cmpl   $0x20000,-0xc(%rbp)
je     11c8 <main+0xc8>
movl   $0x2,-0x4(%rbp)
jmp    1433 <main+0x333>
movl   $0x7b,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xf4240,-0x8(%rbp)
jge    1208 <main+0x108>
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11f5 <main+0xf5>
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    11fa <main+0xfa>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11d6 <main+0xd6>
cmpl   $0xf423f,-0xc(%rbp)
je     1221 <main+0x121>
movl   $0x3,-0x4(%rbp)
jmp    1433 <main+0x333>
movl   $0x8235,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xf4240,-0x8(%rbp)
jge    1269 <main+0x169>
mov    -0xc(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jle    1256 <main+0x156>
mov    -0x8(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0xc(%rbp)
jmp    125b <main+0x15b>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    122f <main+0x12f>
cmpl   $0xfffffffe,-0xc(%rbp)
je     127f <main+0x17f>
movl   $0x4,-0x4(%rbp)
jmp    1433 <main+0x333>
movl   $0x75bcd15,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xf4240,-0x8(%rbp)
jge    12b7 <main+0x1b7>
mov    -0x8(%rbp),%eax
shl    $0x5,%eax
add    $0x15,%eax
and    -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    128d <main+0x18d>
cmpl   $0x15,-0xc(%rbp)
je     12cd <main+0x1cd>
movl   $0x5,-0x4(%rbp)
jmp    1433 <main+0x333>
movl   $0x104240,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xf4240,-0x8(%rbp)
jge    12ff <main+0x1ff>
mov    -0x8(%rbp),%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12db <main+0x1db>
cmpl   $0x1fffff,-0xc(%rbp)
je     1318 <main+0x218>
movl   $0x6,-0x4(%rbp)
jmp    1433 <main+0x333>
movl   $0x1e240,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xf4240,-0x8(%rbp)
jge    134d <main+0x24d>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
xor    -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1326 <main+0x226>
cmpl   $0xea000,-0xc(%rbp)
je     1366 <main+0x266>
movl   $0x7,-0x4(%rbp)
jmp    1433 <main+0x333>
movl   $0x0,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xf4240,-0x8(%rbp)
jge    13b3 <main+0x2b3>
xor    %eax,%eax
cmpl   $0x0,-0xc(%rbp)
mov    %al,-0xd(%rbp)
je     139a <main+0x29a>
mov    $0x1,%al
mov    %al,-0xd(%rbp)
jmp    139a <main+0x29a>
mov    -0xd(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1374 <main+0x274>
cmpl   $0x0,-0xc(%rbp)
je     13c9 <main+0x2c9>
movl   $0x8,-0x4(%rbp)
jmp    1433 <main+0x333>
movl   $0x1,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xf4240,-0x8(%rbp)
jge    1416 <main+0x316>
mov    $0x1,%al
cmpl   $0x0,-0xc(%rbp)
mov    %al,-0xe(%rbp)
jne    13fd <main+0x2fd>
xor    %eax,%eax
mov    %al,-0xe(%rbp)
jmp    13fd <main+0x2fd>
mov    -0xe(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    13d7 <main+0x2d7>
cmpl   $0x0,-0xc(%rbp)
jne    142c <main+0x32c>
movl   $0x9,-0x4(%rbp)
jmp    1433 <main+0x333>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
mov    $0x2,%edx
xor    %eax,%eax
mov    $0x80,%esi
nopl   0x0(%rax)
mov    %eax,%ecx
not    %cl
and    $0x1,%cl
shl    %cl,%edx
add    $0x1,%eax
add    $0xfffffffc,%esi
jne    1110 <main+0x10>
mov    $0x2,%eax
cmp    $0x20000,%edx
jne    1669 <main+0x569>
movdqa 0xec6(%rip),%xmm5
movdqa 0xece(%rip),%xmm6
mov    $0xf4240,%eax
movdqa 0xed0(%rip),%xmm10
movdqa 0xed8(%rip),%xmm4
movdqa 0xedf(%rip),%xmm11
movdqa 0xee6(%rip),%xmm12
movdqa 0xeed(%rip),%xmm14
movdqa %xmm6,%xmm7
nopw   0x0(%rax,%rax,1)
movdqa %xmm5,%xmm2
paddd  %xmm10,%xmm2
movdqa %xmm5,%xmm0
pxor   %xmm4,%xmm0
movdqa %xmm6,%xmm1
pxor   %xmm4,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm6
pandn  %xmm5,%xmm1
por    %xmm6,%xmm1
movdqa %xmm7,%xmm0
pxor   %xmm4,%xmm0
movdqa %xmm2,%xmm6
pxor   %xmm4,%xmm6
pcmpgtd %xmm6,%xmm0
pand   %xmm0,%xmm7
pandn  %xmm2,%xmm0
por    %xmm7,%xmm0
movdqa %xmm5,%xmm2
paddd  %xmm11,%xmm2
movdqa %xmm5,%xmm3
paddd  %xmm12,%xmm3
movdqa %xmm1,%xmm6
pxor   %xmm4,%xmm6
movdqa %xmm2,%xmm7
pxor   %xmm4,%xmm7
pcmpgtd %xmm7,%xmm6
pand   %xmm6,%xmm1
pandn  %xmm2,%xmm6
por    %xmm1,%xmm6
movdqa %xmm0,%xmm7
pxor   %xmm4,%xmm7
movdqa %xmm3,%xmm1
pxor   %xmm4,%xmm1
pcmpgtd %xmm1,%xmm7
pand   %xmm7,%xmm0
pandn  %xmm3,%xmm7
por    %xmm0,%xmm7
paddd  %xmm14,%xmm5
add    $0xfffffff0,%eax
jne    1180 <main+0x80>
movdqa %xmm7,%xmm0
pxor   %xmm4,%xmm0
movdqa %xmm6,%xmm1
pxor   %xmm4,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm6
pandn  %xmm7,%xmm1
por    %xmm6,%xmm1
pshufd $0xee,%xmm1,%xmm0
movdqa %xmm1,%xmm2
pxor   %xmm4,%xmm2
movdqa %xmm0,%xmm3
pxor   %xmm4,%xmm3
pcmpgtd %xmm3,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
pshufd $0x55,%xmm2,%xmm0
movdqa %xmm2,%xmm1
pxor   %xmm4,%xmm1
pxor   %xmm0,%xmm4
pcmpgtd %xmm4,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
movd   %xmm1,%ecx
mov    $0x3,%eax
cmp    $0xf423f,%ecx
jne    1669 <main+0x569>
movdqa 0xd54(%rip),%xmm6
movdqa 0xdbc(%rip),%xmm2
mov    $0xf4240,%eax
movdqa 0xdbe(%rip),%xmm8
movdqa 0xdc5(%rip),%xmm9
movdqa 0xdcd(%rip),%xmm7
movdqa 0xdd5(%rip),%xmm1
movdqa %xmm2,%xmm0
nop
movdqa %xmm6,%xmm5
paddd  %xmm8,%xmm5
movdqa %xmm6,%xmm4
paddd  %xmm9,%xmm4
movdqa %xmm5,%xmm3
pcmpgtd %xmm2,%xmm3
pand   %xmm3,%xmm2
pandn  %xmm5,%xmm3
por    %xmm2,%xmm3
movdqa %xmm4,%xmm5
pcmpgtd %xmm0,%xmm5
pand   %xmm5,%xmm0
pandn  %xmm4,%xmm5
por    %xmm0,%xmm5
movdqa %xmm6,%xmm0
paddd  %xmm7,%xmm0
movdqa %xmm6,%xmm4
paddd  %xmm1,%xmm4
movdqa %xmm0,%xmm2
pcmpgtd %xmm3,%xmm2
pand   %xmm2,%xmm3
pandn  %xmm0,%xmm2
por    %xmm3,%xmm2
movdqa %xmm4,%xmm0
pcmpgtd %xmm5,%xmm0
pand   %xmm0,%xmm5
pandn  %xmm4,%xmm0
por    %xmm5,%xmm0
paddd  %xmm14,%xmm6
add    $0xfffffff0,%eax
jne    12e0 <main+0x1e0>
movdqa %xmm0,%xmm1
pcmpgtd %xmm2,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
pshufd $0xee,%xmm1,%xmm0
movdqa %xmm0,%xmm2
pcmpgtd %xmm1,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
pshufd $0x55,%xmm2,%xmm0
movdqa %xmm0,%xmm1
pcmpgtd %xmm2,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
movd   %xmm1,%ecx
mov    $0x4,%eax
cmp    $0xfffffffe,%ecx
jne    1669 <main+0x569>
movdqa 0xc44(%rip),%xmm0
pcmpeqd %xmm1,%xmm1
movdqa 0xcf8(%rip),%xmm2
mov    $0xf4240,%eax
movdqa 0xd0a(%rip),%xmm8
movdqa 0xd12(%rip),%xmm5
movdqa 0xd1a(%rip),%xmm6
cs nopw 0x0(%rax,%rax,1)
movdqa %xmm0,%xmm3
pslld  $0x5,%xmm3
movdqa %xmm3,%xmm7
por    0xccb(%rip),%xmm7
pand   %xmm2,%xmm7
movdqa %xmm3,%xmm4
paddd  %xmm8,%xmm4
pand   %xmm1,%xmm4
movdqa %xmm3,%xmm2
paddd  %xmm5,%xmm2
pand   %xmm7,%xmm2
paddd  %xmm6,%xmm3
movdqa %xmm3,%xmm1
pand   %xmm4,%xmm1
paddd  %xmm14,%xmm0
add    $0xfffffff0,%eax
jne    13f0 <main+0x2f0>
pand   %xmm2,%xmm1
pshufd $0xee,%xmm1,%xmm0
pand   %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
pand   %xmm0,%xmm1
movd   %xmm1,%ecx
mov    $0x5,%eax
cmp    $0x15,%ecx
jne    1669 <main+0x569>
movdqa 0xb98(%rip),%xmm7
pxor   %xmm6,%xmm6
movdqa 0xc9c(%rip),%xmm2
mov    $0xf4240,%eax
movdqa 0xc9e(%rip),%xmm13
movdqa 0xca5(%rip),%xmm15
movdqa 0xcad(%rip),%xmm4
movdqa 0xcb4(%rip),%xmm9
movdqa 0xcbc(%rip),%xmm0
movdqa 0xcc4(%rip),%xmm1
nopl   0x0(%rax)
movdqa %xmm7,%xmm3
paddd  %xmm10,%xmm3
por    %xmm6,%xmm3
por    %xmm7,%xmm2
movdqa %xmm7,%xmm6
paddd  %xmm11,%xmm6
por    %xmm2,%xmm6
movdqa %xmm7,%xmm2
paddd  %xmm12,%xmm2
movdqa %xmm7,%xmm5
paddd  %xmm14,%xmm5
movdqa %xmm7,%xmm8
paddd  %xmm13,%xmm8
por    %xmm2,%xmm8
por    %xmm3,%xmm8
movdqa %xmm7,%xmm3
paddd  %xmm15,%xmm3
por    %xmm5,%xmm3
por    %xmm6,%xmm3
movdqa %xmm7,%xmm5
paddd  %xmm4,%xmm5
movdqa %xmm7,%xmm2
paddd  %xmm9,%xmm2
por    %xmm3,%xmm2
movdqa %xmm7,%xmm6
paddd  %xmm0,%xmm6
por    %xmm5,%xmm6
por    %xmm8,%xmm6
paddd  %xmm1,%xmm7
add    $0xffffffd8,%eax
jne    14b0 <main+0x3b0>
por    %xmm2,%xmm6
pshufd $0xee,%xmm6,%xmm0
por    %xmm6,%xmm0
pshufd $0x55,%xmm0,%xmm1
por    %xmm0,%xmm1
movd   %xmm1,%ecx
mov    $0x6,%eax
cmp    $0x1fffff,%ecx
movdqa 0xb6a(%rip),%xmm14
jne    1669 <main+0x569>
movdqa %xmm9,%xmm3
movdqa 0xa87(%rip),%xmm4
pxor   %xmm0,%xmm0
movdqa 0xbfb(%rip),%xmm1
mov    $0xf4240,%eax
pcmpeqd %xmm10,%xmm10
movdqa 0xbf8(%rip),%xmm11
movdqa 0xbff(%rip),%xmm8
movdqa 0xc06(%rip),%xmm12
movdqa 0xc0d(%rip),%xmm13
movdqa 0xc14(%rip),%xmm9
movdqa 0xc1c(%rip),%xmm7
movdqa %xmm3,%xmm6
nopl   0x0(%rax,%rax,1)
movdqa %xmm4,%xmm2
psubd  %xmm10,%xmm2
pxor   %xmm1,%xmm2
movdqa %xmm4,%xmm1
paddd  %xmm11,%xmm1
pxor   %xmm0,%xmm1
movdqa %xmm4,%xmm0
paddd  %xmm8,%xmm0
pxor   %xmm2,%xmm0
movdqa %xmm4,%xmm2
paddd  %xmm12,%xmm2
movdqa %xmm4,%xmm5
paddd  %xmm13,%xmm5
movdqa %xmm4,%xmm3
paddd  %xmm14,%xmm3
pxor   %xmm2,%xmm3
pxor   %xmm1,%xmm3
movdqa %xmm4,%xmm1
paddd  %xmm9,%xmm1
pxor   %xmm5,%xmm1
pxor   %xmm0,%xmm1
movdqa %xmm4,%xmm0
paddd  %xmm7,%xmm0
pxor   %xmm3,%xmm0
paddd  %xmm6,%xmm4
add    $0xffffffe0,%eax
jne    15d0 <main+0x4d0>
pxor   %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
pxor   %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
pxor   %xmm1,%xmm0
movd   %xmm0,%eax
xor    %ecx,%ecx
cmp    $0xea000,%eax
mov    $0x7,%eax
cmove  %ecx,%eax
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
store i32 0, i32* %1
store i32 100, i32* %3
store i32 0, i32* %2
br label %4
4: ; preds = %10, %0
%5 = load i32, i32* %2
%6 = icmp slt i32 %5, 1000000
br i1 %6, label %7, label %13
7: ; preds = %4
%8 = load i32, i32* %3
%9 = add nsw i32 %8, 1
store i32 %9, i32* %3
br label %10
10: ; preds = %7
%11 = load i32, i32* %2
%12 = add nsw i32 %11, 1
store i32 %12, i32* %2
br label %4
13: ; preds = %4
%14 = load i32, i32* %3
%15 = icmp ne i32 %14, 1000100
br i1 %15, label %16, label %17
16: ; preds = %13
store i32 1, i32* %1
br label %162
17: ; preds = %13
store i32 2, i32* %3
store i32 0, i32* %2
br label %18
18: ; preds = %32, %17
%19 = load i32, i32* %2
%20 = icmp slt i32 %19, 128
br i1 %20, label %21, label %35
21: ; preds = %18
%22 = load i32, i32* %2
%23 = srem i32 %22, 8
%24 = icmp eq i32 %23, 0
br i1 %24, label %25, label %28
25: ; preds = %21
%26 = load i32, i32* %3
%27 = mul nsw i32 %26, 2
store i32 %27, i32* %3
br label %31
28: ; preds = %21
%29 = load i32, i32* %3
%30 = mul nsw i32 %29, 1
store i32 %30, i32* %3
br label %31
31: ; preds = %28, %25
br label %32
32: ; preds = %31
%33 = load i32, i32* %2
%34 = add nsw i32 %33, 1
store i32 %34, i32* %2
br label %18
35: ; preds = %18
%36 = load i32, i32* %3
%37 = icmp ne i32 %36, 131072
br i1 %37, label %38, label %39
38: ; preds = %35
store i32 2, i32* %1
br label %162
39: ; preds = %35
store i32 123, i32* %3
store i32 0, i32* %2
br label %40
40: ; preds = %50, %39
%41 = load i32, i32* %2
%42 = icmp slt i32 %41, 1000000
br i1 %42, label %43, label %53
43: ; preds = %40
%44 = load i32, i32* %3
%45 = load i32, i32* %2
%46 = icmp slt i32 %44, %45
br i1 %46, label %47, label %49
47: ; preds = %43
%48 = load i32, i32* %2
store i32 %48, i32* %3
br label %49
49: ; preds = %47, %43
br label %50
50: ; preds = %49
%51 = load i32, i32* %2
%52 = add nsw i32 %51, 1
store i32 %52, i32* %2
br label %40
53: ; preds = %40
%54 = load i32, i32* %3
%55 = icmp ne i32 %54, 999999
br i1 %55, label %56, label %57
56: ; preds = %53
store i32 3, i32* %1
br label %162
57: ; preds = %53
store i32 33333, i32* %3
store i32 0, i32* %2
br label %58
58: ; preds = %70, %57
%59 = load i32, i32* %2
%60 = icmp slt i32 %59, 1000000
br i1 %60, label %61, label %73
61: ; preds = %58
%62 = load i32, i32* %3
%63 = load i32, i32* %2
%64 = sub nsw i32 %63, 2
%65 = icmp sgt i32 %62, %64
br i1 %65, label %66, label %69
66: ; preds = %61
%67 = load i32, i32* %2
%68 = sub nsw i32 %67, 2
store i32 %68, i32* %3
br label %69
69: ; preds = %66, %61
br label %70
70: ; preds = %69
%71 = load i32, i32* %2
%72 = add nsw i32 %71, 1
store i32 %72, i32* %2
br label %58
73: ; preds = %58
%74 = load i32, i32* %3
%75 = icmp ne i32 %74, -2
br i1 %75, label %76, label %77
76: ; preds = %73
store i32 4, i32* %1
br label %162
77: ; preds = %73
store i32 123456789, i32* %3
store i32 0, i32* %2
br label %78
78: ; preds = %87, %77
%79 = load i32, i32* %2
%80 = icmp slt i32 %79, 1000000
br i1 %80, label %81, label %90
81: ; preds = %78
%82 = load i32, i32* %2
%83 = shl i32 %82, 5
%84 = add nsw i32 %83, 21
%85 = load i32, i32* %3
%86 = and i32 %85, %84
store i32 %86, i32* %3
br label %87
87: ; preds = %81
%88 = load i32, i32* %2
%89 = add nsw i32 %88, 1
store i32 %89, i32* %2
br label %78
90: ; preds = %78
%91 = load i32, i32* %3
%92 = icmp ne i32 %91, 21
br i1 %92, label %93, label %94
93: ; preds = %90
store i32 5, i32* %1
br label %162
94: ; preds = %90
store i32 1065536, i32* %3
store i32 0, i32* %2
br label %95
95: ; preds = %102, %94
%96 = load i32, i32* %2
%97 = icmp slt i32 %96, 1000000
br i1 %97, label %98, label %105
98: ; preds = %95
%99 = load i32, i32* %2
%100 = load i32, i32* %3
%101 = or i32 %100, %99
store i32 %101, i32* %3
br label %102
102: ; preds = %98
%103 = load i32, i32* %2
%104 = add nsw i32 %103, 1
store i32 %104, i32* %2
br label %95
105: ; preds = %95
%106 = load i32, i32* %3
%107 = icmp ne i32 %106, 2097151
br i1 %107, label %108, label %109
108: ; preds = %105
store i32 6, i32* %1
br label %162
109: ; preds = %105
store i32 123456, i32* %3
store i32 0, i32* %2
br label %110
110: ; preds = %118, %109
%111 = load i32, i32* %2
%112 = icmp slt i32 %111, 1000000
br i1 %112, label %113, label %121
113: ; preds = %110
%114 = load i32, i32* %2
%115 = add nsw i32 %114, 1
%116 = load i32, i32* %3
%117 = xor i32 %116, %115
store i32 %117, i32* %3
br label %118
118: ; preds = %113
%119 = load i32, i32* %2
%120 = add nsw i32 %119, 1
store i32 %120, i32* %2
br label %110
121: ; preds = %110
%122 = load i32, i32* %3
%123 = icmp ne i32 %122, 958464
br i1 %123, label %124, label %125
124: ; preds = %121
store i32 7, i32* %1
br label %162
125: ; preds = %121
store i32 0, i32* %3
store i32 0, i32* %2
br label %126
126: ; preds = %136, %125
%127 = load i32, i32* %2
%128 = icmp slt i32 %127, 1000000
br i1 %128, label %129, label %139
129: ; preds = %126
%130 = load i32, i32* %3
%131 = icmp ne i32 %130, 0
br i1 %131, label %132, label %133
132: ; preds = %129
br label %133
133: ; preds = %132, %129
%134 = phi i1 [ false, %129 ], [ true, %132 ]
%135 = zext i1 %134 to i32
store i32 %135, i32* %3
br label %136
136: ; preds = %133
%137 = load i32, i32* %2
%138 = add nsw i32 %137, 1
store i32 %138, i32* %2
br label %126
139: ; preds = %126
%140 = load i32, i32* %3
%141 = icmp ne i32 %140, 0
br i1 %141, label %142, label %143
142: ; preds = %139
store i32 8, i32* %1
br label %162
143: ; preds = %139
store i32 1, i32* %3
store i32 0, i32* %2
br label %144
144: ; preds = %154, %143
%145 = load i32, i32* %2
%146 = icmp slt i32 %145, 1000000
br i1 %146, label %147, label %157
147: ; preds = %144
%148 = load i32, i32* %3
%149 = icmp ne i32 %148, 0
br i1 %149, label %151, label %150
150: ; preds = %147
br label %151
151: ; preds = %150, %147
%152 = phi i1 [ true, %147 ], [ false, %150 ]
%153 = zext i1 %152 to i32
store i32 %153, i32* %3
br label %154
154: ; preds = %151
%155 = load i32, i32* %2
%156 = add nsw i32 %155, 1
store i32 %156, i32* %2
br label %144
157: ; preds = %144
%158 = load i32, i32* %3
%159 = icmp ne i32 %158, 0
br i1 %159, label %161, label %160
160: ; preds = %157
store i32 9, i32* %1
br label %162
161: ; preds = %157
store i32 0, i32* %1
br label %162
162: ; preds = %161, %160, %142, %124, %108, %93, %76, %56, %38, %16
%163 = load i32, i32* %1
ret i32 %163
}

LLVM IR (-O2):
define i32 @main() {
br label %1
1: ; preds = %1, %0
%2 = phi i32 [ 2, %0 ], [ %7, %1 ]
%3 = phi i32 [ 0, %0 ], [ %8, %1 ]
%4 = lshr exact i32 %3, 2
%5 = and i32 %4, 1
%6 = xor i32 %5, 1
%7 = shl nsw i32 %2, %6
%8 = add nuw nsw i32 %3, 4
%9 = icmp eq i32 %8, 128
br i1 %9, label %10, label %1
10: ; preds = %1
%11 = icmp eq i32 %7, 131072
br i1 %11, label %12, label %148
12: ; preds = %10, %12
%13 = phi i32 [ %28, %12 ], [ 0, %10 ]
%14 = phi <4 x i32> [ %26, %12 ], [ <i32 123, i32 123, i32 123, i32 123>, %10 ]
%15 = phi <4 x i32> [ %27, %12 ], [ <i32 123, i32 123, i32 123, i32 123>, %10 ]
%16 = phi <4 x i32> [ %29, %12 ], [ <i32 0, i32 1, i32 2, i32 3>, %10 ]
%17 = add <4 x i32> %16, <i32 4, i32 4, i32 4, i32 4>
%18 = icmp ult <4 x i32> %14, %16
%19 = icmp ult <4 x i32> %15, %17
%20 = select <4 x i1> %18, <4 x i32> %16, <4 x i32> %14
%21 = select <4 x i1> %19, <4 x i32> %17, <4 x i32> %15
%22 = add <4 x i32> %16, <i32 8, i32 8, i32 8, i32 8>
%23 = add <4 x i32> %16, <i32 12, i32 12, i32 12, i32 12>
%24 = icmp ult <4 x i32> %20, %22
%25 = icmp ult <4 x i32> %21, %23
%26 = select <4 x i1> %24, <4 x i32> %22, <4 x i32> %20
%27 = select <4 x i1> %25, <4 x i32> %23, <4 x i32> %21
%28 = add nuw nsw i32 %13, 16
%29 = add <4 x i32> %16, <i32 16, i32 16, i32 16, i32 16>
%30 = icmp eq i32 %28, 1000000
br i1 %30, label %31, label %12
31: ; preds = %12
%32 = icmp ugt <4 x i32> %26, %27
%33 = select <4 x i1> %32, <4 x i32> %26, <4 x i32> %27
%34 = call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> %33)
%35 = icmp eq i32 %34, 999999
br i1 %35, label %36, label %148
36: ; preds = %31, %36
%37 = phi i32 [ %53, %36 ], [ 0, %31 ]
%38 = phi <4 x i32> [ %51, %36 ], [ <i32 33333, i32 33333, i32 33333, i32 33333>, %31 ]
%39 = phi <4 x i32> [ %52, %36 ], [ <i32 33333, i32 33333, i32 33333, i32 33333>, %31 ]
%40 = phi <4 x i32> [ %54, %36 ], [ <i32 0, i32 1, i32 2, i32 3>, %31 ]
%41 = add nsw <4 x i32> %40, <i32 -2, i32 -2, i32 -2, i32 -2>
%42 = add <4 x i32> %40, <i32 2, i32 2, i32 2, i32 2>
%43 = icmp sgt <4 x i32> %38, %41
%44 = icmp sgt <4 x i32> %39, %42
%45 = select <4 x i1> %43, <4 x i32> %41, <4 x i32> %38
%46 = select <4 x i1> %44, <4 x i32> %42, <4 x i32> %39
%47 = add <4 x i32> %40, <i32 6, i32 6, i32 6, i32 6>
%48 = add <4 x i32> %40, <i32 10, i32 10, i32 10, i32 10>
%49 = icmp sgt <4 x i32> %45, %47
%50 = icmp sgt <4 x i32> %46, %48
%51 = select <4 x i1> %49, <4 x i32> %47, <4 x i32> %45
%52 = select <4 x i1> %50, <4 x i32> %48, <4 x i32> %46
%53 = add nuw nsw i32 %37, 16
%54 = add <4 x i32> %40, <i32 16, i32 16, i32 16, i32 16>
%55 = icmp eq i32 %53, 1000000
br i1 %55, label %56, label %36
56: ; preds = %36
%57 = icmp slt <4 x i32> %51, %52
%58 = select <4 x i1> %57, <4 x i32> %51, <4 x i32> %52
%59 = call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %58)
%60 = icmp eq i32 %59, -2
br i1 %60, label %61, label %148
61: ; preds = %56, %61
%62 = phi i32 [ %81, %61 ], [ 0, %56 ]
%63 = phi <4 x i32> [ %79, %61 ], [ <i32 123456789, i32 -1, i32 -1, i32 -1>, %56 ]
%64 = phi <4 x i32> [ %80, %61 ], [ <i32 -1, i32 -1, i32 -1, i32 -1>, %56 ]
%65 = phi <4 x i32> [ %82, %61 ], [ <i32 0, i32 1, i32 2, i32 3>, %56 ]
%66 = shl nuw nsw <4 x i32> %65, <i32 5, i32 5, i32 5, i32 5>
%67 = shl <4 x i32> %65, <i32 5, i32 5, i32 5, i32 5>
%68 = add <4 x i32> %67, <i32 128, i32 128, i32 128, i32 128>
%69 = or <4 x i32> %66, <i32 21, i32 21, i32 21, i32 21>
%70 = or <4 x i32> %68, <i32 21, i32 21, i32 21, i32 21>
%71 = and <4 x i32> %69, %63
%72 = and <4 x i32> %70, %64
%73 = add <4 x i32> %65, <i32 8, i32 8, i32 8, i32 8>
%74 = shl nuw nsw <4 x i32> %73, <i32 5, i32 5, i32 5, i32 5>
%75 = shl <4 x i32> %73, <i32 5, i32 5, i32 5, i32 5>
%76 = add <4 x i32> %75, <i32 128, i32 128, i32 128, i32 128>
%77 = or <4 x i32> %74, <i32 21, i32 21, i32 21, i32 21>
%78 = or <4 x i32> %76, <i32 21, i32 21, i32 21, i32 21>
%79 = and <4 x i32> %77, %71
%80 = and <4 x i32> %78, %72
%81 = add nuw nsw i32 %62, 16
%82 = add <4 x i32> %65, <i32 16, i32 16, i32 16, i32 16>
%83 = icmp eq i32 %81, 1000000
br i1 %83, label %84, label %61
84: ; preds = %61
%85 = and <4 x i32> %80, %79
%86 = call i32 @llvm.vector.reduce.and.v4i32(<4 x i32> %85)
%87 = icmp eq i32 %86, 21
br i1 %87, label %88, label %148
88: ; preds = %84, %88
%89 = phi i32 [ %112, %88 ], [ 0, %84 ]
%90 = phi <4 x i32> [ %110, %88 ], [ <i32 1065536, i32 0, i32 0, i32 0>, %84 ]
%91 = phi <4 x i32> [ %111, %88 ], [ zeroinitializer, %84 ]
%92 = phi <4 x i32> [ %113, %88 ], [ <i32 0, i32 1, i32 2, i32 3>, %84 ]
%93 = add <4 x i32> %92, <i32 4, i32 4, i32 4, i32 4>
%94 = or <4 x i32> %90, %92
%95 = or <4 x i32> %91, %93
%96 = add <4 x i32> %92, <i32 8, i32 8, i32 8, i32 8>
%97 = add <4 x i32> %92, <i32 12, i32 12, i32 12, i32 12>
%98 = or <4 x i32> %94, %96
%99 = or <4 x i32> %95, %97
%100 = add <4 x i32> %92, <i32 16, i32 16, i32 16, i32 16>
%101 = add <4 x i32> %92, <i32 20, i32 20, i32 20, i32 20>
%102 = or <4 x i32> %98, %100
%103 = or <4 x i32> %99, %101
%104 = add <4 x i32> %92, <i32 24, i32 24, i32 24, i32 24>
%105 = add <4 x i32> %92, <i32 28, i32 28, i32 28, i32 28>
%106 = or <4 x i32> %102, %104
%107 = or <4 x i32> %103, %105
%108 = add <4 x i32> %92, <i32 32, i32 32, i32 32, i32 32>
%109 = add <4 x i32> %92, <i32 36, i32 36, i32 36, i32 36>
%110 = or <4 x i32> %106, %108
%111 = or <4 x i32> %107, %109
%112 = add nuw nsw i32 %89, 40
%113 = add <4 x i32> %92, <i32 40, i32 40, i32 40, i32 40>
%114 = icmp eq i32 %112, 1000000
br i1 %114, label %115, label %88
115: ; preds = %88
%116 = or <4 x i32> %111, %110
%117 = call i32 @llvm.vector.reduce.or.v4i32(<4 x i32> %116)
%118 = icmp eq i32 %117, 2097151
br i1 %118, label %119, label %148
119: ; preds = %115, %119
%120 = phi i32 [ %140, %119 ], [ 0, %115 ]
%121 = phi <4 x i32> [ %138, %119 ], [ <i32 123456, i32 0, i32 0, i32 0>, %115 ]
%122 = phi <4 x i32> [ %139, %119 ], [ zeroinitializer, %115 ]
%123 = phi <4 x i32> [ %141, %119 ], [ <i32 0, i32 1, i32 2, i32 3>, %115 ]
%124 = add nuw nsw <4 x i32> %123, <i32 1, i32 1, i32 1, i32 1>
%125 = add <4 x i32> %123, <i32 5, i32 5, i32 5, i32 5>
%126 = xor <4 x i32> %121, %124
%127 = xor <4 x i32> %122, %125
%128 = add <4 x i32> %123, <i32 9, i32 9, i32 9, i32 9>
%129 = add <4 x i32> %123, <i32 13, i32 13, i32 13, i32 13>
%130 = xor <4 x i32> %126, %128
%131 = xor <4 x i32> %127, %129
%132 = add <4 x i32> %123, <i32 17, i32 17, i32 17, i32 17>
%133 = add <4 x i32> %123, <i32 21, i32 21, i32 21, i32 21>
%134 = xor <4 x i32> %130, %132
%135 = xor <4 x i32> %131, %133
%136 = add <4 x i32> %123, <i32 25, i32 25, i32 25, i32 25>
%137 = add <4 x i32> %123, <i32 29, i32 29, i32 29, i32 29>
%138 = xor <4 x i32> %134, %136
%139 = xor <4 x i32> %135, %137
%140 = add nuw nsw i32 %120, 32
%141 = add <4 x i32> %123, <i32 32, i32 32, i32 32, i32 32>
%142 = icmp eq i32 %140, 1000000
br i1 %142, label %143, label %119
143: ; preds = %119
%144 = xor <4 x i32> %139, %138
%145 = call i32 @llvm.vector.reduce.xor.v4i32(<4 x i32> %144)
%146 = icmp eq i32 %145, 958464
%147 = select i1 %146, i32 0, i32 7
br label %148
148: ; preds = %143, %115, %84, %56, %31, %10
%149 = phi i32 [ 2, %10 ], [ 3, %31 ], [ 4, %56 ], [ 5, %84 ], [ 6, %115 ], [ %147, %143 ]
ret i32 %149
}