#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 foo();
int captureint() {
  int a = 0, b = 0, c = 0;
#pragma omp atomic capture
  ;
#pragma omp atomic capture
  foo();
#pragma omp atomic capture
  a = b;
#pragma omp atomic capture
  a = b || a;
#pragma omp atomic capture
  b = a = a && b;
#pragma omp atomic capture
  a = (float)a + b;
#pragma omp atomic capture
  a = 2 * b;
#pragma omp atomic capture
  a = b + *&a;
#pragma omp atomic capture
  { a = b; }
#pragma omp atomic capture
  {}
#pragma omp atomic capture
  {
    a = b;
    a = b;
  }
#pragma omp atomic capture
  {
    a = b;
    a = b || a;
  }
#pragma omp atomic capture
  {
    b = a;
    a = a && b;
  }
#pragma omp atomic capture
  b = a = (float)a + b;
#pragma omp atomic capture
  b = a = 2 * b;
#pragma omp atomic capture
  b = a = b + *&a;
#pragma omp atomic capture
  c = *&a = *&a + 2;
#pragma omp atomic capture
  c = a++;
#pragma omp atomic capture
  c = ++a;
#pragma omp atomic capture
  c = a--;
#pragma omp atomic capture
  c = --a;
#pragma omp atomic capture
  c = a += b;
#pragma omp atomic capture
  c = a %= b;
#pragma omp atomic capture
  c = a *= b;
#pragma omp atomic capture
  c = a -= b;
#pragma omp atomic capture
  c = a /= b;
#pragma omp atomic capture
  c = a &= b;
#pragma omp atomic capture
  c = a ^= b;
#pragma omp atomic capture
  c = a |= b;
#pragma omp atomic capture
  c = a <<= b;
#pragma omp atomic capture
  c = a >>= b;
#pragma omp atomic capture
  c = a = b + a;
#pragma omp atomic capture
  c = a = a * b;
#pragma omp atomic capture
  c = a = b - a;
#pragma omp atomic capture
  c = a = a / b;
#pragma omp atomic capture
  c = a = b & a;
#pragma omp atomic capture
  c = a = a ^ b;
#pragma omp atomic capture
  c = a = b | a;
#pragma omp atomic capture
  c = a = a << b;
#pragma omp atomic capture
  c = a = b >> a;
#pragma omp atomic capture
  {
    c = *&a;
    *&a = *&a + 2;
  }
#pragma omp atomic capture
  {
    *&a = *&a + 2;
    c = *&a;
  }
#pragma omp atomic capture
  {
    c = a;
    a++;
  }
#pragma omp atomic capture
  {
    c = a;
    (a)++;
  }
#pragma omp atomic capture
  {
    ++a;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a--;
  }
#pragma omp atomic capture
  {
    --a;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a += b;
  }
#pragma omp atomic capture
  {
    c = a;
    (a) += b;
  }
#pragma omp atomic capture
  {
    a %= b;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a *= b;
  }
#pragma omp atomic capture
  {
    a -= b;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a /= b;
  }
#pragma omp atomic capture
  {
    a &= b;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a ^= b;
  }
#pragma omp atomic capture
  {
    a |= b;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a <<= b;
  }
#pragma omp atomic capture
  {
    a >>= b;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a = b + a;
  }
#pragma omp atomic capture
  {
    a = a * b;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a = b - a;
  }
#pragma omp atomic capture
  {
    a = a / b;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a = b & a;
  }
#pragma omp atomic capture
  {
    a = a ^ b;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a = b | a;
  }
#pragma omp atomic capture
  {
    a = a << b;
    c = a;
  }
#pragma omp atomic capture
  {
    c = a;
    a = b >> a;
  }
#pragma omp atomic capture
  {
    c = a;
    a = foo();
  }
#pragma omp atomic capture capture
  b = a /= b;
  return 0;
}


x86 assembly (clang, -O0):
<captureint>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    $0x0,%al
call   1030 <foo@plt>
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    $0x1,%al
cmpl   $0x0,-0x8(%rbp)
mov    %al,-0xd(%rbp)
jne    1153 <captureint+0x43>
cmpl   $0x0,-0x4(%rbp)
setne  %al
mov    %al,-0xd(%rbp)
mov    -0xd(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x4(%rbp)
mov    %al,-0xe(%rbp)
je     1177 <captureint+0x67>
cmpl   $0x0,-0x8(%rbp)
setne  %al
mov    %al,-0xe(%rbp)
mov    -0xe(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0x8(%rbp)
cvtsi2ssl -0x4(%rbp),%xmm0
cvtsi2ssl -0x8(%rbp),%xmm1
addss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    $0x1,%al
cmpl   $0x0,-0x8(%rbp)
mov    %al,-0xf(%rbp)
jne    11dd <captureint+0xcd>
cmpl   $0x0,-0x4(%rbp)
setne  %al
mov    %al,-0xf(%rbp)
mov    -0xf(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x8(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x4(%rbp)
mov    %al,-0x10(%rbp)
je     1207 <captureint+0xf7>
cmpl   $0x0,-0x8(%rbp)
setne  %al
mov    %al,-0x10(%rbp)
mov    -0x10(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
cvtsi2ssl -0x4(%rbp),%xmm0
cvtsi2ssl -0x8(%rbp),%xmm1
addss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
cltd
idiv   %ecx
mov    %edx,-0x4(%rbp)
mov    %edx,-0xc(%rbp)
mov    -0x8(%rbp),%eax
imul   -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
cltd
idiv   %ecx
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
and    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
xor    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
or     -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
shl    %cl,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
sar    %cl,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
sub    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
cltd
idivl  -0x8(%rbp)
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
and    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
xor    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
or     -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    -0x8(%rbp),%ecx
shl    %cl,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x4(%rbp),%ecx
sar    %cl,%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
cltd
idiv   %ecx
mov    %edx,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
imul   -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
cltd
idiv   %ecx
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
and    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
xor    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
or     -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
shl    %cl,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
sar    %cl,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
sub    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
cltd
idivl  -0x8(%rbp)
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
and    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
xor    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
or     -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    -0x8(%rbp),%ecx
shl    %cl,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x4(%rbp),%ecx
sar    %cl,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    $0x0,%al
call   1030 <foo@plt>
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
cltd
idiv   %ecx
mov    %eax,-0x4(%rbp)
mov    %eax,-0x8(%rbp)
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<captureint>:
push   %rax
xor    %eax,%eax
call   1030 <foo@plt>
xor    %eax,%eax
call   1030 <foo@plt>
xor    %eax,%eax
pop    %rcx
ret

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

LLVM IR (-O2):
define i32 @captureint() {
%1 = tail call i32 (...) @foo()
%2 = tail call i32 (...) @foo()
ret i32 0
}