#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*/ assert(int);
int /*<<< orphan*/ main2();
int main() {
  main2();
  int x, y;
  if (x + 1 == 2) {
    assert(x == 1);
  } else {
    assert(x != 1);
  }
  if (5 - x == 3)
    assert(x == 2);
  else
    assert(x != 2);
  if (5 - x == 3 && x + y == x * 3)
    assert(x == 2 && y == 4);
  if (x == 3 && y / x == 2) {
    assert(y == 6);
    assert(y >= 6 && y <= 8);
  }
  if (y / 3 == -2)
    assert(y >= -8 && y <= -6);
  if (y / -3 == -2)
    assert(y >= 6 && y <= 8);
  if (y / x == 2 && x == 3)
    assert(x == 3);
  if (2 + (3 - x) * 4 / 5 == 6 && 2 * y >= x + 5)
    assert(x >= -3 && x <= -2 && y >= 1);
  if (x > 1 && x < 5 && x % 2 == 1)
    assert(x == 3);
  long xl, yl, zl;
  if (xl + 1 == 2) {
    assert(xl == 1);
  } else {
    assert(xl != 1);
  }
  if (5 - xl == 3)
    assert(xl == 2);
  if (5 - xl == 3 && xl + yl == xl * 3)
    assert(xl == 2 && yl == 4);
  if (xl == 3 && yl / xl == 2)
    assert(yl == 6);
  if (yl / xl == 2 && xl == 3)
    assert(xl == 3);
  if (2 + (3 - xl) * 4 / 5 == 6 && 2 * yl >= xl + 4)
    assert(xl == -2 && yl >= 1);
  if (xl > 1 && xl < 5 && xl % 2 == 1) {
  }
  short xs, ys, zs;
  if (xs + 1 == 2) {
    assert(xs == 1);
  } else {
  }
  if (5 - xs == 3)
    assert(xs == 2);
  if (5 - xs == 3 && xs + ys == xs * 3)
    assert(xs == 2 && ys == 4);
  if (xs == 3 && ys / xs == 2) {
    assert(ys == 6);
    assert(ys >= 6 && ys <= 8);
  }
  if (ys / 3 == -2)
    assert(ys >= -8 && ys <= -6);
  if (ys / -3 == -2)
    assert(ys >= 6 && ys <= 8);
  if (ys / xs == 2 && xs == 3)
    assert(xs == 3);
  if (2 + (3 - xs) * 4 / 5 == 6 && 2 * ys >= xs + 5) {
    assert(xs == -2 && ys >= 1);
    assert(xs >= -3 && xs <= -2 && ys >= 1);
  }
  if (xs > 1 && xs < 5 && xs % 2 == 1) {
    assert(xs != 2);
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x0,%al
call   1040 <main2@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
cmp    $0x2,%eax
jne    115b <main+0x3b>
cmpl   $0x1,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
jmp    116c <main+0x4c>
cmpl   $0x1,-0x8(%rbp)
setne  %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    $0x5,%eax
sub    -0x8(%rbp),%eax
cmp    $0x3,%eax
jne    1193 <main+0x73>
cmpl   $0x2,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
jmp    11a4 <main+0x84>
cmpl   $0x2,-0x8(%rbp)
setne  %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    $0x5,%eax
sub    -0x8(%rbp),%eax
cmp    $0x3,%eax
jne    11ed <main+0xcd>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
imul   $0x3,-0x8(%rbp),%ecx
cmp    %ecx,%eax
jne    11ed <main+0xcd>
xor    %eax,%eax
cmpl   $0x2,-0x8(%rbp)
mov    %al,-0x2f(%rbp)
jne    11e0 <main+0xc0>
cmpl   $0x4,-0xc(%rbp)
sete   %al
mov    %al,-0x2f(%rbp)
mov    -0x2f(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
cmpl   $0x3,-0x8(%rbp)
jne    123e <main+0x11e>
mov    -0xc(%rbp),%eax
cltd
idivl  -0x8(%rbp)
cmp    $0x2,%eax
jne    123e <main+0x11e>
cmpl   $0x6,-0xc(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
xor    %eax,%eax
cmpl   $0x6,-0xc(%rbp)
mov    %al,-0x30(%rbp)
jl     1231 <main+0x111>
cmpl   $0x8,-0xc(%rbp)
setle  %al
mov    %al,-0x30(%rbp)
mov    -0x30(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    -0xc(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cmp    $0xfffffffe,%eax
jne    1278 <main+0x158>
xor    %eax,%eax
cmpl   $0xfffffff8,-0xc(%rbp)
mov    %al,-0x31(%rbp)
jl     126b <main+0x14b>
cmpl   $0xfffffffa,-0xc(%rbp)
setle  %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    -0xc(%rbp),%eax
mov    $0xfffffffd,%ecx
cltd
idiv   %ecx
cmp    $0xfffffffe,%eax
jne    12b2 <main+0x192>
xor    %eax,%eax
cmpl   $0x6,-0xc(%rbp)
mov    %al,-0x32(%rbp)
jl     12a5 <main+0x185>
cmpl   $0x8,-0xc(%rbp)
setle  %al
mov    %al,-0x32(%rbp)
mov    -0x32(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    -0xc(%rbp),%eax
cltd
idivl  -0x8(%rbp)
cmp    $0x2,%eax
jne    12dd <main+0x1bd>
cmpl   $0x3,-0x8(%rbp)
jne    12dd <main+0x1bd>
cmpl   $0x3,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    $0x3,%eax
sub    -0x8(%rbp),%eax
shl    $0x2,%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
add    $0x2,%eax
cmp    $0x6,%eax
jne    1345 <main+0x225>
mov    -0xc(%rbp),%eax
shl    $0x1,%eax
mov    -0x8(%rbp),%ecx
add    $0x5,%ecx
cmp    %ecx,%eax
jl     1345 <main+0x225>
xor    %eax,%eax
cmpl   $0xfffffffd,-0x8(%rbp)
mov    %al,-0x33(%rbp)
jl     1338 <main+0x218>
xor    %eax,%eax
cmpl   $0xfffffffe,-0x8(%rbp)
mov    %al,-0x33(%rbp)
jg     1338 <main+0x218>
cmpl   $0x1,-0xc(%rbp)
setge  %al
mov    %al,-0x33(%rbp)
mov    -0x33(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
cmpl   $0x1,-0x8(%rbp)
jle    137e <main+0x25e>
cmpl   $0x5,-0x8(%rbp)
jge    137e <main+0x25e>
mov    -0x8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x1,%edx
jne    137e <main+0x25e>
cmpl   $0x3,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
cmp    $0x2,%rax
jne    13a7 <main+0x287>
cmpq   $0x1,-0x18(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
jmp    13b9 <main+0x299>
cmpq   $0x1,-0x18(%rbp)
setne  %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    $0x5,%eax
sub    -0x18(%rbp),%rax
cmp    $0x3,%rax
jne    13de <main+0x2be>
cmpq   $0x2,-0x18(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    $0x5,%eax
sub    -0x18(%rbp),%rax
cmp    $0x3,%rax
jne    142f <main+0x30f>
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
imul   $0x3,-0x18(%rbp),%rcx
cmp    %rcx,%rax
jne    142f <main+0x30f>
xor    %eax,%eax
cmpq   $0x2,-0x18(%rbp)
mov    %al,-0x34(%rbp)
jne    1422 <main+0x302>
cmpq   $0x4,-0x20(%rbp)
sete   %al
mov    %al,-0x34(%rbp)
mov    -0x34(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
cmpq   $0x3,-0x18(%rbp)
jne    1460 <main+0x340>
mov    -0x20(%rbp),%rax
cqto
idivq  -0x18(%rbp)
cmp    $0x2,%rax
jne    1460 <main+0x340>
cmpq   $0x6,-0x20(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    -0x20(%rbp),%rax
cqto
idivq  -0x18(%rbp)
cmp    $0x2,%rax
jne    1491 <main+0x371>
cmpq   $0x3,-0x18(%rbp)
jne    1491 <main+0x371>
cmpq   $0x3,-0x18(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    $0x3,%eax
sub    -0x18(%rbp),%rax
shl    $0x2,%rax
mov    $0x5,%ecx
cqto
idiv   %rcx
add    $0x2,%rax
cmp    $0x6,%rax
jne    14f7 <main+0x3d7>
mov    -0x20(%rbp),%rax
shl    $0x1,%rax
mov    -0x18(%rbp),%rcx
add    $0x4,%rcx
cmp    %rcx,%rax
jl     14f7 <main+0x3d7>
xor    %eax,%eax
cmpq   $0xfffffffffffffffe,-0x18(%rbp)
mov    %al,-0x35(%rbp)
jne    14ea <main+0x3ca>
cmpq   $0x1,-0x20(%rbp)
setge  %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
cmpq   $0x1,-0x18(%rbp)
jle    152a <main+0x40a>
cmpq   $0x5,-0x18(%rbp)
jge    152a <main+0x40a>
mov    -0x18(%rbp),%rax
mov    $0x2,%ecx
cqto
idiv   %rcx
cmp    $0x1,%rdx
jne    152a <main+0x40a>
jmp    152a <main+0x40a>
movswl -0x2a(%rbp),%eax
add    $0x1,%eax
cmp    $0x2,%eax
jne    1553 <main+0x433>
movswl -0x2a(%rbp),%eax
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
jmp    1558 <main+0x438>
jmp    1558 <main+0x438>
movswl -0x2a(%rbp),%ecx
mov    $0x5,%eax
sub    %ecx,%eax
cmp    $0x3,%eax
jne    1580 <main+0x460>
movswl -0x2a(%rbp),%eax
cmp    $0x2,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movswl -0x2a(%rbp),%ecx
mov    $0x5,%eax
sub    %ecx,%eax
cmp    $0x3,%eax
jne    15d9 <main+0x4b9>
movswl -0x2a(%rbp),%eax
movswl -0x2c(%rbp),%ecx
add    %ecx,%eax
movswl -0x2a(%rbp),%ecx
imul   $0x3,%ecx,%ecx
cmp    %ecx,%eax
jne    15d9 <main+0x4b9>
movswl -0x2a(%rbp),%ecx
xor    %eax,%eax
cmp    $0x2,%ecx
mov    %al,-0x36(%rbp)
jne    15cc <main+0x4ac>
movswl -0x2c(%rbp),%eax
cmp    $0x4,%eax
sete   %al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movswl -0x2a(%rbp),%eax
cmp    $0x3,%eax
jne    163a <main+0x51a>
movswl -0x2c(%rbp),%eax
movswl -0x2a(%rbp),%ecx
cltd
idiv   %ecx
cmp    $0x2,%eax
jne    163a <main+0x51a>
movswl -0x2c(%rbp),%eax
cmp    $0x6,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movswl -0x2c(%rbp),%ecx
xor    %eax,%eax
cmp    $0x6,%ecx
mov    %al,-0x37(%rbp)
jl     162d <main+0x50d>
movswl -0x2c(%rbp),%eax
cmp    $0x8,%eax
setle  %al
mov    %al,-0x37(%rbp)
mov    -0x37(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movswl -0x2c(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cmp    $0xfffffffe,%eax
jne    167b <main+0x55b>
movswl -0x2c(%rbp),%ecx
xor    %eax,%eax
cmp    $0xfffffff8,%ecx
mov    %al,-0x38(%rbp)
jl     166e <main+0x54e>
movswl -0x2c(%rbp),%eax
cmp    $0xfffffffa,%eax
setle  %al
mov    %al,-0x38(%rbp)
mov    -0x38(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movswl -0x2c(%rbp),%eax
mov    $0xfffffffd,%ecx
cltd
idiv   %ecx
cmp    $0xfffffffe,%eax
jne    16bc <main+0x59c>
movswl -0x2c(%rbp),%ecx
xor    %eax,%eax
cmp    $0x6,%ecx
mov    %al,-0x39(%rbp)
jl     16af <main+0x58f>
movswl -0x2c(%rbp),%eax
cmp    $0x8,%eax
setle  %al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movswl -0x2c(%rbp),%eax
movswl -0x2a(%rbp),%ecx
cltd
idiv   %ecx
cmp    $0x2,%eax
jne    16f1 <main+0x5d1>
movswl -0x2a(%rbp),%eax
cmp    $0x3,%eax
jne    16f1 <main+0x5d1>
movswl -0x2a(%rbp),%eax
cmp    $0x3,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movswl -0x2a(%rbp),%ecx
mov    $0x3,%eax
sub    %ecx,%eax
shl    $0x2,%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
add    $0x2,%eax
cmp    $0x6,%eax
jne    1793 <main+0x673>
movswl -0x2c(%rbp),%eax
shl    $0x1,%eax
movswl -0x2a(%rbp),%ecx
add    $0x5,%ecx
cmp    %ecx,%eax
jl     1793 <main+0x673>
movswl -0x2a(%rbp),%ecx
xor    %eax,%eax
cmp    $0xfffffffe,%ecx
mov    %al,-0x3a(%rbp)
jne    1748 <main+0x628>
movswl -0x2c(%rbp),%eax
cmp    $0x1,%eax
setge  %al
mov    %al,-0x3a(%rbp)
mov    -0x3a(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movswl -0x2a(%rbp),%ecx
xor    %eax,%eax
cmp    $0xfffffffd,%ecx
mov    %al,-0x3b(%rbp)
jl     1786 <main+0x666>
movswl -0x2a(%rbp),%ecx
xor    %eax,%eax
cmp    $0xfffffffe,%ecx
mov    %al,-0x3b(%rbp)
jg     1786 <main+0x666>
movswl -0x2c(%rbp),%eax
cmp    $0x1,%eax
setge  %al
mov    %al,-0x3b(%rbp)
mov    -0x3b(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movswl -0x2a(%rbp),%eax
cmp    $0x1,%eax
jle    17d6 <main+0x6b6>
movswl -0x2a(%rbp),%eax
cmp    $0x5,%eax
jge    17d6 <main+0x6b6>
movswl -0x2a(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x1,%edx
jne    17d6 <main+0x6b6>
movswl -0x2a(%rbp),%eax
cmp    $0x2,%eax
setne  %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
xor    %eax,%eax
call   1040 <main2@plt>
xor    %edi,%edi
call   1030 <assert@plt>
xor    %edi,%edi
call   1030 <assert@plt>
xor    %edi,%edi
call   1030 <assert@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i64
%5 = alloca i64
%6 = alloca i64
%7 = alloca i16
%8 = alloca i16
%9 = alloca i16
store i32 0, i32* %1
%10 = call i32 (...) @main2()
%11 = load i32, i32* %2
%12 = add nsw i32 %11, 1
%13 = icmp eq i32 %12, 2
br i1 %13, label %14, label %19
14: ; preds = %0
%15 = load i32, i32* %2
%16 = icmp eq i32 %15, 1
%17 = zext i1 %16 to i32
%18 = call i32 @assert(i32 %17)
br label %24
19: ; preds = %0
%20 = load i32, i32* %2
%21 = icmp ne i32 %20, 1
%22 = zext i1 %21 to i32
%23 = call i32 @assert(i32 %22)
br label %24
24: ; preds = %19, %14
%25 = load i32, i32* %2
%26 = sub nsw i32 5, %25
%27 = icmp eq i32 %26, 3
br i1 %27, label %28, label %33
28: ; preds = %24
%29 = load i32, i32* %2
%30 = icmp eq i32 %29, 2
%31 = zext i1 %30 to i32
%32 = call i32 @assert(i32 %31)
br label %38
33: ; preds = %24
%34 = load i32, i32* %2
%35 = icmp ne i32 %34, 2
%36 = zext i1 %35 to i32
%37 = call i32 @assert(i32 %36)
br label %38
38: ; preds = %33, %28
%39 = load i32, i32* %2
%40 = sub nsw i32 5, %39
%41 = icmp eq i32 %40, 3
br i1 %41, label %42, label %59
42: ; preds = %38
%43 = load i32, i32* %2
%44 = load i32, i32* %3
%45 = add nsw i32 %43, %44
%46 = load i32, i32* %2
%47 = mul nsw i32 %46, 3
%48 = icmp eq i32 %45, %47
br i1 %48, label %49, label %59
49: ; preds = %42
%50 = load i32, i32* %2
%51 = icmp eq i32 %50, 2
br i1 %51, label %52, label %55
52: ; preds = %49
%53 = load i32, i32* %3
%54 = icmp eq i32 %53, 4
br label %55
55: ; preds = %52, %49
%56 = phi i1 [ false, %49 ], [ %54, %52 ]
%57 = zext i1 %56 to i32
%58 = call i32 @assert(i32 %57)
br label %59
59: ; preds = %55, %42, %38
%60 = load i32, i32* %2
%61 = icmp eq i32 %60, 3
br i1 %61, label %62, label %81
62: ; preds = %59
%63 = load i32, i32* %3
%64 = load i32, i32* %2
%65 = sdiv i32 %63, %64
%66 = icmp eq i32 %65, 2
br i1 %66, label %67, label %81
67: ; preds = %62
%68 = load i32, i32* %3
%69 = icmp eq i32 %68, 6
%70 = zext i1 %69 to i32
%71 = call i32 @assert(i32 %70)
%72 = load i32, i32* %3
%73 = icmp sge i32 %72, 6
br i1 %73, label %74, label %77
74: ; preds = %67
%75 = load i32, i32* %3
%76 = icmp sle i32 %75, 8
br label %77
77: ; preds = %74, %67
%78 = phi i1 [ false, %67 ], [ %76, %74 ]
%79 = zext i1 %78 to i32
%80 = call i32 @assert(i32 %79)
br label %81
81: ; preds = %77, %62, %59
%82 = load i32, i32* %3
%83 = sdiv i32 %82, 3
%84 = icmp eq i32 %83, -2
br i1 %84, label %85, label %95
85: ; preds = %81
%86 = load i32, i32* %3
%87 = icmp sge i32 %86, -8
br i1 %87, label %88, label %91
88: ; preds = %85
%89 = load i32, i32* %3
%90 = icmp sle i32 %89, -6
br label %91
91: ; preds = %88, %85
%92 = phi i1 [ false, %85 ], [ %90, %88 ]
%93 = zext i1 %92 to i32
%94 = call i32 @assert(i32 %93)
br label %95
95: ; preds = %91, %81
%96 = load i32, i32* %3
%97 = sdiv i32 %96, -3
%98 = icmp eq i32 %97, -2
br i1 %98, label %99, label %109
99: ; preds = %95
%100 = load i32, i32* %3
%101 = icmp sge i32 %100, 6
br i1 %101, label %102, label %105
102: ; preds = %99
%103 = load i32, i32* %3
%104 = icmp sle i32 %103, 8
br label %105
105: ; preds = %102, %99
%106 = phi i1 [ false, %99 ], [ %104, %102 ]
%107 = zext i1 %106 to i32
%108 = call i32 @assert(i32 %107)
br label %109
109: ; preds = %105, %95
%110 = load i32, i32* %3
%111 = load i32, i32* %2
%112 = sdiv i32 %110, %111
%113 = icmp eq i32 %112, 2
br i1 %113, label %114, label %122
114: ; preds = %109
%115 = load i32, i32* %2
%116 = icmp eq i32 %115, 3
br i1 %116, label %117, label %122
117: ; preds = %114
%118 = load i32, i32* %2
%119 = icmp eq i32 %118, 3
%120 = zext i1 %119 to i32
%121 = call i32 @assert(i32 %120)
br label %122
122: ; preds = %117, %114, %109
%123 = load i32, i32* %2
%124 = sub nsw i32 3, %123
%125 = mul nsw i32 %124, 4
%126 = sdiv i32 %125, 5
%127 = add nsw i32 2, %126
%128 = icmp eq i32 %127, 6
br i1 %128, label %129, label %148
129: ; preds = %122
%130 = load i32, i32* %3
%131 = mul nsw i32 2, %130
%132 = load i32, i32* %2
%133 = add nsw i32 %132, 5
%134 = icmp sge i32 %131, %133
br i1 %134, label %135, label %148
135: ; preds = %129
%136 = load i32, i32* %2
%137 = icmp sge i32 %136, -3
br i1 %137, label %138, label %144
138: ; preds = %135
%139 = load i32, i32* %2
%140 = icmp sle i32 %139, -2
br i1 %140, label %141, label %144
141: ; preds = %138
%142 = load i32, i32* %3
%143 = icmp sge i32 %142, 1
br label %144
144: ; preds = %141, %138, %135
%145 = phi i1 [ false, %138 ], [ false, %135 ], [ %143, %141 ]
%146 = zext i1 %145 to i32
%147 = call i32 @assert(i32 %146)
br label %148
148: ; preds = %144, %129, %122
%149 = load i32, i32* %2
%150 = icmp sgt i32 %149, 1
br i1 %150, label %151, label %163
151: ; preds = %148
%152 = load i32, i32* %2
%153 = icmp slt i32 %152, 5
br i1 %153, label %154, label %163
154: ; preds = %151
%155 = load i32, i32* %2
%156 = srem i32 %155, 2
%157 = icmp eq i32 %156, 1
br i1 %157, label %158, label %163
158: ; preds = %154
%159 = load i32, i32* %2
%160 = icmp eq i32 %159, 3
%161 = zext i1 %160 to i32
%162 = call i32 @assert(i32 %161)
br label %163
163: ; preds = %158, %154, %151, %148
%164 = load i64, i64* %4
%165 = add nsw i64 %164, 1
%166 = icmp eq i64 %165, 2
br i1 %166, label %167, label %172
167: ; preds = %163
%168 = load i64, i64* %4
%169 = icmp eq i64 %168, 1
%170 = zext i1 %169 to i32
%171 = call i32 @assert(i32 %170)
br label %177
172: ; preds = %163
%173 = load i64, i64* %4
%174 = icmp ne i64 %173, 1
%175 = zext i1 %174 to i32
%176 = call i32 @assert(i32 %175)
br label %177
177: ; preds = %172, %167
%178 = load i64, i64* %4
%179 = sub nsw i64 5, %178
%180 = icmp eq i64 %179, 3
br i1 %180, label %181, label %186
181: ; preds = %177
%182 = load i64, i64* %4
%183 = icmp eq i64 %182, 2
%184 = zext i1 %183 to i32
%185 = call i32 @assert(i32 %184)
br label %186
186: ; preds = %181, %177
%187 = load i64, i64* %4
%188 = sub nsw i64 5, %187
%189 = icmp eq i64 %188, 3
br i1 %189, label %190, label %207
190: ; preds = %186
%191 = load i64, i64* %4
%192 = load i64, i64* %5
%193 = add nsw i64 %191, %192
%194 = load i64, i64* %4
%195 = mul nsw i64 %194, 3
%196 = icmp eq i64 %193, %195
br i1 %196, label %197, label %207
197: ; preds = %190
%198 = load i64, i64* %4
%199 = icmp eq i64 %198, 2
br i1 %199, label %200, label %203
200: ; preds = %197
%201 = load i64, i64* %5
%202 = icmp eq i64 %201, 4
br label %203
203: ; preds = %200, %197
%204 = phi i1 [ false, %197 ], [ %202, %200 ]
%205 = zext i1 %204 to i32
%206 = call i32 @assert(i32 %205)
br label %207
207: ; preds = %203, %190, %186
%208 = load i64, i64* %4
%209 = icmp eq i64 %208, 3
br i1 %209, label %210, label %220
210: ; preds = %207
%211 = load i64, i64* %5
%212 = load i64, i64* %4
%213 = sdiv i64 %211, %212
%214 = icmp eq i64 %213, 2
br i1 %214, label %215, label %220
215: ; preds = %210
%216 = load i64, i64* %5
%217 = icmp eq i64 %216, 6
%218 = zext i1 %217 to i32
%219 = call i32 @assert(i32 %218)
br label %220
220: ; preds = %215, %210, %207
%221 = load i64, i64* %5
%222 = load i64, i64* %4
%223 = sdiv i64 %221, %222
%224 = icmp eq i64 %223, 2
br i1 %224, label %225, label %233
225: ; preds = %220
%226 = load i64, i64* %4
%227 = icmp eq i64 %226, 3
br i1 %227, label %228, label %233
228: ; preds = %225
%229 = load i64, i64* %4
%230 = icmp eq i64 %229, 3
%231 = zext i1 %230 to i32
%232 = call i32 @assert(i32 %231)
br label %233
233: ; preds = %228, %225, %220
%234 = load i64, i64* %4
%235 = sub nsw i64 3, %234
%236 = mul nsw i64 %235, 4
%237 = sdiv i64 %236, 5
%238 = add nsw i64 2, %237
%239 = icmp eq i64 %238, 6
br i1 %239, label %240, label %256
240: ; preds = %233
%241 = load i64, i64* %5
%242 = mul nsw i64 2, %241
%243 = load i64, i64* %4
%244 = add nsw i64 %243, 4
%245 = icmp sge i64 %242, %244
br i1 %245, label %246, label %256
246: ; preds = %240
%247 = load i64, i64* %4
%248 = icmp eq i64 %247, -2
br i1 %248, label %249, label %252
249: ; preds = %246
%250 = load i64, i64* %5
%251 = icmp sge i64 %250, 1
br label %252
252: ; preds = %249, %246
%253 = phi i1 [ false, %246 ], [ %251, %249 ]
%254 = zext i1 %253 to i32
%255 = call i32 @assert(i32 %254)
br label %256
256: ; preds = %252, %240, %233
%257 = load i64, i64* %4
%258 = icmp sgt i64 %257, 1
br i1 %258, label %259, label %267
259: ; preds = %256
%260 = load i64, i64* %4
%261 = icmp slt i64 %260, 5
br i1 %261, label %262, label %267
262: ; preds = %259
%263 = load i64, i64* %4
%264 = srem i64 %263, 2
%265 = icmp eq i64 %264, 1
br i1 %265, label %266, label %267
266: ; preds = %262
br label %267
267: ; preds = %266, %262, %259, %256
%268 = load i16, i16* %7
%269 = sext i16 %268 to i32
%270 = add nsw i32 %269, 1
%271 = icmp eq i32 %270, 2
br i1 %271, label %272, label %278
272: ; preds = %267
%273 = load i16, i16* %7
%274 = sext i16 %273 to i32
%275 = icmp eq i32 %274, 1
%276 = zext i1 %275 to i32
%277 = call i32 @assert(i32 %276)
br label %279
278: ; preds = %267
br label %279
279: ; preds = %278, %272
%280 = load i16, i16* %7
%281 = sext i16 %280 to i32
%282 = sub nsw i32 5, %281
%283 = icmp eq i32 %282, 3
br i1 %283, label %284, label %290
284: ; preds = %279
%285 = load i16, i16* %7
%286 = sext i16 %285 to i32
%287 = icmp eq i32 %286, 2
%288 = zext i1 %287 to i32
%289 = call i32 @assert(i32 %288)
br label %290
290: ; preds = %284, %279
%291 = load i16, i16* %7
%292 = sext i16 %291 to i32
%293 = sub nsw i32 5, %292
%294 = icmp eq i32 %293, 3
br i1 %294, label %295, label %317
295: ; preds = %290
%296 = load i16, i16* %7
%297 = sext i16 %296 to i32
%298 = load i16, i16* %8
%299 = sext i16 %298 to i32
%300 = add nsw i32 %297, %299
%301 = load i16, i16* %7
%302 = sext i16 %301 to i32
%303 = mul nsw i32 %302, 3
%304 = icmp eq i32 %300, %303
br i1 %304, label %305, label %317
305: ; preds = %295
%306 = load i16, i16* %7
%307 = sext i16 %306 to i32
%308 = icmp eq i32 %307, 2
br i1 %308, label %309, label %313
309: ; preds = %305
%310 = load i16, i16* %8
%311 = sext i16 %310 to i32
%312 = icmp eq i32 %311, 4
br label %313
313: ; preds = %309, %305
%314 = phi i1 [ false, %305 ], [ %312, %309 ]
%315 = zext i1 %314 to i32
%316 = call i32 @assert(i32 %315)
br label %317
317: ; preds = %313, %295, %290
%318 = load i16, i16* %7
%319 = sext i16 %318 to i32
%320 = icmp eq i32 %319, 3
br i1 %320, label %321, label %345
321: ; preds = %317
%322 = load i16, i16* %8
%323 = sext i16 %322 to i32
%324 = load i16, i16* %7
%325 = sext i16 %324 to i32
%326 = sdiv i32 %323, %325
%327 = icmp eq i32 %326, 2
br i1 %327, label %328, label %345
328: ; preds = %321
%329 = load i16, i16* %8
%330 = sext i16 %329 to i32
%331 = icmp eq i32 %330, 6
%332 = zext i1 %331 to i32
%333 = call i32 @assert(i32 %332)
%334 = load i16, i16* %8
%335 = sext i16 %334 to i32
%336 = icmp sge i32 %335, 6
br i1 %336, label %337, label %341
337: ; preds = %328
%338 = load i16, i16* %8
%339 = sext i16 %338 to i32
%340 = icmp sle i32 %339, 8
br label %341
341: ; preds = %337, %328
%342 = phi i1 [ false, %328 ], [ %340, %337 ]
%343 = zext i1 %342 to i32
%344 = call i32 @assert(i32 %343)
br label %345
345: ; preds = %341, %321, %317
%346 = load i16, i16* %8
%347 = sext i16 %346 to i32
%348 = sdiv i32 %347, 3
%349 = icmp eq i32 %348, -2
br i1 %349, label %350, label %362
350: ; preds = %345
%351 = load i16, i16* %8
%352 = sext i16 %351 to i32
%353 = icmp sge i32 %352, -8
br i1 %353, label %354, label %358
354: ; preds = %350
%355 = load i16, i16* %8
%356 = sext i16 %355 to i32
%357 = icmp sle i32 %356, -6
br label %358
358: ; preds = %354, %350
%359 = phi i1 [ false, %350 ], [ %357, %354 ]
%360 = zext i1 %359 to i32
%361 = call i32 @assert(i32 %360)
br label %362
362: ; preds = %358, %345
%363 = load i16, i16* %8
%364 = sext i16 %363 to i32
%365 = sdiv i32 %364, -3
%366 = icmp eq i32 %365, -2
br i1 %366, label %367, label %379
367: ; preds = %362
%368 = load i16, i16* %8
%369 = sext i16 %368 to i32
%370 = icmp sge i32 %369, 6
br i1 %370, label %371, label %375
371: ; preds = %367
%372 = load i16, i16* %8
%373 = sext i16 %372 to i32
%374 = icmp sle i32 %373, 8
br label %375
375: ; preds = %371, %367
%376 = phi i1 [ false, %367 ], [ %374, %371 ]
%377 = zext i1 %376 to i32
%378 = call i32 @assert(i32 %377)
br label %379
379: ; preds = %375, %362
%380 = load i16, i16* %8
%381 = sext i16 %380 to i32
%382 = load i16, i16* %7
%383 = sext i16 %382 to i32
%384 = sdiv i32 %381, %383
%385 = icmp eq i32 %384, 2
br i1 %385, label %386, label %396
386: ; preds = %379
%387 = load i16, i16* %7
%388 = sext i16 %387 to i32
%389 = icmp eq i32 %388, 3
br i1 %389, label %390, label %396
390: ; preds = %386
%391 = load i16, i16* %7
%392 = sext i16 %391 to i32
%393 = icmp eq i32 %392, 3
%394 = zext i1 %393 to i32
%395 = call i32 @assert(i32 %394)
br label %396
396: ; preds = %390, %386, %379
%397 = load i16, i16* %7
%398 = sext i16 %397 to i32
%399 = sub nsw i32 3, %398
%400 = mul nsw i32 %399, 4
%401 = sdiv i32 %400, 5
%402 = add nsw i32 2, %401
%403 = icmp eq i32 %402, 6
br i1 %403, label %404, label %439
404: ; preds = %396
%405 = load i16, i16* %8
%406 = sext i16 %405 to i32
%407 = mul nsw i32 2, %406
%408 = load i16, i16* %7
%409 = sext i16 %408 to i32
%410 = add nsw i32 %409, 5
%411 = icmp sge i32 %407, %410
br i1 %411, label %412, label %439
412: ; preds = %404
%413 = load i16, i16* %7
%414 = sext i16 %413 to i32
%415 = icmp eq i32 %414, -2
br i1 %415, label %416, label %420
416: ; preds = %412
%417 = load i16, i16* %8
%418 = sext i16 %417 to i32
%419 = icmp sge i32 %418, 1
br label %420
420: ; preds = %416, %412
%421 = phi i1 [ false, %412 ], [ %419, %416 ]
%422 = zext i1 %421 to i32
%423 = call i32 @assert(i32 %422)
%424 = load i16, i16* %7
%425 = sext i16 %424 to i32
%426 = icmp sge i32 %425, -3
br i1 %426, label %427, label %435
427: ; preds = %420
%428 = load i16, i16* %7
%429 = sext i16 %428 to i32
%430 = icmp sle i32 %429, -2
br i1 %430, label %431, label %435
431: ; preds = %427
%432 = load i16, i16* %8
%433 = sext i16 %432 to i32
%434 = icmp sge i32 %433, 1
br label %435
435: ; preds = %431, %427, %420
%436 = phi i1 [ false, %427 ], [ false, %420 ], [ %434, %431 ]
%437 = zext i1 %436 to i32
%438 = call i32 @assert(i32 %437)
br label %439
439: ; preds = %435, %404, %396
%440 = load i16, i16* %7
%441 = sext i16 %440 to i32
%442 = icmp sgt i32 %441, 1
br i1 %442, label %443, label %458
443: ; preds = %439
%444 = load i16, i16* %7
%445 = sext i16 %444 to i32
%446 = icmp slt i32 %445, 5
br i1 %446, label %447, label %458
447: ; preds = %443
%448 = load i16, i16* %7
%449 = sext i16 %448 to i32
%450 = srem i32 %449, 2
%451 = icmp eq i32 %450, 1
br i1 %451, label %452, label %458
452: ; preds = %447
%453 = load i16, i16* %7
%454 = sext i16 %453 to i32
%455 = icmp ne i32 %454, 2
%456 = zext i1 %455 to i32
%457 = call i32 @assert(i32 %456)
br label %458
458: ; preds = %452, %447, %443, %439
%459 = load i32, i32* %1
ret i32 %459
}

LLVM IR (-O2):
define i32 @main() {
%1 = tail call i32 (...) @main2()
%2 = tail call i32 @assert(i32 0)
%3 = tail call i32 @assert(i32 0)
%4 = tail call i32 @assert(i32 0)
ret i32 0
}