#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 main() {
  signed char r;
  if (r) {
    r = -68;
  } else {
    r = -63;
  }
  signed char k = r - 80;
  assert(k == 0);
  signed char non_ov = r - 10;
  assert(non_ov == -78);
  signed char m = r * 2;
  assert(m == 0);
  signed char l = r + (-80);
  assert(l == 0);
  int g;
  if (g) {
    g = -126;
  } else {
    g = -128;
  }
  signed char f = g / (-1);
  assert(f == 1);
  signed char d = -g;
  assert(d == 1);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
cmpb   $0x0,-0x5(%rbp)
je     1132 <main+0x22>
movb   $0xbc,-0x5(%rbp)
jmp    1136 <main+0x26>
movb   $0xc1,-0x5(%rbp)
movsbl -0x5(%rbp),%eax
sub    $0x50,%eax
mov    %al,-0x6(%rbp)
movsbl -0x6(%rbp),%eax
cmp    $0x0,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movsbl -0x5(%rbp),%eax
sub    $0xa,%eax
mov    %al,-0x7(%rbp)
movsbl -0x7(%rbp),%eax
cmp    $0xffffffb2,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movsbl -0x5(%rbp),%eax
shl    $0x1,%eax
mov    %al,-0x8(%rbp)
movsbl -0x8(%rbp),%eax
cmp    $0x0,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movsbl -0x5(%rbp),%eax
add    $0xffffffb0,%eax
mov    %al,-0x9(%rbp)
movsbl -0x9(%rbp),%eax
cmp    $0x0,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
cmpl   $0x0,-0x10(%rbp)
je     11c4 <main+0xb4>
movl   $0xffffff82,-0x10(%rbp)
jmp    11cb <main+0xbb>
movl   $0xffffff80,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    $0xffffffff,%ecx
cltd
idiv   %ecx
mov    %al,-0x11(%rbp)
movsbl -0x11(%rbp),%eax
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
xor    %eax,%eax
sub    -0x10(%rbp),%eax
mov    %al,-0x12(%rbp)
movsbl -0x12(%rbp),%eax
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
xor    %edi,%edi
call   1030 <assert@plt>
xor    %edi,%edi
call   1030 <assert@plt>
xor    %edi,%edi
call   1030 <assert@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 i8
%3 = alloca i8
%4 = alloca i8
%5 = alloca i8
%6 = alloca i8
%7 = alloca i32
%8 = alloca i8
%9 = alloca i8
store i32 0, i32* %1
%10 = load i8, i8* %2
%11 = icmp ne i8 %10, 0
br i1 %11, label %12, label %13
12: ; preds = %0
store i8 -68, i8* %2
br label %14
13: ; preds = %0
store i8 -63, i8* %2
br label %14
14: ; preds = %13, %12
%15 = load i8, i8* %2
%16 = sext i8 %15 to i32
%17 = sub nsw i32 %16, 80
%18 = trunc i32 %17 to i8
store i8 %18, i8* %3
%19 = load i8, i8* %3
%20 = sext i8 %19 to i32
%21 = icmp eq i32 %20, 0
%22 = zext i1 %21 to i32
%23 = call i32 @assert(i32 %22)
%24 = load i8, i8* %2
%25 = sext i8 %24 to i32
%26 = sub nsw i32 %25, 10
%27 = trunc i32 %26 to i8
store i8 %27, i8* %4
%28 = load i8, i8* %4
%29 = sext i8 %28 to i32
%30 = icmp eq i32 %29, -78
%31 = zext i1 %30 to i32
%32 = call i32 @assert(i32 %31)
%33 = load i8, i8* %2
%34 = sext i8 %33 to i32
%35 = mul nsw i32 %34, 2
%36 = trunc i32 %35 to i8
store i8 %36, i8* %5
%37 = load i8, i8* %5
%38 = sext i8 %37 to i32
%39 = icmp eq i32 %38, 0
%40 = zext i1 %39 to i32
%41 = call i32 @assert(i32 %40)
%42 = load i8, i8* %2
%43 = sext i8 %42 to i32
%44 = add nsw i32 %43, -80
%45 = trunc i32 %44 to i8
store i8 %45, i8* %6
%46 = load i8, i8* %6
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 0
%49 = zext i1 %48 to i32
%50 = call i32 @assert(i32 %49)
%51 = load i32, i32* %7
%52 = icmp ne i32 %51, 0
br i1 %52, label %53, label %54
53: ; preds = %14
store i32 -126, i32* %7
br label %55
54: ; preds = %14
store i32 -128, i32* %7
br label %55
55: ; preds = %54, %53
%56 = load i32, i32* %7
%57 = sdiv i32 %56, -1
%58 = trunc i32 %57 to i8
store i8 %58, i8* %8
%59 = load i8, i8* %8
%60 = sext i8 %59 to i32
%61 = icmp eq i32 %60, 1
%62 = zext i1 %61 to i32
%63 = call i32 @assert(i32 %62)
%64 = load i32, i32* %7
%65 = sub nsw i32 0, %64
%66 = trunc i32 %65 to i8
store i8 %66, i8* %9
%67 = load i8, i8* %9
%68 = sext i8 %67 to i32
%69 = icmp eq i32 %68, 1
%70 = zext i1 %69 to i32
%71 = call i32 @assert(i32 %70)
ret i32 0
}

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