#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*/ printf(char *);
int main(void) {
  int x = 0, y = 0, a = 0, b = 0, g = 0, i = 0, j = 0;
  printf("\n\nCase A\n");
  if (!(x < 5) && !(y >= 7))
    printf("True\n");
  else
    printf("False\n");
  if (!((x < 5) || (y >= 7)))
    printf("True\n");
  else
    printf("False\n");
  printf("\n\nCase B\n");
  if (!(a == b) || !(g != 5))
    printf("True\n");
  else
    printf("False\n");
  if (!((a == b) && (g != 5)))
    printf("True\n");
  else
    printf("False\n");
  printf("\n\nCase C\n");
  if (!((x <= 8) && (y > 4)))
    printf("True\n");
  else
    printf("False\n");
  if (!(x <= 8) || !(y > 4))
    printf("True\n");
  else
    printf("False\n");
  printf("\n\nCase D\n");
  if (!((i > 4) || (j <= 6)))
    printf("True\n");
  else
    printf("False\n");
  if (!(i > 4) && !(j <= 6))
    printf("True\n");
  else
    printf("False\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
lea    0xea9(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x5,-0x8(%rbp)
jl     1181 <main+0x71>
cmpl   $0x7,-0xc(%rbp)
jge    1181 <main+0x71>
lea    0xe93(%rip),%rdi
call   1030 <printf@plt>
jmp    118d <main+0x7d>
lea    0xe88(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x5,-0x8(%rbp)
jl     11b2 <main+0xa2>
cmpl   $0x7,-0xc(%rbp)
jge    11b2 <main+0xa2>
lea    0xe62(%rip),%rdi
call   1030 <printf@plt>
jmp    11be <main+0xae>
lea    0xe57(%rip),%rdi
call   1030 <printf@plt>
lea    0xe52(%rip),%rdi
call   1030 <printf@plt>
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    11e0 <main+0xd0>
cmpl   $0x5,-0x18(%rbp)
jne    11f1 <main+0xe1>
lea    0xe23(%rip),%rdi
call   1030 <printf@plt>
jmp    11fd <main+0xed>
lea    0xe18(%rip),%rdi
call   1030 <printf@plt>
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    1213 <main+0x103>
cmpl   $0x5,-0x18(%rbp)
jne    1224 <main+0x114>
lea    0xdf0(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x120>
lea    0xde5(%rip),%rdi
call   1030 <printf@plt>
lea    0xdea(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x8,-0x8(%rbp)
jg     1250 <main+0x140>
cmpl   $0x4,-0xc(%rbp)
jg     1261 <main+0x151>
lea    0xdb3(%rip),%rdi
call   1030 <printf@plt>
jmp    126d <main+0x15d>
lea    0xda8(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x8,-0x8(%rbp)
jg     1281 <main+0x171>
cmpl   $0x4,-0xc(%rbp)
jg     1292 <main+0x182>
lea    0xd82(%rip),%rdi
call   1030 <printf@plt>
jmp    129e <main+0x18e>
lea    0xd77(%rip),%rdi
call   1030 <printf@plt>
lea    0xd86(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x4,-0x1c(%rbp)
jg     12cf <main+0x1bf>
cmpl   $0x6,-0x20(%rbp)
jle    12cf <main+0x1bf>
lea    0xd45(%rip),%rdi
call   1030 <printf@plt>
jmp    12db <main+0x1cb>
lea    0xd3a(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x4,-0x1c(%rbp)
jg     1300 <main+0x1f0>
cmpl   $0x6,-0x20(%rbp)
jle    1300 <main+0x1f0>
lea    0xd14(%rip),%rdi
call   1030 <printf@plt>
jmp    130c <main+0x1fc>
lea    0xd09(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
push   %rax
lea    0xee5(%rip),%rdi
call   1030 <puts@plt>
lea    0xf02(%rip),%rbx
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0xecb(%rip),%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0xeb8(%rip),%rdi
call   1030 <puts@plt>
lea    0xeb5(%rip),%r14
mov    %r14,%rdi
call   1030 <puts@plt>
mov    %r14,%rdi
call   1030 <puts@plt>
lea    0xea3(%rip),%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@.str = [10 x i8] c"\0A\0ACase A\0A\00"
@.str.1 = [6 x i8] c"True\0A\00"
@.str.2 = [7 x i8] c"False\0A\00"
@.str.3 = [10 x i8] c"\0A\0ACase B\0A\00"
@.str.4 = [10 x i8] c"\0A\0ACase C\0A\00"
@.str.5 = [10 x i8] c"\0A\0ACase D\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %2
store i32 0, i32* %3
store i32 0, i32* %4
store i32 0, i32* %5
store i32 0, i32* %6
store i32 0, i32* %7
store i32 0, i32* %8
%9 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0))
%10 = load i32, i32* %2
%11 = icmp slt i32 %10, 5
br i1 %11, label %17, label %12
12: ; preds = %0
%13 = load i32, i32* %3
%14 = icmp sge i32 %13, 7
br i1 %14, label %17, label %15
15: ; preds = %12
%16 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %19
17: ; preds = %12, %0
%18 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %19
19: ; preds = %17, %15
%20 = load i32, i32* %2
%21 = icmp slt i32 %20, 5
br i1 %21, label %27, label %22
22: ; preds = %19
%23 = load i32, i32* %3
%24 = icmp sge i32 %23, 7
br i1 %24, label %27, label %25
25: ; preds = %22
%26 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %29
27: ; preds = %22, %19
%28 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %29
29: ; preds = %27, %25
%30 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.3, i64 0, i64 0))
%31 = load i32, i32* %4
%32 = load i32, i32* %5
%33 = icmp eq i32 %31, %32
br i1 %33, label %34, label %37
34: ; preds = %29
%35 = load i32, i32* %6
%36 = icmp ne i32 %35, 5
br i1 %36, label %39, label %37
37: ; preds = %34, %29
%38 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %41
39: ; preds = %34
%40 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %41
41: ; preds = %39, %37
%42 = load i32, i32* %4
%43 = load i32, i32* %5
%44 = icmp eq i32 %42, %43
br i1 %44, label %45, label %48
45: ; preds = %41
%46 = load i32, i32* %6
%47 = icmp ne i32 %46, 5
br i1 %47, label %50, label %48
48: ; preds = %45, %41
%49 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %52
50: ; preds = %45
%51 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %52
52: ; preds = %50, %48
%53 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0))
%54 = load i32, i32* %2
%55 = icmp sle i32 %54, 8
br i1 %55, label %56, label %59
56: ; preds = %52
%57 = load i32, i32* %3
%58 = icmp sgt i32 %57, 4
br i1 %58, label %61, label %59
59: ; preds = %56, %52
%60 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %63
61: ; preds = %56
%62 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %63
63: ; preds = %61, %59
%64 = load i32, i32* %2
%65 = icmp sle i32 %64, 8
br i1 %65, label %66, label %69
66: ; preds = %63
%67 = load i32, i32* %3
%68 = icmp sgt i32 %67, 4
br i1 %68, label %71, label %69
69: ; preds = %66, %63
%70 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %73
71: ; preds = %66
%72 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %73
73: ; preds = %71, %69
%74 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i64 0, i64 0))
%75 = load i32, i32* %7
%76 = icmp sgt i32 %75, 4
br i1 %76, label %82, label %77
77: ; preds = %73
%78 = load i32, i32* %8
%79 = icmp sle i32 %78, 6
br i1 %79, label %82, label %80
80: ; preds = %77
%81 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %84
82: ; preds = %77, %73
%83 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %84
84: ; preds = %82, %80
%85 = load i32, i32* %7
%86 = icmp sgt i32 %85, 4
br i1 %86, label %92, label %87
87: ; preds = %84
%88 = load i32, i32* %8
%89 = icmp sle i32 %88, 6
br i1 %89, label %92, label %90
90: ; preds = %87
%91 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %94
92: ; preds = %87, %84
%93 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %94
94: ; preds = %92, %90
ret i32 0
}

LLVM IR (-O2):
@str = [9 x i8] c"\0A\0ACase A\00"
@str.8 = [9 x i8] c"\0A\0ACase B\00"
@str.11 = [9 x i8] c"\0A\0ACase C\00"
@str.13 = [5 x i8] c"True\00"
@str.14 = [9 x i8] c"\0A\0ACase D\00"
@str.16 = [6 x i8] c"False\00"
define i32 @main() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str.16, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str.16, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.8, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str.16, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str.16, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.11, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.13, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.13, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.14, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str.16, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str.16, i64 0, i64 0))
ret i32 0
}