#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 /*<<< orphan*/ test_assignment();
int main(void) {
  int result;
  int x = 312, y = -2, flag = 0;
  test_assignment();
  printf("x = %d, y = %d, flag = %d, LIMIT = %d\n\n", x, y, flag, 999);
  printf("Relational operators: \n");
  result = (x > y);
  printf("x > y -> result = %d \n", result);
  result = (y < 999);
  printf("y < LIMIT -> result = %d \n", result);
  result = (y >= 999);
  printf("y >= LIMIT -> result = %d \n", result);
  result = (x <= 999);
  printf("x <= LIMIT -> result = %d \n", result);
  printf("\nEquality operators: \n");
  result = (y == 999);
  printf("y == LIMIT -> result = %d \n", result);
  result = (y != x);
  printf("y != x -> result = %d \n", result);
  printf("\nLogic operators: \n");
  result = x != y || y > 0.0 && x > 999;
  printf("x != y || y > 0.0 && x > LIMIT -> result = %d \n", result);
  result = (x != y || y > 0.0) && x > 999;
  printf("(x != y || y > 0.0 ) && x > LIMIT  -> result = %d \n", result);
  result = (x == y);
  printf("x == y -> result = %d \n", result);
  result = (!(x == y));
  printf("!( x == y ) -> result = %d \n", result);
  printf("\nFinding the complement of a complex condition: \n");
  result = x > 0 && y < 0;
  printf("x > 0 && y < 0 -> result = %d\n", result);
  result = x <= 0 || y >= 0;
  printf("x <= 0 || y >= 0 -> result = %d\n", result);
  result = x < 0 || y < 0;
  printf("x < 0 || y < 0 -> result = %d\n", result);
  result = x >= 0 && y >= 0;
  printf("x >= 0 && y >= 0 -> result = %d\n", result);
  printf("\nShort-circuit evaluation: \n");
  result = (flag && (x > y));
  printf("flag && ( x > y ) -> result = %d \n", result);
  result = (!flag || (x < y));
  printf("!flag || ( x < y ) -> result = %d \n", result);
  printf("\nComparing characers: \n");
  char ex1 = '!';
  result = ('a' < 'b');
  printf("a < b -> %d\n", result);
  result = ('a' < 'A');
  printf("a < A -> %d\n", result);
  result = ('A' <= ex1 && ex1 <= 'Z') || ('a' <= ex1 && ex1 <= 'z');
  printf("%c is a letter -> %d\n", ex1, result);
  printf("\nif statements: \n");
  if (x > y) {
    printf("x is greater than y\n");
  }
  if (x > 999) {
    printf("x is greater than LIMIT\n");
  } else {
    printf("x is less than LIMIT\n");
    if (y < 0.0) {
      printf("y is less than zero\n");
    } else {
      printf("y is greater than zero\n");
    }
  }
  if (x == y) {
    printf("x == y\n");
  } else if (x == 999) {
    printf("x == LIMIT\n");
  } else if (y > 0.0) {
    printf("y > 0.0\n");
  } else {
    printf("none of the above\n");
  }
  if (x <= 500) {
    printf("less than 500\n");
  } else if (x <= 350) {
    printf("less than 350\n");
  }
  if (x <= 350) {
    printf("less than 350\n");
  } else if (x <= 500) {
    printf("less than 500\n");
  }
  printf("\nswitch statements: \n");
  switch (x) {
  case 1:
  case 2:
    printf("x was 1 or 2\n");
    break;
  default:
    printf("x was not 1 or 2\n");
    break;
  }
  switch (ex1) {
  case 'A':
  case 'B':
  case 'G': {
    printf("I was expecting the letter %c \n", ex1);
  } break;
  default:
    printf("Not sure what to do with %c \n", ex1);
    break;
  }
  return (0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x138,-0xc(%rbp)
movl   $0xfffffffe,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    $0x0,%al
call   1040 <test_assignment@plt>
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
lea    0xea5(%rip),%rdi
mov    $0x3e7,%r8d
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xeb9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
setg   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xeaf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x3e7,-0x10(%rbp)
setl   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xea3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x3e7,-0x10(%rbp)
setge  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe9b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x3e7,-0xc(%rbp)
setle  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe94(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xea2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x3e7,-0x10(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe96(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe90(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe9a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%ecx
mov    $0x1,%al
cmp    -0x10(%rbp),%ecx
mov    %al,-0x16(%rbp)
jne    129d <main+0x17d>
cvtsi2sdl -0x10(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x17(%rbp)
jbe    1297 <main+0x177>
cmpl   $0x3e7,-0xc(%rbp)
setg   %al
mov    %al,-0x17(%rbp)
mov    -0x17(%rbp),%al
mov    %al,-0x16(%rbp)
mov    -0x16(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe57(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jne    12dc <main+0x1bc>
cvtsi2sdl -0x10(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x18(%rbp)
jbe    12e9 <main+0x1c9>
cmpl   $0x3e7,-0xc(%rbp)
setg   %al
mov    %al,-0x18(%rbp)
mov    -0x18(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe3b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe4d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
sete   %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe41(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe50(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
cmpl   $0x0,-0xc(%rbp)
mov    %al,-0x19(%rbp)
jle    1372 <main+0x252>
cmpl   $0x0,-0x10(%rbp)
setl   %al
mov    %al,-0x19(%rbp)
mov    -0x19(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe4d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    $0x1,%al
cmpl   $0x0,-0xc(%rbp)
mov    %al,-0x1a(%rbp)
jle    13a7 <main+0x287>
cmpl   $0x0,-0x10(%rbp)
setge  %al
mov    %al,-0x1a(%rbp)
mov    -0x1a(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe37(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    $0x1,%al
cmpl   $0x0,-0xc(%rbp)
mov    %al,-0x1b(%rbp)
jl     13dc <main+0x2bc>
cmpl   $0x0,-0x10(%rbp)
setl   %al
mov    %al,-0x1b(%rbp)
mov    -0x1b(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe23(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
cmpl   $0x0,-0xc(%rbp)
mov    %al,-0x1c(%rbp)
jl     1411 <main+0x2f1>
cmpl   $0x0,-0x10(%rbp)
setge  %al
mov    %al,-0x1c(%rbp)
mov    -0x1c(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe0d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe20(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
cmpl   $0x0,-0x14(%rbp)
mov    %al,-0x1d(%rbp)
je     1456 <main+0x336>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
setg   %al
mov    %al,-0x1d(%rbp)
mov    -0x1d(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe06(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    $0x1,%al
cmpl   $0x0,-0x14(%rbp)
mov    %al,-0x1e(%rbp)
je     148d <main+0x36d>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
setl   %al
mov    %al,-0x1e(%rbp)
mov    -0x1e(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xdf2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe08(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movb   $0x21,-0x15(%rbp)
movl   $0x1,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xe04(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%esi
lea    0xdf9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x15(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jg     150e <main+0x3ee>
movsbl -0x15(%rbp),%ecx
mov    $0x1,%al
cmp    $0x5a,%ecx
mov    %al,-0x1f(%rbp)
jle    1537 <main+0x417>
movsbl -0x15(%rbp),%edx
xor    %eax,%eax
mov    $0x61,%ecx
cmp    %edx,%ecx
mov    %al,-0x20(%rbp)
jg     1531 <main+0x411>
movsbl -0x15(%rbp),%eax
cmp    $0x7a,%eax
setle  %al
mov    %al,-0x20(%rbp)
mov    -0x20(%rbp),%al
mov    %al,-0x1f(%rbp)
mov    -0x1f(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x8(%rbp)
movsbl -0x15(%rbp),%esi
mov    -0x8(%rbp),%edx
lea    0xd9a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xda2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    157f <main+0x45f>
lea    0xd9a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x3e7,-0xc(%rbp)
jle    159f <main+0x47f>
lea    0xd94(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    15e5 <main+0x4c5>
lea    0xd9a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cvtsi2sdl -0x10(%rbp),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    15d2 <main+0x4b2>
lea    0xd90(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    15e0 <main+0x4c0>
lea    0xd92(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    15e5 <main+0x4c5>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jne    1604 <main+0x4e4>
lea    0xd8b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1661 <main+0x541>
cmpl   $0x3e7,-0xc(%rbp)
jne    1624 <main+0x504>
lea    0xd73(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    165c <main+0x53c>
cvtsi2sdl -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1649 <main+0x529>
lea    0xd5a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1657 <main+0x537>
lea    0xd50(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    165c <main+0x53c>
jmp    1661 <main+0x541>
cmpl   $0x1f4,-0xc(%rbp)
jg     1681 <main+0x561>
lea    0xd3e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    16a1 <main+0x581>
cmpl   $0x15e,-0xc(%rbp)
jg     169c <main+0x57c>
lea    0xd2d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    16a1 <main+0x581>
cmpl   $0x15e,-0xc(%rbp)
jg     16c1 <main+0x5a1>
lea    0xd0d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    16e1 <main+0x5c1>
cmpl   $0x1f4,-0xc(%rbp)
jg     16dc <main+0x5bc>
lea    0xcde(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    16e1 <main+0x5c1>
lea    0xce9(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
sub    $0x1,%eax
ja     1716 <main+0x5f6>
jmp    1703 <main+0x5e3>
lea    0xcdd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1724 <main+0x604>
lea    0xcd8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x15(%rbp),%eax
mov    %eax,-0x24(%rbp)
add    $0xffffffbf,%eax
sub    $0x2,%eax
jb     174d <main+0x62d>
jmp    173c <main+0x61c>
mov    -0x24(%rbp),%eax
sub    $0x47,%eax
jne    1764 <main+0x644>
jmp    174d <main+0x62d>
movsbl -0x15(%rbp),%esi
lea    0xcaf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1776 <main+0x656>
movsbl -0x15(%rbp),%esi
lea    0xcb8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
xor    %eax,%eax
call   1050 <test_assignment@plt>
lea    0xec1(%rip),%rdi
mov    $0x138,%esi
mov    $0xfffffffe,%edx
xor    %ecx,%ecx
mov    $0x3e7,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x1115(%rip),%rdi
call   1030 <puts@plt>
lea    0xebd(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xec1(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xec9(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xed5(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x10d7(%rip),%rdi
call   1030 <puts@plt>
lea    0xed2(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xede(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x10be(%rip),%rdi
call   1030 <puts@plt>
lea    0xed7(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xef4(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf18(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf20(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x107f(%rip),%rdi
call   1030 <puts@plt>
lea    0xf1e(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf2a(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf3b(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf47(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x105e(%rip),%rdi
call   1030 <puts@plt>
lea    0xf4c(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf5f(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x104b(%rip),%rdi
call   1030 <puts@plt>
lea    0xf64(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf5e(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf5b(%rip),%rdi
mov    $0x21,%esi
xor    %edx,%edx
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x101e(%rip),%rdi
call   1030 <puts@plt>
lea    0x1023(%rip),%rdi
call   1030 <puts@plt>
lea    0x102b(%rip),%rdi
call   1030 <puts@plt>
lea    0x1034(%rip),%rdi
call   1030 <puts@plt>
lea    0x103c(%rip),%rdi
call   1030 <puts@plt>
lea    0x1042(%rip),%rdi
call   1030 <puts@plt>
lea    0x1044(%rip),%rdi
call   1030 <puts@plt>
lea    0x1046(%rip),%rdi
call   1030 <puts@plt>
lea    0x104f(%rip),%rdi
call   1030 <puts@plt>
lea    0xef0(%rip),%rdi
mov    $0x21,%esi
xor    %eax,%eax
call   1040 <printf@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [40 x i8] c"x = %d, y = %d, flag = %d, LIMIT = %d\0A\0A\00"
@.str.1 = [24 x i8] c"Relational operators: \0A\00"
@.str.2 = [23 x i8] c"x > y -> result = %d \0A\00"
@.str.3 = [27 x i8] c"y < LIMIT -> result = %d \0A\00"
@.str.4 = [28 x i8] c"y >= LIMIT -> result = %d \0A\00"
@.str.5 = [28 x i8] c"x <= LIMIT -> result = %d \0A\00"
@.str.6 = [23 x i8] c"\0AEquality operators: \0A\00"
@.str.7 = [28 x i8] c"y == LIMIT -> result = %d \0A\00"
@.str.8 = [24 x i8] c"y != x -> result = %d \0A\00"
@.str.9 = [20 x i8] c"\0ALogic operators: \0A\00"
@.str.10 = [48 x i8] c"x != y || y > 0.0 && x > LIMIT -> result = %d \0A\00"
@.str.11 = [52 x i8] c"(x != y || y > 0.0 ) && x > LIMIT -> result = %d \0A\00"
@.str.12 = [24 x i8] c"x == y -> result = %d \0A\00"
@.str.13 = [29 x i8] c"!( x == y ) -> result = %d \0A\00"
@.str.14 = [50 x i8] c"\0AFinding the complement of a complex condition: \0A\00"
@.str.15 = [31 x i8] c"x > 0 && y < 0 -> result = %d\0A\00"
@.str.16 = [33 x i8] c"x <= 0 || y >= 0 -> result = %d\0A\00"
@.str.17 = [31 x i8] c"x < 0 || y < 0 -> result = %d\0A\00"
@.str.18 = [33 x i8] c"x >= 0 && y >= 0 -> result = %d\0A\00"
@.str.19 = [29 x i8] c"\0AShort-circuit evaluation: \0A\00"
@.str.20 = [35 x i8] c"flag && ( x > y ) -> result = %d \0A\00"
@.str.21 = [36 x i8] c"!flag || ( x < y ) -> result = %d \0A\00"
@.str.22 = [24 x i8] c"\0AComparing characers: \0A\00"
@.str.23 = [13 x i8] c"a < b -> %d\0A\00"
@.str.24 = [13 x i8] c"a < A -> %d\0A\00"
@.str.25 = [22 x i8] c"%c is a letter -> %d\0A\00"
@.str.26 = [18 x i8] c"\0Aif statements: \0A\00"
@.str.27 = [21 x i8] c"x is greater than y\0A\00"
@.str.28 = [25 x i8] c"x is greater than LIMIT\0A\00"
@.str.29 = [22 x i8] c"x is less than LIMIT\0A\00"
@.str.30 = [21 x i8] c"y is less than zero\0A\00"
@.str.31 = [24 x i8] c"y is greater than zero\0A\00"
@.str.32 = [8 x i8] c"x == y\0A\00"
@.str.33 = [12 x i8] c"x == LIMIT\0A\00"
@.str.34 = [9 x i8] c"y > 0.0\0A\00"
@.str.35 = [19 x i8] c"none of the above\0A\00"
@.str.36 = [15 x i8] c"less than 500\0A\00"
@.str.37 = [15 x i8] c"less than 350\0A\00"
@.str.38 = [22 x i8] c"\0Aswitch statements: \0A\00"
@.str.39 = [14 x i8] c"x was 1 or 2\0A\00"
@.str.40 = [18 x i8] c"x was not 1 or 2\0A\00"
@.str.41 = [32 x i8] c"I was expecting the letter %c \0A\00"
@.str.42 = [30 x i8] c"Not sure what to do with %c \0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i8
store i32 0, i32* %1
store i32 312, i32* %3
store i32 -2, i32* %4
store i32 0, i32* %5
%7 = call i32 (...) @test_assignment()
%8 = load i32, i32* %3
%9 = load i32, i32* %4
%10 = load i32, i32* %5
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i64 0, i64 0), i32 %8, i32 %9, i32 %10, i32 999)
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0))
%13 = load i32, i32* %3
%14 = load i32, i32* %4
%15 = icmp sgt i32 %13, %14
%16 = zext i1 %15 to i32
store i32 %16, i32* %2
%17 = load i32, i32* %2
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.2, i64 0, i64 0), i32 %17)
%19 = load i32, i32* %4
%20 = icmp slt i32 %19, 999
%21 = zext i1 %20 to i32
store i32 %21, i32* %2
%22 = load i32, i32* %2
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), i32 %22)
%24 = load i32, i32* %4
%25 = icmp sge i32 %24, 999
%26 = zext i1 %25 to i32
store i32 %26, i32* %2
%27 = load i32, i32* %2
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %27)
%29 = load i32, i32* %3
%30 = icmp sle i32 %29, 999
%31 = zext i1 %30 to i32
store i32 %31, i32* %2
%32 = load i32, i32* %2
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.5, i64 0, i64 0), i32 %32)
%34 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.6, i64 0, i64 0))
%35 = load i32, i32* %4
%36 = icmp eq i32 %35, 999
%37 = zext i1 %36 to i32
store i32 %37, i32* %2
%38 = load i32, i32* %2
%39 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0), i32 %38)
%40 = load i32, i32* %4
%41 = load i32, i32* %3
%42 = icmp ne i32 %40, %41
%43 = zext i1 %42 to i32
store i32 %43, i32* %2
%44 = load i32, i32* %2
%45 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.8, i64 0, i64 0), i32 %44)
%46 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.9, i64 0, i64 0))
%47 = load i32, i32* %3
%48 = load i32, i32* %4
%49 = icmp ne i32 %47, %48
br i1 %49, label %59, label %50
50: ; preds = %0
%51 = load i32, i32* %4
%52 = sitofp i32 %51 to double
%53 = fcmp ogt double %52, 0.000000e+00
br i1 %53, label %54, label %57
54: ; preds = %50
%55 = load i32, i32* %3
%56 = icmp sgt i32 %55, 999
br label %57
57: ; preds = %54, %50
%58 = phi i1 [ false, %50 ], [ %56, %54 ]
br label %59
59: ; preds = %57, %0
%60 = phi i1 [ true, %0 ], [ %58, %57 ]
%61 = zext i1 %60 to i32
store i32 %61, i32* %2
%62 = load i32, i32* %2
%63 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.10, i64 0, i64 0), i32 %62)
%64 = load i32, i32* %3
%65 = load i32, i32* %4
%66 = icmp ne i32 %64, %65
br i1 %66, label %71, label %67
67: ; preds = %59
%68 = load i32, i32* %4
%69 = sitofp i32 %68 to double
%70 = fcmp ogt double %69, 0.000000e+00
br i1 %70, label %71, label %74
71: ; preds = %67, %59
%72 = load i32, i32* %3
%73 = icmp sgt i32 %72, 999
br label %74
74: ; preds = %71, %67
%75 = phi i1 [ false, %67 ], [ %73, %71 ]
%76 = zext i1 %75 to i32
store i32 %76, i32* %2
%77 = load i32, i32* %2
%78 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.11, i64 0, i64 0), i32 %77)
%79 = load i32, i32* %3
%80 = load i32, i32* %4
%81 = icmp eq i32 %79, %80
%82 = zext i1 %81 to i32
store i32 %82, i32* %2
%83 = load i32, i32* %2
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.12, i64 0, i64 0), i32 %83)
%85 = load i32, i32* %3
%86 = load i32, i32* %4
%87 = icmp eq i32 %85, %86
%88 = xor i1 %87, true
%89 = zext i1 %88 to i32
store i32 %89, i32* %2
%90 = load i32, i32* %2
%91 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.13, i64 0, i64 0), i32 %90)
%92 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.14, i64 0, i64 0))
%93 = load i32, i32* %3
%94 = icmp sgt i32 %93, 0
br i1 %94, label %95, label %98
95: ; preds = %74
%96 = load i32, i32* %4
%97 = icmp slt i32 %96, 0
br label %98
98: ; preds = %95, %74
%99 = phi i1 [ false, %74 ], [ %97, %95 ]
%100 = zext i1 %99 to i32
store i32 %100, i32* %2
%101 = load i32, i32* %2
%102 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.15, i64 0, i64 0), i32 %101)
%103 = load i32, i32* %3
%104 = icmp sle i32 %103, 0
br i1 %104, label %108, label %105
105: ; preds = %98
%106 = load i32, i32* %4
%107 = icmp sge i32 %106, 0
br label %108
108: ; preds = %105, %98
%109 = phi i1 [ true, %98 ], [ %107, %105 ]
%110 = zext i1 %109 to i32
store i32 %110, i32* %2
%111 = load i32, i32* %2
%112 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.16, i64 0, i64 0), i32 %111)
%113 = load i32, i32* %3
%114 = icmp slt i32 %113, 0
br i1 %114, label %118, label %115
115: ; preds = %108
%116 = load i32, i32* %4
%117 = icmp slt i32 %116, 0
br label %118
118: ; preds = %115, %108
%119 = phi i1 [ true, %108 ], [ %117, %115 ]
%120 = zext i1 %119 to i32
store i32 %120, i32* %2
%121 = load i32, i32* %2
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.17, i64 0, i64 0), i32 %121)
%123 = load i32, i32* %3
%124 = icmp sge i32 %123, 0
br i1 %124, label %125, label %128
125: ; preds = %118
%126 = load i32, i32* %4
%127 = icmp sge i32 %126, 0
br label %128
128: ; preds = %125, %118
%129 = phi i1 [ false, %118 ], [ %127, %125 ]
%130 = zext i1 %129 to i32
store i32 %130, i32* %2
%131 = load i32, i32* %2
%132 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.18, i64 0, i64 0), i32 %131)
%133 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.19, i64 0, i64 0))
%134 = load i32, i32* %5
%135 = icmp ne i32 %134, 0
br i1 %135, label %136, label %140
136: ; preds = %128
%137 = load i32, i32* %3
%138 = load i32, i32* %4
%139 = icmp sgt i32 %137, %138
br label %140
140: ; preds = %136, %128
%141 = phi i1 [ false, %128 ], [ %139, %136 ]
%142 = zext i1 %141 to i32
store i32 %142, i32* %2
%143 = load i32, i32* %2
%144 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.20, i64 0, i64 0), i32 %143)
%145 = load i32, i32* %5
%146 = icmp ne i32 %145, 0
br i1 %146, label %147, label %151
147: ; preds = %140
%148 = load i32, i32* %3
%149 = load i32, i32* %4
%150 = icmp slt i32 %148, %149
br label %151
151: ; preds = %147, %140
%152 = phi i1 [ true, %140 ], [ %150, %147 ]
%153 = zext i1 %152 to i32
store i32 %153, i32* %2
%154 = load i32, i32* %2
%155 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.21, i64 0, i64 0), i32 %154)
%156 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.22, i64 0, i64 0))
store i8 33, i8* %6
store i32 1, i32* %2
%157 = load i32, i32* %2
%158 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.23, i64 0, i64 0), i32 %157)
store i32 0, i32* %2
%159 = load i32, i32* %2
%160 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.24, i64 0, i64 0), i32 %159)
%161 = load i8, i8* %6
%162 = sext i8 %161 to i32
%163 = icmp sle i32 65, %162
br i1 %163, label %164, label %168
164: ; preds = %151
%165 = load i8, i8* %6
%166 = sext i8 %165 to i32
%167 = icmp sle i32 %166, 90
br i1 %167, label %178, label %168
168: ; preds = %164, %151
%169 = load i8, i8* %6
%170 = sext i8 %169 to i32
%171 = icmp sle i32 97, %170
br i1 %171, label %172, label %176
172: ; preds = %168
%173 = load i8, i8* %6
%174 = sext i8 %173 to i32
%175 = icmp sle i32 %174, 122
br label %176
176: ; preds = %172, %168
%177 = phi i1 [ false, %168 ], [ %175, %172 ]
br label %178
178: ; preds = %176, %164
%179 = phi i1 [ true, %164 ], [ %177, %176 ]
%180 = zext i1 %179 to i32
store i32 %180, i32* %2
%181 = load i8, i8* %6
%182 = sext i8 %181 to i32
%183 = load i32, i32* %2
%184 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.25, i64 0, i64 0), i32 %182, i32 %183)
%185 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.26, i64 0, i64 0))
%186 = load i32, i32* %3
%187 = load i32, i32* %4
%188 = icmp sgt i32 %186, %187
br i1 %188, label %189, label %191
189: ; preds = %178
%190 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.27, i64 0, i64 0))
br label %191
191: ; preds = %189, %178
%192 = load i32, i32* %3
%193 = icmp sgt i32 %192, 999
br i1 %193, label %194, label %196
194: ; preds = %191
%195 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.28, i64 0, i64 0))
br label %206
196: ; preds = %191
%197 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.29, i64 0, i64 0))
%198 = load i32, i32* %4
%199 = sitofp i32 %198 to double
%200 = fcmp olt double %199, 0.000000e+00
br i1 %200, label %201, label %203
201: ; preds = %196
%202 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.30, i64 0, i64 0))
br label %205
203: ; preds = %196
%204 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.31, i64 0, i64 0))
br label %205
205: ; preds = %203, %201
br label %206
206: ; preds = %205, %194
%207 = load i32, i32* %3
%208 = load i32, i32* %4
%209 = icmp eq i32 %207, %208
br i1 %209, label %210, label %212
210: ; preds = %206
%211 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.32, i64 0, i64 0))
br label %227
212: ; preds = %206
%213 = load i32, i32* %3
%214 = icmp eq i32 %213, 999
br i1 %214, label %215, label %217
215: ; preds = %212
%216 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.33, i64 0, i64 0))
br label %226
217: ; preds = %212
%218 = load i32, i32* %4
%219 = sitofp i32 %218 to double
%220 = fcmp ogt double %219, 0.000000e+00
br i1 %220, label %221, label %223
221: ; preds = %217
%222 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i64 0, i64 0))
br label %225
223: ; preds = %217
%224 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.35, i64 0, i64 0))
br label %225
225: ; preds = %223, %221
br label %226
226: ; preds = %225, %215
br label %227
227: ; preds = %226, %210
%228 = load i32, i32* %3
%229 = icmp sle i32 %228, 500
br i1 %229, label %230, label %232
230: ; preds = %227
%231 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.36, i64 0, i64 0))
br label %238
232: ; preds = %227
%233 = load i32, i32* %3
%234 = icmp sle i32 %233, 350
br i1 %234, label %235, label %237
235: ; preds = %232
%236 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.37, i64 0, i64 0))
br label %237
237: ; preds = %235, %232
br label %238
238: ; preds = %237, %230
%239 = load i32, i32* %3
%240 = icmp sle i32 %239, 350
br i1 %240, label %241, label %243
241: ; preds = %238
%242 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.37, i64 0, i64 0))
br label %249
243: ; preds = %238
%244 = load i32, i32* %3
%245 = icmp sle i32 %244, 500
br i1 %245, label %246, label %248
246: ; preds = %243
%247 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.36, i64 0, i64 0))
br label %248
248: ; preds = %246, %243
br label %249
249: ; preds = %248, %241
%250 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.38, i64 0, i64 0))
%251 = load i32, i32* %3
switch i32 %251, label %254 [
i32 1, label %252
i32 2, label %252
]
252: ; preds = %249, %249
%253 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.39, i64 0, i64 0))
br label %256
254: ; preds = %249
%255 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.40, i64 0, i64 0))
br label %256
256: ; preds = %254, %252
%257 = load i8, i8* %6
%258 = sext i8 %257 to i32
switch i32 %258, label %263 [
i32 65, label %259
i32 66, label %259
i32 71, label %259
]
259: ; preds = %256, %256, %256
%260 = load i8, i8* %6
%261 = sext i8 %260 to i32
%262 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.41, i64 0, i64 0), i32 %261)
br label %267
263: ; preds = %256
%264 = load i8, i8* %6
%265 = sext i8 %264 to i32
%266 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.42, i64 0, i64 0), i32 %265)
br label %267
267: ; preds = %263, %259
ret i32 0
}

