int main() {
  int x;
  x = 0;
  if ((x = x + 2) != 2)
    return 1;
  if ((x = x - 1) != 1)
    return 1;
  if ((x = x * 6) != 6)
    return 1;
  if ((x = x / 2) != 3)
    return 1;
  if ((x = x % 2) != 1)
    return 1;
  if ((x = x << 2) != 4)
    return 1;
  if ((x = x >> 1) != 2)
    return 1;
  if ((x = x | 255) != 255)
    return 1;
  if ((x = x & 3) != 3)
    return 1;
  if ((x = x ^ 1) != 2)
    return 1;
  if ((x = x + (x > 1)) != 2)
    return 1;
  if ((x = x + (x < 3)) != 2)
    return 1;
  if ((x = x + (x > 1)) != 3)
    return 1;
  if ((x = x + (x < 4)) != 4)
    return 1;
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x2,%eax
je     1130 <main+0x30>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x1,%eax
je     114e <main+0x4e>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
imul   $0x6,-0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
cmp    $0x6,%eax
je     116a <main+0x6a>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x8(%rbp)
cmp    $0x3,%eax
je     118d <main+0x8d>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x8(%rbp)
cmp    $0x1,%edx
je     11b0 <main+0xb0>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x4,%eax
je     11ce <main+0xce>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x2,%eax
je     11ec <main+0xec>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
or     $0xff,%eax
mov    %eax,-0x8(%rbp)
cmp    $0xff,%eax
je     120e <main+0x10e>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
and    $0x3,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x3,%eax
je     122c <main+0x12c>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
xor    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x2,%eax
je     124a <main+0x14a>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
cmpl   $0x1,-0x8(%rbp)
setg   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x2,%eax
je     1274 <main+0x174>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
cmpl   $0x3,-0x8(%rbp)
setl   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x2,%eax
je     129e <main+0x19e>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
cmpl   $0x1,-0x8(%rbp)
setg   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x3,%eax
je     12c8 <main+0x1c8>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
mov    -0x8(%rbp),%eax
cmpl   $0x4,-0x8(%rbp)
setl   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
mov    %eax,-0x8(%rbp)
cmp    $0x4,%eax
je     12f2 <main+0x1f2>
movl   $0x1,-0x4(%rbp)
jmp    12f9 <main+0x1f9>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
mov    $0x1,%eax
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %2
%3 = load i32, i32* %2
%4 = add nsw i32 %3, 2
store i32 %4, i32* %2
%5 = icmp ne i32 %4, 2
br i1 %5, label %6, label %7
6: ; preds = %0
store i32 1, i32* %1
br label %85
7: ; preds = %0
%8 = load i32, i32* %2
%9 = sub nsw i32 %8, 1
store i32 %9, i32* %2
%10 = icmp ne i32 %9, 1
br i1 %10, label %11, label %12
11: ; preds = %7
store i32 1, i32* %1
br label %85
12: ; preds = %7
%13 = load i32, i32* %2
%14 = mul nsw i32 %13, 6
store i32 %14, i32* %2
%15 = icmp ne i32 %14, 6
br i1 %15, label %16, label %17
16: ; preds = %12
store i32 1, i32* %1
br label %85
17: ; preds = %12
%18 = load i32, i32* %2
%19 = sdiv i32 %18, 2
store i32 %19, i32* %2
%20 = icmp ne i32 %19, 3
br i1 %20, label %21, label %22
21: ; preds = %17
store i32 1, i32* %1
br label %85
22: ; preds = %17
%23 = load i32, i32* %2
%24 = srem i32 %23, 2
store i32 %24, i32* %2
%25 = icmp ne i32 %24, 1
br i1 %25, label %26, label %27
26: ; preds = %22
store i32 1, i32* %1
br label %85
27: ; preds = %22
%28 = load i32, i32* %2
%29 = shl i32 %28, 2
store i32 %29, i32* %2
%30 = icmp ne i32 %29, 4
br i1 %30, label %31, label %32
31: ; preds = %27
store i32 1, i32* %1
br label %85
32: ; preds = %27
%33 = load i32, i32* %2
%34 = ashr i32 %33, 1
store i32 %34, i32* %2
%35 = icmp ne i32 %34, 2
br i1 %35, label %36, label %37
36: ; preds = %32
store i32 1, i32* %1
br label %85
37: ; preds = %32
%38 = load i32, i32* %2
%39 = or i32 %38, 255
store i32 %39, i32* %2
%40 = icmp ne i32 %39, 255
br i1 %40, label %41, label %42
41: ; preds = %37
store i32 1, i32* %1
br label %85
42: ; preds = %37
%43 = load i32, i32* %2
%44 = and i32 %43, 3
store i32 %44, i32* %2
%45 = icmp ne i32 %44, 3
br i1 %45, label %46, label %47
46: ; preds = %42
store i32 1, i32* %1
br label %85
47: ; preds = %42
%48 = load i32, i32* %2
%49 = xor i32 %48, 1
store i32 %49, i32* %2
%50 = icmp ne i32 %49, 2
br i1 %50, label %51, label %52
51: ; preds = %47
store i32 1, i32* %1
br label %85
52: ; preds = %47
%53 = load i32, i32* %2
%54 = load i32, i32* %2
%55 = icmp sgt i32 %54, 1
%56 = zext i1 %55 to i32
%57 = add nsw i32 %53, %56
store i32 %57, i32* %2
%58 = icmp ne i32 %57, 2
br i1 %58, label %59, label %60
59: ; preds = %52
store i32 1, i32* %1
br label %85
60: ; preds = %52
%61 = load i32, i32* %2
%62 = load i32, i32* %2
%63 = icmp slt i32 %62, 3
%64 = zext i1 %63 to i32
%65 = add nsw i32 %61, %64
store i32 %65, i32* %2
%66 = icmp ne i32 %65, 2
br i1 %66, label %67, label %68
67: ; preds = %60
store i32 1, i32* %1
br label %85
68: ; preds = %60
%69 = load i32, i32* %2
%70 = load i32, i32* %2
%71 = icmp sgt i32 %70, 1
%72 = zext i1 %71 to i32
%73 = add nsw i32 %69, %72
store i32 %73, i32* %2
%74 = icmp ne i32 %73, 3
br i1 %74, label %75, label %76
75: ; preds = %68
store i32 1, i32* %1
br label %85
76: ; preds = %68
%77 = load i32, i32* %2
%78 = load i32, i32* %2
%79 = icmp slt i32 %78, 4
%80 = zext i1 %79 to i32
%81 = add nsw i32 %77, %80
store i32 %81, i32* %2
%82 = icmp ne i32 %81, 4
br i1 %82, label %83, label %84
83: ; preds = %76
store i32 1, i32* %1
br label %85
84: ; preds = %76
store i32 0, i32* %1
br label %85
85: ; preds = %84, %83, %75, %67, %59, %51, %46, %41, %36, %31, %26, %21, %16, %11, %6
%86 = load i32, i32* %1
ret i32 %86
}

LLVM IR (-O2):
define i32 @main() {
ret i32 1
}