#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 foo1(int);
int foo10(int);
int foo11(int);
int foo12(int);
int foo13(int);
int foo14(int);
int foo15(int);
int foo16(int);
int foo2(int);
int foo3(int);
int foo4(int);
int foo5(int);
int foo6(int);
int foo7(int);
int foo8(int);
int foo9(int);
int main() {
  if (foo1(-32) != -31)
    abort();
  if (foo2(32) != 33)
    abort();
  if (foo3(-512) != -513)
    abort();
  if (foo4(512) != 513)
    abort();
  if (foo5(64) != 65)
    abort();
  if (foo6(64) != 65)
    abort();
  if (foo7(512) != 513)
    abort();
  if (foo8(512) != 513)
    abort();
  if (foo9(2) != 1)
    abort();
  if (foo10(2) != 3)
    abort();
  if (foo11(-125) != -124)
    abort();
  if (foo12(-125) != -124)
    abort();
  if (foo13(125) != 126)
    abort();
  if (foo14(125) != 126)
    abort();
  if (foo15(250) != 251)
    abort();
  if (foo16(250) != 251)
    abort();
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0xffffffe0,%edi
call   1110 <foo1@plt>
cmp    $0xffffffe1,%eax
je     1239 <main+0x29>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x20,%edi
call   10a0 <foo2@plt>
cmp    $0x21,%eax
je     1253 <main+0x43>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0xfffffe00,%edi
call   10f0 <foo3@plt>
cmp    $0xfffffdff,%eax
je     126f <main+0x5f>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x200,%edi
call   1080 <foo4@plt>
cmp    $0x201,%eax
je     128b <main+0x7b>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x40,%edi
call   1100 <foo5@plt>
cmp    $0x41,%eax
je     12a5 <main+0x95>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x40,%edi
call   1090 <foo6@plt>
cmp    $0x41,%eax
je     12bf <main+0xaf>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x200,%edi
call   1130 <foo7@plt>
cmp    $0x201,%eax
je     12db <main+0xcb>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x200,%edi
call   10b0 <foo8@plt>
cmp    $0x201,%eax
je     12f7 <main+0xe7>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x2,%edi
call   1120 <foo9@plt>
cmp    $0x1,%eax
je     1311 <main+0x101>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x2,%edi
call   1050 <foo10@plt>
cmp    $0x3,%eax
je     132b <main+0x11b>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0xffffff83,%edi
call   10c0 <foo11@plt>
cmp    $0xffffff84,%eax
je     1345 <main+0x135>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0xffffff83,%edi
call   1060 <foo12@plt>
cmp    $0xffffff84,%eax
je     135f <main+0x14f>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x7d,%edi
call   10d0 <foo13@plt>
cmp    $0x7e,%eax
je     1379 <main+0x169>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0x7d,%edi
call   1040 <foo14@plt>
cmp    $0x7e,%eax
je     1393 <main+0x183>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0xfa,%edi
call   10e0 <foo15@plt>
cmp    $0xfb,%eax
je     13af <main+0x19f>
mov    $0x0,%al
call   1030 <abort@plt>
mov    $0xfa,%edi
call   1070 <foo16@plt>
cmp    $0xfb,%eax
je     13cb <main+0x1bb>
mov    $0x0,%al
call   1030 <abort@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
mov    $0xffffffe0,%edi
call   1110 <foo1@plt>
cmp    $0xffffffe1,%eax
jne    1331 <main+0x121>
mov    $0x20,%edi
call   10a0 <foo2@plt>
cmp    $0x21,%eax
jne    1331 <main+0x121>
mov    $0xfffffe00,%edi
call   10f0 <foo3@plt>
cmp    $0xfffffdff,%eax
jne    1331 <main+0x121>
mov    $0x200,%edi
call   1080 <foo4@plt>
cmp    $0x201,%eax
jne    1331 <main+0x121>
mov    $0x40,%edi
call   1100 <foo5@plt>
cmp    $0x41,%eax
jne    1331 <main+0x121>
mov    $0x40,%edi
call   1090 <foo6@plt>
cmp    $0x41,%eax
jne    1331 <main+0x121>
mov    $0x200,%edi
call   1130 <foo7@plt>
cmp    $0x201,%eax
jne    1331 <main+0x121>
mov    $0x200,%edi
call   10b0 <foo8@plt>
cmp    $0x201,%eax
jne    1331 <main+0x121>
mov    $0x2,%edi
call   1120 <foo9@plt>
cmp    $0x1,%eax
jne    1331 <main+0x121>
mov    $0x2,%edi
call   1050 <foo10@plt>
cmp    $0x3,%eax
jne    1331 <main+0x121>
mov    $0xffffff83,%edi
call   10c0 <foo11@plt>
cmp    $0xffffff84,%eax
jne    1331 <main+0x121>
mov    $0xffffff83,%edi
call   1060 <foo12@plt>
cmp    $0xffffff84,%eax
jne    1331 <main+0x121>
mov    $0x7d,%edi
call   10d0 <foo13@plt>
cmp    $0x7e,%eax
jne    1331 <main+0x121>
mov    $0x7d,%edi
call   1040 <foo14@plt>
cmp    $0x7e,%eax
jne    1331 <main+0x121>
mov    $0xfa,%edi
call   10e0 <foo15@plt>
cmp    $0xfb,%eax
jne    1331 <main+0x121>
mov    $0xfa,%edi
call   1070 <foo16@plt>
cmp    $0xfb,%eax
jne    1331 <main+0x121>
xor    %eax,%eax
pop    %rcx
ret
xor    %eax,%eax
call   1030 <abort@plt>

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = call i32 @foo1(i32 -32)
%3 = icmp ne i32 %2, -31
br i1 %3, label %4, label %6
4: ; preds = %0
%5 = call i32 (...) @abort()
unreachable
6: ; preds = %0
%7 = call i32 @foo2(i32 32)
%8 = icmp ne i32 %7, 33
br i1 %8, label %9, label %11
9: ; preds = %6
%10 = call i32 (...) @abort()
unreachable
11: ; preds = %6
%12 = call i32 @foo3(i32 -512)
%13 = icmp ne i32 %12, -513
br i1 %13, label %14, label %16
14: ; preds = %11
%15 = call i32 (...) @abort()
unreachable
16: ; preds = %11
%17 = call i32 @foo4(i32 512)
%18 = icmp ne i32 %17, 513
br i1 %18, label %19, label %21
19: ; preds = %16
%20 = call i32 (...) @abort()
unreachable
21: ; preds = %16
%22 = call i32 @foo5(i32 64)
%23 = icmp ne i32 %22, 65
br i1 %23, label %24, label %26
24: ; preds = %21
%25 = call i32 (...) @abort()
unreachable
26: ; preds = %21
%27 = call i32 @foo6(i32 64)
%28 = icmp ne i32 %27, 65
br i1 %28, label %29, label %31
29: ; preds = %26
%30 = call i32 (...) @abort()
unreachable
31: ; preds = %26
%32 = call i32 @foo7(i32 512)
%33 = icmp ne i32 %32, 513
br i1 %33, label %34, label %36
34: ; preds = %31
%35 = call i32 (...) @abort()
unreachable
36: ; preds = %31
%37 = call i32 @foo8(i32 512)
%38 = icmp ne i32 %37, 513
br i1 %38, label %39, label %41
39: ; preds = %36
%40 = call i32 (...) @abort()
unreachable
41: ; preds = %36
%42 = call i32 @foo9(i32 2)
%43 = icmp ne i32 %42, 1
br i1 %43, label %44, label %46
44: ; preds = %41
%45 = call i32 (...) @abort()
unreachable
46: ; preds = %41
%47 = call i32 @foo10(i32 2)
%48 = icmp ne i32 %47, 3
br i1 %48, label %49, label %51
49: ; preds = %46
%50 = call i32 (...) @abort()
unreachable
51: ; preds = %46
%52 = call i32 @foo11(i32 -125)
%53 = icmp ne i32 %52, -124
br i1 %53, label %54, label %56
54: ; preds = %51
%55 = call i32 (...) @abort()
unreachable
56: ; preds = %51
%57 = call i32 @foo12(i32 -125)
%58 = icmp ne i32 %57, -124
br i1 %58, label %59, label %61
59: ; preds = %56
%60 = call i32 (...) @abort()
unreachable
61: ; preds = %56
%62 = call i32 @foo13(i32 125)
%63 = icmp ne i32 %62, 126
br i1 %63, label %64, label %66
64: ; preds = %61
%65 = call i32 (...) @abort()
unreachable
66: ; preds = %61
%67 = call i32 @foo14(i32 125)
%68 = icmp ne i32 %67, 126
br i1 %68, label %69, label %71
69: ; preds = %66
%70 = call i32 (...) @abort()
unreachable
71: ; preds = %66
%72 = call i32 @foo15(i32 250)
%73 = icmp ne i32 %72, 251
br i1 %73, label %74, label %76
74: ; preds = %71
%75 = call i32 (...) @abort()
unreachable
76: ; preds = %71
%77 = call i32 @foo16(i32 250)
%78 = icmp ne i32 %77, 251
br i1 %78, label %79, label %81
79: ; preds = %76
%80 = call i32 (...) @abort()
unreachable
81: ; preds = %76
ret i32 0
}