LLVM IR (-O2):
@.str = [40 x i8] c"x = %d, y = %d, flag = %d, LIMIT = %d\0A\0A\00"
@.str.2 = [23 x i8] c"x > y -> result = %d \0A\00"
@.str.3 = [27 x i8] c"y < LIMIT -> result = %d \0A\00"
@.str.4 = [28 x i8] c"y >= LIMIT -> result = %d \0A\00"
@.str.5 = [28 x i8] c"x <= LIMIT -> result = %d \0A\00"
@.str.7 = [28 x i8] c"y == LIMIT -> result = %d \0A\00"
@.str.8 = [24 x i8] c"y != x -> result = %d \0A\00"
@.str.10 = [48 x i8] c"x != y || y > 0.0 && x > LIMIT -> result = %d \0A\00"
@.str.11 = [52 x i8] c"(x != y || y > 0.0 ) && x > LIMIT -> result = %d \0A\00"
@.str.12 = [24 x i8] c"x == y -> result = %d \0A\00"
@.str.13 = [29 x i8] c"!( x == y ) -> result = %d \0A\00"
@.str.15 = [31 x i8] c"x > 0 && y < 0 -> result = %d\0A\00"
@.str.16 = [33 x i8] c"x <= 0 || y >= 0 -> result = %d\0A\00"
@.str.17 = [31 x i8] c"x < 0 || y < 0 -> result = %d\0A\00"
@.str.18 = [33 x i8] c"x >= 0 && y >= 0 -> result = %d\0A\00"
@.str.20 = [35 x i8] c"flag && ( x > y ) -> result = %d \0A\00"
@.str.21 = [36 x i8] c"!flag || ( x < y ) -> result = %d \0A\00"
@.str.23 = [13 x i8] c"a < b -> %d\0A\00"
@.str.24 = [13 x i8] c"a < A -> %d\0A\00"
@.str.25 = [22 x i8] c"%c is a letter -> %d\0A\00"
@.str.42 = [30 x i8] c"Not sure what to do with %c \0A\00"
@str = [23 x i8] c"Relational operators: \00"
@str.43 = [22 x i8] c"\0AEquality operators: \00"
@str.44 = [19 x i8] c"\0ALogic operators: \00"
@str.45 = [49 x i8] c"\0AFinding the complement of a complex condition: \00"
@str.46 = [28 x i8] c"\0AShort-circuit evaluation: \00"
@str.47 = [23 x i8] c"\0AComparing characers: \00"
@str.48 = [17 x i8] c"\0Aif statements: \00"
@str.49 = [20 x i8] c"x is greater than y\00"
@str.50 = [21 x i8] c"x is less than LIMIT\00"
@str.51 = [20 x i8] c"y is less than zero\00"
@str.52 = [18 x i8] c"none of the above\00"
@str.53 = [14 x i8] c"less than 500\00"
@str.54 = [14 x i8] c"less than 350\00"
@str.55 = [21 x i8] c"\0Aswitch statements: \00"
@str.56 = [17 x i8] c"x was not 1 or 2\00"
define i32 @main() {
%1 = tail call i32 (...) @test_assignment()
%2 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i64 0, i64 0), i32 312, i32 -2, i32 0, i32 999)
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str, i64 0, i64 0))
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.2, i64 0, i64 0), i32 1)
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), i32 1)
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 0)
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @.str.5, i64 0, i64 0), i32 1)
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @str.43, i64 0, i64 0))
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0), i32 0)
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.8, i64 0, i64 0), i32 1)
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.44, i64 0, i64 0))
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @.str.10, i64 0, i64 0), i32 1)
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([52 x i8], [52 x i8]* @.str.11, i64 0, i64 0), i32 0)
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.12, i64 0, i64 0), i32 0)
%15 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.13, i64 0, i64 0), i32 1)
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([49 x i8], [49 x i8]* @str.45, i64 0, i64 0))
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.15, i64 0, i64 0), i32 1)
%18 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.16, i64 0, i64 0), i32 0)
%19 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.17, i64 0, i64 0), i32 1)
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.18, i64 0, i64 0), i32 0)
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.46, i64 0, i64 0))
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @.str.20, i64 0, i64 0), i32 0)
%23 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.21, i64 0, i64 0), i32 1)
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.47, i64 0, i64 0))
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.23, i64 0, i64 0), i32 1)
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.24, i64 0, i64 0), i32 0)
%27 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.25, i64 0, i64 0), i32 33, i32 0)
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.48, i64 0, i64 0))
%29 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.49, i64 0, i64 0))
%30 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str.50, i64 0, i64 0))
%31 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.51, i64 0, i64 0))
%32 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.52, i64 0, i64 0))
%33 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.53, i64 0, i64 0))
%34 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.54, i64 0, i64 0))
%35 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str.55, i64 0, i64 0))
%36 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.56, i64 0, i64 0))
%37 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.42, i64 0, i64 0), i32 33)
ret i32 0
}