#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*/ puts(char *);
int main() {
  int result = 0;
  if (result == 0) {
    puts("result == 0");
  }
  result = 5 + 3;
  if (result == 8) {
    puts("result == 8");
  }
  if (result == 9) {
    puts("result == 9");
  }
  result = 17 - 2;
  if (15 == result) {
    puts("result == 15");
  }
  if (16 == result) {
    puts("result == 16");
  }
  result = 100 / 4;
  if (25 == result) {
    puts("result == 25");
  }
  result = 17 % 5;
  if (result == 2) {
    puts("result == 2");
  }
  int a = 2;
  int b = 3;
  int c = 6;
  if (c == 6) {
    puts("c == 6");
  }
  c = c + 1;
  if (c == 7) {
    puts("c == 7");
  }
  c = 1 + c;
  if (c == 8) {
    puts("c == 8");
  }
  c++;
  if (c == 9) {
    puts("c == 9");
  }
  c = c - 5;
  if (c == 4) {
    puts("c == 4");
  }
  c--;
  if (c == 3) {
    puts("c == 3");
  }
  c += 10;
  if (c == 13) {
    puts("c == 13");
  }
  c += a;
  if (c == 15) {
    puts("c == 15");
  }
  c -= 3;
  if (c == 12) {
    puts("c == 12");
  }
  c *= 3;
  if (c == 36) {
    puts("c == 36");
  }
  c /= 2;
  if (c == 18) {
    puts("c == 18");
  }
  c %= 5;
  if (c == 3) {
    puts("c == 3");
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0x0,-0x8(%rbp)
jne    113c <main+0x2c>
lea    0xec9(%rip),%rdi
call   1030 <puts@plt>
movl   $0x8,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jne    1159 <main+0x49>
lea    0xeb8(%rip),%rdi
call   1030 <puts@plt>
cmpl   $0x9,-0x8(%rbp)
jne    116f <main+0x5f>
lea    0xeae(%rip),%rdi
call   1030 <puts@plt>
movl   $0xf,-0x8(%rbp)
mov    $0xf,%eax
cmp    -0x8(%rbp),%eax
jne    1190 <main+0x80>
lea    0xe99(%rip),%rdi
call   1030 <puts@plt>
mov    $0x10,%eax
cmp    -0x8(%rbp),%eax
jne    11aa <main+0x9a>
lea    0xe8c(%rip),%rdi
call   1030 <puts@plt>
movl   $0x19,-0x8(%rbp)
mov    $0x19,%eax
cmp    -0x8(%rbp),%eax
jne    11cb <main+0xbb>
lea    0xe78(%rip),%rdi
call   1030 <puts@plt>
movl   $0x2,-0x8(%rbp)
cmpl   $0x2,-0x8(%rbp)
jne    11e8 <main+0xd8>
lea    0xe68(%rip),%rdi
call   1030 <puts@plt>
movl   $0x2,-0xc(%rbp)
movl   $0x3,-0x10(%rbp)
movl   $0x6,-0x14(%rbp)
cmpl   $0x6,-0x14(%rbp)
jne    1213 <main+0x103>
lea    0xe49(%rip),%rdi
call   1030 <puts@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x7,-0x14(%rbp)
jne    1232 <main+0x122>
lea    0xe31(%rip),%rdi
call   1030 <puts@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x8,-0x14(%rbp)
jne    1251 <main+0x141>
lea    0xe19(%rip),%rdi
call   1030 <puts@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x9,-0x14(%rbp)
jne    1270 <main+0x160>
lea    0xe01(%rip),%rdi
call   1030 <puts@plt>
mov    -0x14(%rbp),%eax
sub    $0x5,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x4,-0x14(%rbp)
jne    128f <main+0x17f>
lea    0xde9(%rip),%rdi
call   1030 <puts@plt>
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x3,-0x14(%rbp)
jne    12ae <main+0x19e>
lea    0xdd1(%rip),%rdi
call   1030 <puts@plt>
mov    -0x14(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0xd,-0x14(%rbp)
jne    12cd <main+0x1bd>
lea    0xdb9(%rip),%rdi
call   1030 <puts@plt>
mov    -0xc(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
cmpl   $0xf,-0x14(%rbp)
jne    12ec <main+0x1dc>
lea    0xda2(%rip),%rdi
call   1030 <puts@plt>
mov    -0x14(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0xc,-0x14(%rbp)
jne    130b <main+0x1fb>
lea    0xd8b(%rip),%rdi
call   1030 <puts@plt>
imul   $0x3,-0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x24,-0x14(%rbp)
jne    1328 <main+0x218>
lea    0xd76(%rip),%rdi
call   1030 <puts@plt>
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
cmpl   $0x12,-0x14(%rbp)
jne    134c <main+0x23c>
lea    0xd5a(%rip),%rdi
call   1030 <puts@plt>
mov    -0x14(%rbp),%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
cmpl   $0x3,-0x14(%rbp)
jne    1370 <main+0x260>
lea    0xd0f(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
lea    0xee8(%rip),%rdi
call   1030 <puts@plt>
lea    0xee8(%rip),%rdi
call   1030 <puts@plt>
lea    0xee8(%rip),%rdi
call   1030 <puts@plt>
lea    0xee9(%rip),%rdi
call   1030 <puts@plt>
lea    0xeea(%rip),%rdi
call   1030 <puts@plt>
lea    0xeea(%rip),%rdi
call   1030 <puts@plt>
lea    0xee5(%rip),%rdi
call   1030 <puts@plt>
lea    0xee0(%rip),%rdi
call   1030 <puts@plt>
lea    0xedb(%rip),%rdi
call   1030 <puts@plt>
lea    0xed6(%rip),%rdi
call   1030 <puts@plt>
lea    0xed1(%rip),%rbx
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0xec9(%rip),%rdi
call   1030 <puts@plt>
lea    0xec5(%rip),%rdi
call   1030 <puts@plt>
lea    0xec1(%rip),%rdi
call   1030 <puts@plt>
lea    0xebd(%rip),%rdi
call   1030 <puts@plt>
lea    0xeb9(%rip),%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
xor    %eax,%eax
pop    %rbx
ret

LLVM IR (-O0):
@.str = [12 x i8] c"result == 0\00"
@.str.1 = [12 x i8] c"result == 8\00"
@.str.2 = [12 x i8] c"result == 9\00"
@.str.3 = [13 x i8] c"result == 15\00"
@.str.4 = [13 x i8] c"result == 16\00"
@.str.5 = [13 x i8] c"result == 25\00"
@.str.6 = [12 x i8] c"result == 2\00"
@.str.7 = [7 x i8] c"c == 6\00"
@.str.8 = [7 x i8] c"c == 7\00"
@.str.9 = [7 x i8] c"c == 8\00"
@.str.10 = [7 x i8] c"c == 9\00"
@.str.11 = [7 x i8] c"c == 4\00"
@.str.12 = [7 x i8] c"c == 3\00"
@.str.13 = [8 x i8] c"c == 13\00"
@.str.14 = [8 x i8] c"c == 15\00"
@.str.15 = [8 x i8] c"c == 12\00"
@.str.16 = [8 x i8] c"c == 36\00"
@.str.17 = [8 x i8] c"c == 18\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %2
%6 = load i32, i32* %2
%7 = icmp eq i32 %6, 0
br i1 %7, label %8, label %10
8: ; preds = %0
%9 = call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0))
br label %10
10: ; preds = %8, %0
store i32 8, i32* %2
%11 = load i32, i32* %2
%12 = icmp eq i32 %11, 8
br i1 %12, label %13, label %15
13: ; preds = %10
%14 = call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
br label %15
15: ; preds = %13, %10
%16 = load i32, i32* %2
%17 = icmp eq i32 %16, 9
br i1 %17, label %18, label %20
18: ; preds = %15
%19 = call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0))
br label %20
20: ; preds = %18, %15
store i32 15, i32* %2
%21 = load i32, i32* %2
%22 = icmp eq i32 15, %21
br i1 %22, label %23, label %25
23: ; preds = %20
%24 = call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.3, i64 0, i64 0))
br label %25
25: ; preds = %23, %20
%26 = load i32, i32* %2
%27 = icmp eq i32 16, %26
br i1 %27, label %28, label %30
28: ; preds = %25
%29 = call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0))
br label %30
30: ; preds = %28, %25
store i32 25, i32* %2
%31 = load i32, i32* %2
%32 = icmp eq i32 25, %31
br i1 %32, label %33, label %35
33: ; preds = %30
%34 = call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.5, i64 0, i64 0))
br label %35
35: ; preds = %33, %30
store i32 2, i32* %2
%36 = load i32, i32* %2
%37 = icmp eq i32 %36, 2
br i1 %37, label %38, label %40
38: ; preds = %35
%39 = call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.6, i64 0, i64 0))
br label %40
40: ; preds = %38, %35
store i32 2, i32* %3
store i32 3, i32* %4
store i32 6, i32* %5
%41 = load i32, i32* %5
%42 = icmp eq i32 %41, 6
br i1 %42, label %43, label %45
43: ; preds = %40
%44 = call i32 @puts(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
br label %45
45: ; preds = %43, %40
%46 = load i32, i32* %5
%47 = add nsw i32 %46, 1
store i32 %47, i32* %5
%48 = load i32, i32* %5
%49 = icmp eq i32 %48, 7
br i1 %49, label %50, label %52
50: ; preds = %45
%51 = call i32 @puts(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.8, i64 0, i64 0))
br label %52
52: ; preds = %50, %45
%53 = load i32, i32* %5
%54 = add nsw i32 1, %53
store i32 %54, i32* %5
%55 = load i32, i32* %5
%56 = icmp eq i32 %55, 8
br i1 %56, label %57, label %59
57: ; preds = %52
%58 = call i32 @puts(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0))
br label %59
59: ; preds = %57, %52
%60 = load i32, i32* %5
%61 = add nsw i32 %60, 1
store i32 %61, i32* %5
%62 = load i32, i32* %5
%63 = icmp eq i32 %62, 9
br i1 %63, label %64, label %66
64: ; preds = %59
%65 = call i32 @puts(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i64 0, i64 0))
br label %66
66: ; preds = %64, %59
%67 = load i32, i32* %5
%68 = sub nsw i32 %67, 5
store i32 %68, i32* %5
%69 = load i32, i32* %5
%70 = icmp eq i32 %69, 4
br i1 %70, label %71, label %73
71: ; preds = %66
%72 = call i32 @puts(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0))
br label %73
73: ; preds = %71, %66
%74 = load i32, i32* %5
%75 = add nsw i32 %74, -1
store i32 %75, i32* %5
%76 = load i32, i32* %5
%77 = icmp eq i32 %76, 3
br i1 %77, label %78, label %80
78: ; preds = %73
%79 = call i32 @puts(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i64 0, i64 0))
br label %80
80: ; preds = %78, %73
%81 = load i32, i32* %5
%82 = add nsw i32 %81, 10
store i32 %82, i32* %5
%83 = load i32, i32* %5
%84 = icmp eq i32 %83, 13
br i1 %84, label %85, label %87
85: ; preds = %80
%86 = call i32 @puts(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.13, i64 0, i64 0))
br label %87
87: ; preds = %85, %80
%88 = load i32, i32* %3
%89 = load i32, i32* %5
%90 = add nsw i32 %89, %88
store i32 %90, i32* %5
%91 = load i32, i32* %5
%92 = icmp eq i32 %91, 15
br i1 %92, label %93, label %95
93: ; preds = %87
%94 = call i32 @puts(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.14, i64 0, i64 0))
br label %95
95: ; preds = %93, %87
%96 = load i32, i32* %5
%97 = sub nsw i32 %96, 3
store i32 %97, i32* %5
%98 = load i32, i32* %5
%99 = icmp eq i32 %98, 12
br i1 %99, label %100, label %102
100: ; preds = %95
%101 = call i32 @puts(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i64 0, i64 0))
br label %102
102: ; preds = %100, %95
%103 = load i32, i32* %5
%104 = mul nsw i32 %103, 3
store i32 %104, i32* %5
%105 = load i32, i32* %5
%106 = icmp eq i32 %105, 36
br i1 %106, label %107, label %109
107: ; preds = %102
%108 = call i32 @puts(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.16, i64 0, i64 0))
br label %109
109: ; preds = %107, %102
%110 = load i32, i32* %5
%111 = sdiv i32 %110, 2
store i32 %111, i32* %5
%112 = load i32, i32* %5
%113 = icmp eq i32 %112, 18
br i1 %113, label %114, label %116
114: ; preds = %109
%115 = call i32 @puts(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.17, i64 0, i64 0))
br label %116
116: ; preds = %114, %109
%117 = load i32, i32* %5
%118 = srem i32 %117, 5
store i32 %118, i32* %5
%119 = load i32, i32* %5
%120 = icmp eq i32 %119, 3
br i1 %120, label %121, label %123
121: ; preds = %116
%122 = call i32 @puts(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i64 0, i64 0))
br label %123
123: ; preds = %121, %116
ret i32 0
}

LLVM IR (-O2):
@.str = [12 x i8] c"result == 0\00"
@.str.1 = [12 x i8] c"result == 8\00"
@.str.3 = [13 x i8] c"result == 15\00"
@.str.5 = [13 x i8] c"result == 25\00"
@.str.6 = [12 x i8] c"result == 2\00"
@.str.7 = [7 x i8] c"c == 6\00"
@.str.8 = [7 x i8] c"c == 7\00"
@.str.9 = [7 x i8] c"c == 8\00"
@.str.10 = [7 x i8] c"c == 9\00"
@.str.11 = [7 x i8] c"c == 4\00"
@.str.12 = [7 x i8] c"c == 3\00"
@.str.13 = [8 x i8] c"c == 13\00"
@.str.14 = [8 x i8] c"c == 15\00"
@.str.15 = [8 x i8] c"c == 12\00"
@.str.16 = [8 x i8] c"c == 36\00"
@.str.17 = [8 x i8] c"c == 18\00"
define i32 @main() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.3, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.5, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.6, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.8, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.13, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.14, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.16, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.17, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i64 0, i64 0))
ret i32 0
}