LLVM IR (-O2):
define i32 @main() {
%1 = tail call i32 @foo1(i32 -32)
%2 = icmp eq i32 %1, -31
br i1 %2, label %5, label %3
3: ; preds = %0
%4 = tail call i32 (...) @abort()
unreachable
5: ; preds = %0
%6 = tail call i32 @foo2(i32 32)
%7 = icmp eq i32 %6, 33
br i1 %7, label %10, label %8
8: ; preds = %5
%9 = tail call i32 (...) @abort()
unreachable
10: ; preds = %5
%11 = tail call i32 @foo3(i32 -512)
%12 = icmp eq i32 %11, -513
br i1 %12, label %15, label %13
13: ; preds = %10
%14 = tail call i32 (...) @abort()
unreachable
15: ; preds = %10
%16 = tail call i32 @foo4(i32 512)
%17 = icmp eq i32 %16, 513
br i1 %17, label %20, label %18
18: ; preds = %15
%19 = tail call i32 (...) @abort()
unreachable
20: ; preds = %15
%21 = tail call i32 @foo5(i32 64)
%22 = icmp eq i32 %21, 65
br i1 %22, label %25, label %23
23: ; preds = %20
%24 = tail call i32 (...) @abort()
unreachable
25: ; preds = %20
%26 = tail call i32 @foo6(i32 64)
%27 = icmp eq i32 %26, 65
br i1 %27, label %30, label %28
28: ; preds = %25
%29 = tail call i32 (...) @abort()
unreachable
30: ; preds = %25
%31 = tail call i32 @foo7(i32 512)
%32 = icmp eq i32 %31, 513
br i1 %32, label %35, label %33
33: ; preds = %30
%34 = tail call i32 (...) @abort()
unreachable
35: ; preds = %30
%36 = tail call i32 @foo8(i32 512)
%37 = icmp eq i32 %36, 513
br i1 %37, label %40, label %38
38: ; preds = %35
%39 = tail call i32 (...) @abort()
unreachable
40: ; preds = %35
%41 = tail call i32 @foo9(i32 2)
%42 = icmp eq i32 %41, 1
br i1 %42, label %45, label %43
43: ; preds = %40
%44 = tail call i32 (...) @abort()
unreachable
45: ; preds = %40
%46 = tail call i32 @foo10(i32 2)
%47 = icmp eq i32 %46, 3
br i1 %47, label %50, label %48
48: ; preds = %45
%49 = tail call i32 (...) @abort()
unreachable
50: ; preds = %45
%51 = tail call i32 @foo11(i32 -125)
%52 = icmp eq i32 %51, -124
br i1 %52, label %55, label %53
53: ; preds = %50
%54 = tail call i32 (...) @abort()
unreachable
55: ; preds = %50
%56 = tail call i32 @foo12(i32 -125)
%57 = icmp eq i32 %56, -124
br i1 %57, label %60, label %58
58: ; preds = %55
%59 = tail call i32 (...) @abort()
unreachable
60: ; preds = %55
%61 = tail call i32 @foo13(i32 125)
%62 = icmp eq i32 %61, 126
br i1 %62, label %65, label %63
63: ; preds = %60
%64 = tail call i32 (...) @abort()
unreachable
65: ; preds = %60
%66 = tail call i32 @foo14(i32 125)
%67 = icmp eq i32 %66, 126
br i1 %67, label %70, label %68
68: ; preds = %65
%69 = tail call i32 (...) @abort()
unreachable
70: ; preds = %65
%71 = tail call i32 @foo15(i32 250)
%72 = icmp eq i32 %71, 251
br i1 %72, label %75, label %73
73: ; preds = %70
%74 = tail call i32 (...) @abort()
unreachable
75: ; preds = %70
%76 = tail call i32 @foo16(i32 250)
%77 = icmp eq i32 %76, 251
br i1 %77, label %80, label %78
78: ; preds = %75
%79 = tail call i32 (...) @abort()
unreachable
80: ; preds = %75
ret i32 0
}