#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*/ scanf(char *, int *);
void main() {
  int sDay = 0, sMonth = 0, sYear, eDay = 0, eMonth = 0;
  int until = 0;
  int monLim;
  printf("Please enter the starting year: ");
  scanf("%d", &sYear);
  while ((sMonth > 12) || (sMonth < 1)) {
    printf("Please enter the starting month: ");
    scanf("%d", &sMonth);
  }
  if ((sMonth == 1) || (sMonth == 3) || (sMonth == 5) || (sMonth == 7) ||
      (sMonth == 8) || (sMonth == 10) || (sMonth == 12))
    monLim = 31;
  if ((sMonth == 4) || (sMonth == 6) || (sMonth == 9) || (sMonth == 11))
    monLim = 30;
  if ((sMonth == 2)) {
    if ((sYear % 4) == 0)
      monLim = 29;
    else
      monLim = 28;
  }
  while ((sDay > monLim) || (sDay < 1)) {
    printf("Please enter the starting day: ");
    scanf("%d", &sDay);
  }
  while ((eMonth > 12) || (eMonth < 1)) {
    printf("Please enter the ending month: ");
    scanf("%d", &eMonth);
  }
  if ((eMonth == 1) || (eMonth == 3) || (eMonth == 5) || (eMonth == 7) ||
      (eMonth == 8) || (eMonth == 10) || (eMonth == 12))
    monLim = 31;
  if ((eMonth == 4) || (eMonth == 6) || (eMonth == 9) || (eMonth == 11))
    monLim = 30;
  if ((eMonth == 2)) {
    if ((sYear % 4) == 0)
      monLim = 29;
    else
      monLim = 28;
  }
  while ((eDay > monLim) || (eDay < 1)) {
    printf("Please enter the ending day: ");
    scanf("%d", &eDay);
  }
  if ((sMonth < eMonth) || ((sMonth == eMonth) && (sDay < eDay))) {
    while (sMonth != eMonth) {
      if ((sMonth == 1) || (sMonth == 3) || (sMonth == 5) || (sMonth == 7) ||
          (sMonth == 8) || (sMonth == 10) || (sMonth == 12)) {
        until += 31;
      }
      if ((sMonth == 4) || (sMonth == 6) || (sMonth == 9) || (sMonth == 11)) {
        until += 30;
      }
      if ((sMonth == 2)) {
        if ((sYear % 4) == 0)
          until += 29;
        else
          until += 28;
      }
      sMonth += 1;
    }
    if ((sMonth == eMonth)) {
      until += eDay - sDay;
    }
  } else {
    while (eMonth != sMonth) {
      if ((eMonth == 1) || (eMonth == 3) || (eMonth == 5) || (eMonth == 7) ||
          (eMonth == 8) || (eMonth == 10) || (eMonth == 12)) {
        until -= 31;
      }
      if ((eMonth == 4) || (eMonth == 6) || (eMonth == 9) || (eMonth == 11)) {
        until -= 30;
      }
      if ((eMonth == 2)) {
        if ((sYear % 4) == 0)
          until -= 29;
        else
          until -= 28;
      }
      eMonth += 1;
    }
    if ((sMonth == eMonth)) {
      until += eDay - sDay;
    }
  }
  if (until > 0)
    printf("There are %d days until that date.", until);
  else if (until < 0) {
    printf("That date has already passed.\n");
    until = until * (-1);
    printf("It was %d days ago.", until);
  } else if (until == 0)
    printf("The entered dates are the same.");
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
lea    0xeae(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xec1(%rip),%rdi
lea    -0xc(%rbp),%rsi
call   1040 <scanf@plt>
mov    $0x1,%al
cmpl   $0xc,-0x8(%rbp)
mov    %al,-0x1d(%rbp)
jg     1182 <main+0x62>
cmpl   $0x1,-0x8(%rbp)
setl   %al
mov    %al,-0x1d(%rbp)
mov    -0x1d(%rbp),%al
test   $0x1,%al
jne    1192 <main+0x72>
jmp    11b5 <main+0x95>
lea    0xe8b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe7a(%rip),%rdi
lea    -0x8(%rbp),%rsi
call   1040 <scanf@plt>
jmp    1169 <main+0x49>
cmpl   $0x1,-0x8(%rbp)
je     11fb <main+0xdb>
cmpl   $0x3,-0x8(%rbp)
je     11fb <main+0xdb>
cmpl   $0x5,-0x8(%rbp)
je     11fb <main+0xdb>
cmpl   $0x7,-0x8(%rbp)
je     11fb <main+0xdb>
cmpl   $0x8,-0x8(%rbp)
je     11fb <main+0xdb>
cmpl   $0xa,-0x8(%rbp)
je     11fb <main+0xdb>
cmpl   $0xc,-0x8(%rbp)
jne    1202 <main+0xe2>
movl   $0x1f,-0x1c(%rbp)
cmpl   $0x4,-0x8(%rbp)
je     122a <main+0x10a>
cmpl   $0x6,-0x8(%rbp)
je     122a <main+0x10a>
cmpl   $0x9,-0x8(%rbp)
je     122a <main+0x10a>
cmpl   $0xb,-0x8(%rbp)
jne    1231 <main+0x111>
movl   $0x1e,-0x1c(%rbp)
cmpl   $0x2,-0x8(%rbp)
jne    1267 <main+0x147>
mov    -0xc(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    125b <main+0x13b>
movl   $0x1d,-0x1c(%rbp)
jmp    1262 <main+0x142>
movl   $0x1c,-0x1c(%rbp)
jmp    1267 <main+0x147>
jmp    126c <main+0x14c>
mov    -0x4(%rbp),%ecx
mov    $0x1,%al
cmp    -0x1c(%rbp),%ecx
mov    %al,-0x1e(%rbp)
jg     1287 <main+0x167>
cmpl   $0x1,-0x4(%rbp)
setl   %al
mov    %al,-0x1e(%rbp)
mov    -0x1e(%rbp),%al
test   $0x1,%al
jne    1297 <main+0x177>
jmp    12ba <main+0x19a>
lea    0xda8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd75(%rip),%rdi
lea    -0x4(%rbp),%rsi
call   1040 <scanf@plt>
jmp    126c <main+0x14c>
jmp    12bf <main+0x19f>
mov    $0x1,%al
cmpl   $0xc,-0x14(%rbp)
mov    %al,-0x1f(%rbp)
jg     12d8 <main+0x1b8>
cmpl   $0x1,-0x14(%rbp)
setl   %al
mov    %al,-0x1f(%rbp)
mov    -0x1f(%rbp),%al
test   $0x1,%al
jne    12e8 <main+0x1c8>
jmp    130b <main+0x1eb>
lea    0xd77(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd24(%rip),%rdi
lea    -0x14(%rbp),%rsi
call   1040 <scanf@plt>
jmp    12bf <main+0x19f>
cmpl   $0x1,-0x14(%rbp)
je     1351 <main+0x231>
cmpl   $0x3,-0x14(%rbp)
je     1351 <main+0x231>
cmpl   $0x5,-0x14(%rbp)
je     1351 <main+0x231>
cmpl   $0x7,-0x14(%rbp)
je     1351 <main+0x231>
cmpl   $0x8,-0x14(%rbp)
je     1351 <main+0x231>
cmpl   $0xa,-0x14(%rbp)
je     1351 <main+0x231>
cmpl   $0xc,-0x14(%rbp)
jne    1358 <main+0x238>
movl   $0x1f,-0x1c(%rbp)
cmpl   $0x4,-0x14(%rbp)
je     1380 <main+0x260>
cmpl   $0x6,-0x14(%rbp)
je     1380 <main+0x260>
cmpl   $0x9,-0x14(%rbp)
je     1380 <main+0x260>
cmpl   $0xb,-0x14(%rbp)
jne    1387 <main+0x267>
movl   $0x1e,-0x1c(%rbp)
cmpl   $0x2,-0x14(%rbp)
jne    13bd <main+0x29d>
mov    -0xc(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    13b1 <main+0x291>
movl   $0x1d,-0x1c(%rbp)
jmp    13b8 <main+0x298>
movl   $0x1c,-0x1c(%rbp)
jmp    13bd <main+0x29d>
jmp    13c2 <main+0x2a2>
mov    -0x10(%rbp),%ecx
mov    $0x1,%al
cmp    -0x1c(%rbp),%ecx
mov    %al,-0x20(%rbp)
jg     13dd <main+0x2bd>
cmpl   $0x1,-0x10(%rbp)
setl   %al
mov    %al,-0x20(%rbp)
mov    -0x20(%rbp),%al
test   $0x1,%al
jne    13ed <main+0x2cd>
jmp    1410 <main+0x2f0>
lea    0xc92(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xc1f(%rip),%rdi
lea    -0x10(%rbp),%rsi
call   1040 <scanf@plt>
jmp    13c2 <main+0x2a2>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jl     1434 <main+0x314>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    152a <main+0x40a>
mov    -0x4(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    152a <main+0x40a>
jmp    1439 <main+0x319>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
je     150d <main+0x3ed>
cmpl   $0x1,-0x8(%rbp)
je     148b <main+0x36b>
cmpl   $0x3,-0x8(%rbp)
je     148b <main+0x36b>
cmpl   $0x5,-0x8(%rbp)
je     148b <main+0x36b>
cmpl   $0x7,-0x8(%rbp)
je     148b <main+0x36b>
cmpl   $0x8,-0x8(%rbp)
je     148b <main+0x36b>
cmpl   $0xa,-0x8(%rbp)
je     148b <main+0x36b>
cmpl   $0xc,-0x8(%rbp)
jne    1494 <main+0x374>
mov    -0x18(%rbp),%eax
add    $0x1f,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x4,-0x8(%rbp)
je     14bc <main+0x39c>
cmpl   $0x6,-0x8(%rbp)
je     14bc <main+0x39c>
cmpl   $0x9,-0x8(%rbp)
je     14bc <main+0x39c>
cmpl   $0xb,-0x8(%rbp)
jne    14c5 <main+0x3a5>
mov    -0x18(%rbp),%eax
add    $0x1e,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x2,-0x8(%rbp)
jne    14ff <main+0x3df>
mov    -0xc(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    14f1 <main+0x3d1>
mov    -0x18(%rbp),%eax
add    $0x1d,%eax
mov    %eax,-0x18(%rbp)
jmp    14fa <main+0x3da>
mov    -0x18(%rbp),%eax
add    $0x1c,%eax
mov    %eax,-0x18(%rbp)
jmp    14ff <main+0x3df>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1439 <main+0x319>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    1525 <main+0x405>
mov    -0x10(%rbp),%eax
sub    -0x4(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
jmp    1620 <main+0x500>
jmp    152f <main+0x40f>
mov    -0x14(%rbp),%eax
cmp    -0x8(%rbp),%eax
je     1603 <main+0x4e3>
cmpl   $0x1,-0x14(%rbp)
je     1581 <main+0x461>
cmpl   $0x3,-0x14(%rbp)
je     1581 <main+0x461>
cmpl   $0x5,-0x14(%rbp)
je     1581 <main+0x461>
cmpl   $0x7,-0x14(%rbp)
je     1581 <main+0x461>
cmpl   $0x8,-0x14(%rbp)
je     1581 <main+0x461>
cmpl   $0xa,-0x14(%rbp)
je     1581 <main+0x461>
cmpl   $0xc,-0x14(%rbp)
jne    158a <main+0x46a>
mov    -0x18(%rbp),%eax
sub    $0x1f,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x4,-0x14(%rbp)
je     15b2 <main+0x492>
cmpl   $0x6,-0x14(%rbp)
je     15b2 <main+0x492>
cmpl   $0x9,-0x14(%rbp)
je     15b2 <main+0x492>
cmpl   $0xb,-0x14(%rbp)
jne    15bb <main+0x49b>
mov    -0x18(%rbp),%eax
sub    $0x1e,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x2,-0x14(%rbp)
jne    15f5 <main+0x4d5>
mov    -0xc(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    15e7 <main+0x4c7>
mov    -0x18(%rbp),%eax
sub    $0x1d,%eax
mov    %eax,-0x18(%rbp)
jmp    15f0 <main+0x4d0>
mov    -0x18(%rbp),%eax
sub    $0x1c,%eax
mov    %eax,-0x18(%rbp)
jmp    15f5 <main+0x4d5>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    152f <main+0x40f>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    161b <main+0x4fb>
mov    -0x10(%rbp),%eax
sub    -0x4(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
jmp    1620 <main+0x500>
cmpl   $0x0,-0x18(%rbp)
jle    1640 <main+0x520>
mov    -0x18(%rbp),%esi
lea    0xa70(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1697 <main+0x577>
cmpl   $0x0,-0x18(%rbp)
jge    1675 <main+0x555>
lea    0xa76(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
imul   $0xffffffff,-0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%esi
lea    0xa7d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1692 <main+0x572>
cmpl   $0x0,-0x18(%rbp)
jne    168d <main+0x56d>
lea    0xa74(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1692 <main+0x572>
jmp    1697 <main+0x577>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x18,%rsp
movl   $0x0,0x8(%rsp)
movl   $0x0,0x10(%rsp)
movl   $0x0,0x14(%rsp)
movl   $0x0,0x4(%rsp)
lea    0xe9f(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xeb2(%rip),%r14
lea    0xc(%rsp),%rsi
mov    %r14,%rdi
call   1050 <scanf@plt>
lea    0xea1(%rip),%r15
lea    0x10(%rsp),%rbx
nopl   0x0(%rax,%rax,1)
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1050 <scanf@plt>
mov    0x10(%rsp),%eax
lea    -0xd(%rax),%ecx
cmp    $0xfffffff4,%ecx
jb     1190 <main+0x60>
mov    0x8(%rsp),%ecx
mov    %eax,%edx
and    $0xfffffffd,%edx
cmp    $0x4,%edx
sete   %bl
cmp    $0x9,%edx
sete   %dl
or     %bl,%dl
movzbl %dl,%edx
xor    $0x1f,%edx
xor    %ebp,%ebp
testb  $0x3,0xc(%rsp)
sete   %bpl
or     $0x1c,%ebp
cmp    $0x2,%eax
cmovne %edx,%ebp
cmp    %ebp,%ecx
jg     11f0 <main+0xc0>
test   %ecx,%ecx
jg     121b <main+0xeb>
nopw   0x0(%rax,%rax,1)
lea    0xe4f(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xe1c(%rip),%rdi
lea    0x8(%rsp),%rsi
call   1050 <scanf@plt>
mov    0x8(%rsp),%eax
cmp    %ebp,%eax
jg     11f0 <main+0xc0>
test   %eax,%eax
jle    11f0 <main+0xc0>
mov    0x4(%rsp),%ecx
lea    -0xd(%rcx),%eax
cmp    $0xfffffff3,%eax
ja     1261 <main+0x131>
lea    0xe38(%rip),%r14
lea    0xdec(%rip),%r15
lea    0x4(%rsp),%rbx
nopw   0x0(%rax,%rax,1)
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1050 <scanf@plt>
mov    0x4(%rsp),%ecx
lea    -0xd(%rcx),%eax
cmp    $0xfffffff4,%eax
jb     1240 <main+0x110>
lea    -0x1(%rcx),%eax
mov    $0xad5,%edx
bt     %eax,%edx
mov    $0x1f,%edx
cmovae %ebp,%edx
cmp    $0xc,%eax
cmovae %ebp,%edx
lea    -0x4(%rcx),%eax
mov    $0xa5,%esi
bt     %eax,%esi
mov    $0x1e,%esi
cmovae %edx,%esi
cmp    $0x8,%eax
cmovae %edx,%esi
xor    %ebp,%ebp
testb  $0x3,0xc(%rsp)
sete   %bpl
or     $0x1c,%ebp
cmp    $0x2,%ecx
cmovne %esi,%ebp
mov    0x14(%rsp),%eax
cmp    %ebp,%eax
jg     12b3 <main+0x183>
test   %eax,%eax
jg     12f5 <main+0x1c5>
lea    0xdcc(%rip),%r14
lea    0xd60(%rip),%r15
lea    0x14(%rsp),%rbx
cs nopw 0x0(%rax,%rax,1)
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1050 <scanf@plt>
mov    0x14(%rsp),%eax
cmp    %ebp,%eax
jg     12d0 <main+0x1a0>
test   %eax,%eax
jle    12d0 <main+0x1a0>
mov    0x4(%rsp),%ecx
mov    0x10(%rsp),%edx
cmp    %ecx,%edx
jl     1309 <main+0x1d9>
mov    0x8(%rsp),%r9d
jne    1375 <main+0x245>
cmp    %r9d,%eax
jle    1375 <main+0x245>
xor    %ebx,%ebx
cmp    %ecx,%edx
je     1359 <main+0x229>
mov    0xc(%rsp),%r9d
mov    %ecx,%r8d
sub    %edx,%r8d
lea    0x1(%rdx),%esi
cmp    %esi,%ecx
jne    13ed <main+0x2bd>
xor    %ebx,%ebx
test   $0x1,%r8b
je     1355 <main+0x225>
cmp    $0xc,%edx
ja     133f <main+0x20f>
mov    $0x15aa,%esi
bt     %edx,%esi
jae    133f <main+0x20f>
add    $0x1f,%ebx
cmp    $0xb,%edx
ja     1355 <main+0x225>
mov    $0xa50,%esi
bt     %edx,%esi
jae    154a <main+0x41a>
add    $0x1e,%ebx
mov    %ecx,0x10(%rsp)
add    %eax,%ebx
sub    0x8(%rsp),%ebx
test   %ebx,%ebx
jle    13ce <main+0x29e>
lea    0xd3a(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    13e2 <main+0x2b2>
xor    %edi,%edi
mov    %edx,%r10d
sub    %ecx,%r10d
je     13c3 <main+0x293>
mov    0xc(%rsp),%r8d
lea    0x1(%rcx),%esi
cmp    %esi,%edx
jne    14a4 <main+0x374>
xor    %edi,%edi
test   $0x1,%r10b
je     13bf <main+0x28f>
cmp    $0xc,%ecx
ja     13a9 <main+0x279>
mov    $0x15aa,%esi
bt     %ecx,%esi
jae    13a9 <main+0x279>
add    $0xffffffe1,%edi
cmp    $0xb,%ecx
ja     13bf <main+0x28f>
mov    $0xa50,%esi
bt     %ecx,%esi
jae    1561 <main+0x431>
add    $0xffffffe2,%edi
mov    %edx,0x4(%rsp)
sub    %r9d,%eax
add    %edi,%eax
mov    %eax,%ebx
test   %ebx,%ebx
jg     1363 <main+0x233>
js     148a <main+0x35a>
lea    0xd00(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
add    $0x18,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r8d,%edi
and    $0xfffffffe,%edi
xor    %ebx,%ebx
mov    $0x528,%r10d
mov    $0xad5,%esi
mov    $0xa50,%r11d
mov    $0x15aa,%ebp
jmp    141f <main+0x2ef>
nopl   (%rax)
add    $0x1e,%ebx
add    $0x2,%edx
add    $0xfffffffe,%edi
je     1327 <main+0x1f7>
cmp    $0xc,%edx
ja     142c <main+0x2fc>
bt     %edx,%ebp
jae    142c <main+0x2fc>
add    $0x1f,%ebx
cmp    $0xb,%edx
ja     143a <main+0x30a>
bt     %edx,%r11d
jae    1470 <main+0x340>
add    $0x1e,%ebx
cmp    $0xb,%edx
ja     1447 <main+0x317>
bt     %edx,%esi
jae    1447 <main+0x317>
add    $0x1f,%ebx
cmp    $0xa,%edx
ja     1413 <main+0x2e3>
bt     %edx,%r10d
jb     1410 <main+0x2e0>
cmp    $0x1,%edx
jne    1413 <main+0x2e3>
test   $0x3,%r9b
je     1480 <main+0x350>
add    $0x1c,%ebx
jmp    1413 <main+0x2e3>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    $0x2,%edx
jne    143a <main+0x30a>
test   $0x3,%r9b
je     1485 <main+0x355>
add    $0x1c,%ebx
jmp    143a <main+0x30a>
add    $0x1d,%ebx
jmp    1413 <main+0x2e3>
add    $0x1d,%ebx
jmp    143a <main+0x30a>
lea    0xc6a(%rip),%rdi
call   1030 <puts@plt>
neg    %ebx
lea    0xc28(%rip),%rdi
jmp    136a <main+0x23a>
mov    %r10d,%ebx
and    $0xfffffffe,%ebx
xor    %edi,%edi
mov    $0x528,%r11d
mov    $0xad5,%esi
mov    $0xa50,%r14d
mov    $0x15aa,%ebp
jmp    14df <main+0x3af>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0xffffffe2,%edi
add    $0x2,%ecx
add    $0xfffffffe,%ebx
je     1391 <main+0x261>
cmp    $0xc,%ecx
ja     14ec <main+0x3bc>
bt     %ecx,%ebp
jae    14ec <main+0x3bc>
add    $0xffffffe1,%edi
cmp    $0xb,%ecx
ja     14fa <main+0x3ca>
bt     %ecx,%r14d
jae    1530 <main+0x400>
add    $0xffffffe2,%edi
cmp    $0xb,%ecx
ja     1507 <main+0x3d7>
bt     %ecx,%esi
jae    1507 <main+0x3d7>
add    $0xffffffe1,%edi
cmp    $0xa,%ecx
ja     14d3 <main+0x3a3>
bt     %ecx,%r11d
jb     14d0 <main+0x3a0>
cmp    $0x1,%ecx
jne    14d3 <main+0x3a3>
test   $0x3,%r8b
je     1540 <main+0x410>
add    $0xffffffe4,%edi
jmp    14d3 <main+0x3a3>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    $0x2,%ecx
jne    14fa <main+0x3ca>
test   $0x3,%r8b
je     1545 <main+0x415>
add    $0xffffffe4,%edi
jmp    14fa <main+0x3ca>
add    $0xffffffe3,%edi
jmp    14d3 <main+0x3a3>
add    $0xffffffe3,%edi
jmp    14fa <main+0x3ca>
cmp    $0x2,%edx
jne    1355 <main+0x225>
test   $0x3,%r9b
je     1578 <main+0x448>
add    $0x1c,%ebx
jmp    1355 <main+0x225>
cmp    $0x2,%ecx
jne    13bf <main+0x28f>
test   $0x3,%r8b
je     1580 <main+0x450>
add    $0xffffffe4,%edi
jmp    13bf <main+0x28f>
add    $0x1d,%ebx
jmp    1355 <main+0x225>
add    $0xffffffe3,%edi
jmp    13bf <main+0x28f>

LLVM IR (-O0):
@.str = [33 x i8] c"Please enter the starting year: \00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [34 x i8] c"Please enter the starting month: \00"
@.str.3 = [32 x i8] c"Please enter the starting day: \00"
@.str.4 = [32 x i8] c"Please enter the ending month: \00"
@.str.5 = [30 x i8] c"Please enter the ending day: \00"
@.str.6 = [35 x i8] c"There are %d days until that date.\00"
@.str.7 = [31 x i8] c"That date has already passed.\0A\00"
@.str.8 = [20 x i8] c"It was %d days ago.\00"
@.str.9 = [32 x i8] c"The entered dates are the same.\00"
define void @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %2
store i32 0, i32* %4
store i32 0, i32* %5
store i32 0, i32* %6
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0))
%9 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %3)
br label %10
10: ; preds = %18, %0
%11 = load i32, i32* %2
%12 = icmp sgt i32 %11, 12
br i1 %12, label %16, label %13
13: ; preds = %10
%14 = load i32, i32* %2
%15 = icmp slt i32 %14, 1
br label %16
16: ; preds = %13, %10
%17 = phi i1 [ true, %10 ], [ %15, %13 ]
br i1 %17, label %18, label %21
18: ; preds = %16
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.2, i64 0, i64 0))
%20 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %2)
br label %10
21: ; preds = %16
%22 = load i32, i32* %2
%23 = icmp eq i32 %22, 1
br i1 %23, label %42, label %24
24: ; preds = %21
%25 = load i32, i32* %2
%26 = icmp eq i32 %25, 3
br i1 %26, label %42, label %27
27: ; preds = %24
%28 = load i32, i32* %2
%29 = icmp eq i32 %28, 5
br i1 %29, label %42, label %30
30: ; preds = %27
%31 = load i32, i32* %2
%32 = icmp eq i32 %31, 7
br i1 %32, label %42, label %33
33: ; preds = %30
%34 = load i32, i32* %2
%35 = icmp eq i32 %34, 8
br i1 %35, label %42, label %36
36: ; preds = %33
%37 = load i32, i32* %2
%38 = icmp eq i32 %37, 10
br i1 %38, label %42, label %39
39: ; preds = %36
%40 = load i32, i32* %2
%41 = icmp eq i32 %40, 12
br i1 %41, label %42, label %43
42: ; preds = %39, %36, %33, %30, %27, %24, %21
store i32 31, i32* %7
br label %43
43: ; preds = %42, %39
%44 = load i32, i32* %2
%45 = icmp eq i32 %44, 4
br i1 %45, label %55, label %46
46: ; preds = %43
%47 = load i32, i32* %2
%48 = icmp eq i32 %47, 6
br i1 %48, label %55, label %49
49: ; preds = %46
%50 = load i32, i32* %2
%51 = icmp eq i32 %50, 9
br i1 %51, label %55, label %52
52: ; preds = %49
%53 = load i32, i32* %2
%54 = icmp eq i32 %53, 11
br i1 %54, label %55, label %56
55: ; preds = %52, %49, %46, %43
store i32 30, i32* %7
br label %56
56: ; preds = %55, %52
%57 = load i32, i32* %2
%58 = icmp eq i32 %57, 2
br i1 %58, label %59, label %66
59: ; preds = %56
%60 = load i32, i32* %3
%61 = srem i32 %60, 4
%62 = icmp eq i32 %61, 0
br i1 %62, label %63, label %64
63: ; preds = %59
store i32 29, i32* %7
br label %65
64: ; preds = %59
store i32 28, i32* %7
br label %65
65: ; preds = %64, %63
br label %66
66: ; preds = %65, %56
br label %67
67: ; preds = %76, %66
%68 = load i32, i32* %1
%69 = load i32, i32* %7
%70 = icmp sgt i32 %68, %69
br i1 %70, label %74, label %71
71: ; preds = %67
%72 = load i32, i32* %1
%73 = icmp slt i32 %72, 1
br label %74
74: ; preds = %71, %67
%75 = phi i1 [ true, %67 ], [ %73, %71 ]
br i1 %75, label %76, label %79
76: ; preds = %74
%77 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.3, i64 0, i64 0))
%78 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %1)
br label %67
79: ; preds = %74
br label %80
80: ; preds = %88, %79
%81 = load i32, i32* %5
%82 = icmp sgt i32 %81, 12
br i1 %82, label %86, label %83
83: ; preds = %80
%84 = load i32, i32* %5
%85 = icmp slt i32 %84, 1
br label %86
86: ; preds = %83, %80
%87 = phi i1 [ true, %80 ], [ %85, %83 ]
br i1 %87, label %88, label %91
88: ; preds = %86
%89 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.4, i64 0, i64 0))
%90 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %5)
br label %80
91: ; preds = %86
%92 = load i32, i32* %5
%93 = icmp eq i32 %92, 1
br i1 %93, label %112, label %94
94: ; preds = %91
%95 = load i32, i32* %5
%96 = icmp eq i32 %95, 3
br i1 %96, label %112, label %97
97: ; preds = %94
%98 = load i32, i32* %5
%99 = icmp eq i32 %98, 5
br i1 %99, label %112, label %100
100: ; preds = %97
%101 = load i32, i32* %5
%102 = icmp eq i32 %101, 7
br i1 %102, label %112, label %103
103: ; preds = %100
%104 = load i32, i32* %5
%105 = icmp eq i32 %104, 8
br i1 %105, label %112, label %106
106: ; preds = %103
%107 = load i32, i32* %5
%108 = icmp eq i32 %107, 10
br i1 %108, label %112, label %109
109: ; preds = %106
%110 = load i32, i32* %5
%111 = icmp eq i32 %110, 12
br i1 %111, label %112, label %113
112: ; preds = %109, %106, %103, %100, %97, %94, %91
store i32 31, i32* %7
br label %113
113: ; preds = %112, %109
%114 = load i32, i32* %5
%115 = icmp eq i32 %114, 4
br i1 %115, label %125, label %116
116: ; preds = %113
%117 = load i32, i32* %5
%118 = icmp eq i32 %117, 6
br i1 %118, label %125, label %119
119: ; preds = %116
%120 = load i32, i32* %5
%121 = icmp eq i32 %120, 9
br i1 %121, label %125, label %122
122: ; preds = %119
%123 = load i32, i32* %5
%124 = icmp eq i32 %123, 11
br i1 %124, label %125, label %126
125: ; preds = %122, %119, %116, %113
store i32 30, i32* %7
br label %126
126: ; preds = %125, %122
%127 = load i32, i32* %5
%128 = icmp eq i32 %127, 2
br i1 %128, label %129, label %136
129: ; preds = %126
%130 = load i32, i32* %3
%131 = srem i32 %130, 4
%132 = icmp eq i32 %131, 0
br i1 %132, label %133, label %134
133: ; preds = %129
store i32 29, i32* %7
br label %135
134: ; preds = %129
store i32 28, i32* %7
br label %135
135: ; preds = %134, %133
br label %136
136: ; preds = %135, %126
br label %137
137: ; preds = %146, %136
%138 = load i32, i32* %4
%139 = load i32, i32* %7
%140 = icmp sgt i32 %138, %139
br i1 %140, label %144, label %141
141: ; preds = %137
%142 = load i32, i32* %4
%143 = icmp slt i32 %142, 1
br label %144
144: ; preds = %141, %137
%145 = phi i1 [ true, %137 ], [ %143, %141 ]
br i1 %145, label %146, label %149
146: ; preds = %144
%147 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.5, i64 0, i64 0))
%148 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %4)
br label %137
149: ; preds = %144
%150 = load i32, i32* %2
%151 = load i32, i32* %5
%152 = icmp slt i32 %150, %151
br i1 %152, label %161, label %153
153: ; preds = %149
%154 = load i32, i32* %2
%155 = load i32, i32* %5
%156 = icmp eq i32 %154, %155
br i1 %156, label %157, label %233
157: ; preds = %153
%158 = load i32, i32* %1
%159 = load i32, i32* %4
%160 = icmp slt i32 %158, %159
br i1 %160, label %161, label %233
161: ; preds = %157, %149
br label %162
162: ; preds = %219, %161
%163 = load i32, i32* %2
%164 = load i32, i32* %5
%165 = icmp ne i32 %163, %164
br i1 %165, label %166, label %222
166: ; preds = %162
%167 = load i32, i32* %2
%168 = icmp eq i32 %167, 1
br i1 %168, label %187, label %169
169: ; preds = %166
%170 = load i32, i32* %2
%171 = icmp eq i32 %170, 3
br i1 %171, label %187, label %172
172: ; preds = %169
%173 = load i32, i32* %2
%174 = icmp eq i32 %173, 5
br i1 %174, label %187, label %175
175: ; preds = %172
%176 = load i32, i32* %2
%177 = icmp eq i32 %176, 7
br i1 %177, label %187, label %178
178: ; preds = %175
%179 = load i32, i32* %2
%180 = icmp eq i32 %179, 8
br i1 %180, label %187, label %181
181: ; preds = %178
%182 = load i32, i32* %2
%183 = icmp eq i32 %182, 10
br i1 %183, label %187, label %184
184: ; preds = %181
%185 = load i32, i32* %2
%186 = icmp eq i32 %185, 12
br i1 %186, label %187, label %190
187: ; preds = %184, %181, %178, %175, %172, %169, %166
%188 = load i32, i32* %6
%189 = add nsw i32 %188, 31
store i32 %189, i32* %6
br label %190
190: ; preds = %187, %184
%191 = load i32, i32* %2
%192 = icmp eq i32 %191, 4
br i1 %192, label %202, label %193
193: ; preds = %190
%194 = load i32, i32* %2
%195 = icmp eq i32 %194, 6
br i1 %195, label %202, label %196
196: ; preds = %193
%197 = load i32, i32* %2
%198 = icmp eq i32 %197, 9
br i1 %198, label %202, label %199
199: ; preds = %196
%200 = load i32, i32* %2
%201 = icmp eq i32 %200, 11
br i1 %201, label %202, label %205
202: ; preds = %199, %196, %193, %190
%203 = load i32, i32* %6
%204 = add nsw i32 %203, 30
store i32 %204, i32* %6
br label %205
205: ; preds = %202, %199
%206 = load i32, i32* %2
%207 = icmp eq i32 %206, 2
br i1 %207, label %208, label %219
208: ; preds = %205
%209 = load i32, i32* %3
%210 = srem i32 %209, 4
%211 = icmp eq i32 %210, 0
br i1 %211, label %212, label %215
212: ; preds = %208
%213 = load i32, i32* %6
%214 = add nsw i32 %213, 29
store i32 %214, i32* %6
br label %218
215: ; preds = %208
%216 = load i32, i32* %6
%217 = add nsw i32 %216, 28
store i32 %217, i32* %6
br label %218
218: ; preds = %215, %212
br label %219
219: ; preds = %218, %205
%220 = load i32, i32* %2
%221 = add nsw i32 %220, 1
store i32 %221, i32* %2
br label %162
222: ; preds = %162
%223 = load i32, i32* %2
%224 = load i32, i32* %5
%225 = icmp eq i32 %223, %224
br i1 %225, label %226, label %232
226: ; preds = %222
%227 = load i32, i32* %4
%228 = load i32, i32* %1
%229 = sub nsw i32 %227, %228
%230 = load i32, i32* %6
%231 = add nsw i32 %230, %229
store i32 %231, i32* %6
br label %232
232: ; preds = %226, %222
br label %305
233: ; preds = %157, %153
br label %234
234: ; preds = %291, %233
%235 = load i32, i32* %5
%236 = load i32, i32* %2
%237 = icmp ne i32 %235, %236
br i1 %237, label %238, label %294
238: ; preds = %234
%239 = load i32, i32* %5
%240 = icmp eq i32 %239, 1
br i1 %240, label %259, label %241
241: ; preds = %238
%242 = load i32, i32* %5
%243 = icmp eq i32 %242, 3
br i1 %243, label %259, label %244
244: ; preds = %241
%245 = load i32, i32* %5
%246 = icmp eq i32 %245, 5
br i1 %246, label %259, label %247
247: ; preds = %244
%248 = load i32, i32* %5
%249 = icmp eq i32 %248, 7
br i1 %249, label %259, label %250
250: ; preds = %247
%251 = load i32, i32* %5
%252 = icmp eq i32 %251, 8
br i1 %252, label %259, label %253
253: ; preds = %250
%254 = load i32, i32* %5
%255 = icmp eq i32 %254, 10
br i1 %255, label %259, label %256
256: ; preds = %253
%257 = load i32, i32* %5
%258 = icmp eq i32 %257, 12
br i1 %258, label %259, label %262
259: ; preds = %256, %253, %250, %247, %244, %241, %238
%260 = load i32, i32* %6
%261 = sub nsw i32 %260, 31
store i32 %261, i32* %6
br label %262
262: ; preds = %259, %256
%263 = load i32, i32* %5
%264 = icmp eq i32 %263, 4
br i1 %264, label %274, label %265
265: ; preds = %262
%266 = load i32, i32* %5
%267 = icmp eq i32 %266, 6
br i1 %267, label %274, label %268
268: ; preds = %265
%269 = load i32, i32* %5
%270 = icmp eq i32 %269, 9
br i1 %270, label %274, label %271
271: ; preds = %268
%272 = load i32, i32* %5
%273 = icmp eq i32 %272, 11
br i1 %273, label %274, label %277
274: ; preds = %271, %268, %265, %262
%275 = load i32, i32* %6
%276 = sub nsw i32 %275, 30
store i32 %276, i32* %6
br label %277
277: ; preds = %274, %271
%278 = load i32, i32* %5
%279 = icmp eq i32 %278, 2
br i1 %279, label %280, label %291
280: ; preds = %277
%281 = load i32, i32* %3
%282 = srem i32 %281, 4
%283 = icmp eq i32 %282, 0
br i1 %283, label %284, label %287
284: ; preds = %280
%285 = load i32, i32* %6
%286 = sub nsw i32 %285, 29
store i32 %286, i32* %6
br label %290
287: ; preds = %280
%288 = load i32, i32* %6
%289 = sub nsw i32 %288, 28
store i32 %289, i32* %6
br label %290
290: ; preds = %287, %284
br label %291
291: ; preds = %290, %277
%292 = load i32, i32* %5
%293 = add nsw i32 %292, 1
store i32 %293, i32* %5
br label %234
294: ; preds = %234
%295 = load i32, i32* %2
%296 = load i32, i32* %5
%297 = icmp eq i32 %295, %296
br i1 %297, label %298, label %304
298: ; preds = %294
%299 = load i32, i32* %4
%300 = load i32, i32* %1
%301 = sub nsw i32 %299, %300
%302 = load i32, i32* %6
%303 = add nsw i32 %302, %301
store i32 %303, i32* %6
br label %304
304: ; preds = %298, %294
br label %305
305: ; preds = %304, %232
%306 = load i32, i32* %6
%307 = icmp sgt i32 %306, 0
br i1 %307, label %308, label %311
308: ; preds = %305
%309 = load i32, i32* %6
%310 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.6, i64 0, i64 0), i32 %309)
br label %327
311: ; preds = %305
%312 = load i32, i32* %6
%313 = icmp slt i32 %312, 0
br i1 %313, label %314, label %320
314: ; preds = %311
%315 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.7, i64 0, i64 0))
%316 = load i32, i32* %6
%317 = mul nsw i32 %316, -1
store i32 %317, i32* %6
%318 = load i32, i32* %6
%319 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.8, i64 0, i64 0), i32 %318)
br label %326
320: ; preds = %311
%321 = load i32, i32* %6
%322 = icmp eq i32 %321, 0
br i1 %322, label %323, label %325
323: ; preds = %320
%324 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.9, i64 0, i64 0))
br label %325
325: ; preds = %323, %320
br label %326
326: ; preds = %325, %314
br label %327
327: ; preds = %326, %308
ret void
}

LLVM IR (-O2):
@.str = [33 x i8] c"Please enter the starting year: \00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [34 x i8] c"Please enter the starting month: \00"
@.str.3 = [32 x i8] c"Please enter the starting day: \00"
@.str.4 = [32 x i8] c"Please enter the ending month: \00"
@.str.5 = [30 x i8] c"Please enter the ending day: \00"
@.str.6 = [35 x i8] c"There are %d days until that date.\00"
@.str.8 = [20 x i8] c"It was %d days ago.\00"
@.str.9 = [32 x i8] c"The entered dates are the same.\00"
@str = [30 x i8] c"That date has already passed.\00"
define void @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = bitcast i32* %1 to i8*
store i32 0, i32* %1
%7 = bitcast i32* %2 to i8*
store i32 0, i32* %2
%8 = bitcast i32* %3 to i8*
%9 = bitcast i32* %4 to i8*
store i32 0, i32* %4
%10 = bitcast i32* %5 to i8*
store i32 0, i32* %5
%11 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0))
%12 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %3)
br label %13
13: ; preds = %0, %13
%14 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.2, i64 0, i64 0))
%15 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %2)
%16 = load i32, i32* %2
%17 = add i32 %16, -13
%18 = icmp ult i32 %17, -12
br i1 %18, label %13, label %19
19: ; preds = %13
%20 = load i32, i32* %1
%21 = and i32 %16, -3
%22 = icmp eq i32 %21, 4
%23 = icmp eq i32 %21, 9
%24 = or i1 %23, %22
%25 = select i1 %24, i32 30, i32 31
%26 = icmp eq i32 %16, 2
%27 = load i32, i32* %3
%28 = and i32 %27, 3
%29 = icmp eq i32 %28, 0
%30 = select i1 %29, i32 29, i32 28
%31 = select i1 %26, i32 %30, i32 %25
%32 = icmp sgt i32 %20, %31
%33 = icmp slt i32 %20, 1
%34 = or i1 %32, %33
br i1 %34, label %39, label %35
35: ; preds = %39, %19
%36 = load i32, i32* %5
%37 = add i32 %36, -13
%38 = icmp ult i32 %37, -12
br i1 %38, label %46, label %52
39: ; preds = %19, %39
%40 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.3, i64 0, i64 0))
%41 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %1)
%42 = load i32, i32* %1
%43 = icmp sgt i32 %42, %31
%44 = icmp slt i32 %42, 1
%45 = or i1 %43, %44
br i1 %45, label %39, label %35
46: ; preds = %35, %46
%47 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.4, i64 0, i64 0))
%48 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %5)
%49 = load i32, i32* %5
%50 = add i32 %49, -13
%51 = icmp ult i32 %50, -12
br i1 %51, label %46, label %52
52: ; preds = %46, %35
%53 = phi i32 [ %36, %35 ], [ %49, %46 ]
%54 = add i32 %53, -1
%55 = icmp ult i32 %54, 12
%56 = trunc i32 %54 to i16
%57 = lshr i16 2773, %56
%58 = and i16 %57, 1
%59 = icmp eq i16 %58, 0
%60 = select i1 %59, i32 %31, i32 31
%61 = select i1 %55, i32 %60, i32 %31
%62 = add i32 %53, -4
%63 = icmp ult i32 %62, 8
%64 = trunc i32 %62 to i8
%65 = lshr i8 -91, %64
%66 = and i8 %65, 1
%67 = icmp eq i8 %66, 0
%68 = select i1 %67, i32 %61, i32 30
%69 = select i1 %63, i32 %68, i32 %61
%70 = icmp eq i32 %53, 2
%71 = load i32, i32* %3
%72 = and i32 %71, 3
%73 = icmp eq i32 %72, 0
%74 = select i1 %73, i32 29, i32 28
%75 = select i1 %70, i32 %74, i32 %69
%76 = load i32, i32* %4
%77 = icmp sgt i32 %76, %75
%78 = icmp slt i32 %76, 1
%79 = or i1 %77, %78
br i1 %79, label %80, label %89
80: ; preds = %52, %80
%81 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.5, i64 0, i64 0))
%82 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %4)
%83 = load i32, i32* %4
%84 = icmp sgt i32 %83, %75
%85 = icmp slt i32 %83, 1
%86 = or i1 %84, %85
br i1 %86, label %80, label %87
87: ; preds = %80
%88 = load i32, i32* %5
br label %89
89: ; preds = %87, %52
%90 = phi i32 [ %53, %52 ], [ %88, %87 ]
%91 = phi i32 [ %76, %52 ], [ %83, %87 ]
%92 = load i32, i32* %2
%93 = icmp slt i32 %92, %90
br i1 %93, label %99, label %94
94: ; preds = %89
%95 = icmp eq i32 %92, %90
%96 = load i32, i32* %1
%97 = icmp sgt i32 %91, %96
%98 = select i1 %95, i1 %97, i1 false
br i1 %98, label %99, label %168
99: ; preds = %94, %89
%100 = icmp eq i32 %92, %90
br i1 %100, label %163, label %101
101: ; preds = %99
%102 = load i32, i32* %3
%103 = and i32 %102, 3
%104 = icmp eq i32 %103, 0
%105 = sub i32 %90, %92
%106 = add i32 %92, 1
%107 = and i32 %105, 1
%108 = icmp eq i32 %90, %106
br i1 %108, label %144, label %109
109: ; preds = %101
%110 = and i32 %105, -2
br label %111
111: ; preds = %139, %109
%112 = phi i32 [ 0, %109 ], [ %140, %139 ]
%113 = phi i32 [ %92, %109 ], [ %141, %139 ]
%114 = phi i32 [ 0, %109 ], [ %142, %139 ]
switch i32 %113, label %117 [
i32 12, label %115
i32 10, label %115
i32 8, label %115
i32 7, label %115
i32 5, label %115
i32 3, label %115
i32 1, label %115
]
115: ; preds = %111, %111, %111, %111, %111, %111, %111
%116 = add nsw i32 %112, 31
br label %117
117: ; preds = %111, %115
%118 = phi i32 [ %116, %115 ], [ %112, %111 ]
switch i32 %113, label %126 [
i32 11, label %119
i32 9, label %119
i32 6, label %119
i32 4, label %119
i32 2, label %121
]
119: ; preds = %117, %117, %117, %117
%120 = add nsw i32 %118, 30
br label %126
121: ; preds = %117
br i1 %104, label %122, label %124
122: ; preds = %121
%123 = add nsw i32 %118, 29
br label %126
124: ; preds = %121
%125 = add nsw i32 %118, 28
br label %126
126: ; preds = %117, %119, %122, %124
%127 = phi i32 [ %123, %122 ], [ %125, %124 ], [ %120, %119 ], [ %118, %117 ]
switch i32 %113, label %130 [
i32 11, label %128
i32 9, label %128
i32 7, label %128
i32 6, label %128
i32 4, label %128
i32 2, label %128
i32 0, label %128
]
128: ; preds = %126, %126, %126, %126, %126, %126, %126
%129 = add nsw i32 %127, 31
br label %130
130: ; preds = %128, %126
%131 = phi i32 [ %129, %128 ], [ %127, %126 ]
switch i32 %113, label %139 [
i32 10, label %137
i32 8, label %137
i32 5, label %137
i32 3, label %137
i32 1, label %132
]
132: ; preds = %130
br i1 %104, label %135, label %133
133: ; preds = %132
%134 = add nsw i32 %131, 28
br label %139
135: ; preds = %132
%136 = add nsw i32 %131, 29
br label %139
137: ; preds = %130, %130, %130, %130
%138 = add nsw i32 %131, 30
br label %139
139: ; preds = %137, %135, %133, %130
%140 = phi i32 [ %136, %135 ], [ %134, %133 ], [ %138, %137 ], [ %131, %130 ]
%141 = add nsw i32 %113, 2
%142 = add i32 %114, 2
%143 = icmp eq i32 %142, %110
br i1 %143, label %144, label %111
144: ; preds = %139, %101
%145 = phi i32 [ undef, %101 ], [ %140, %139 ]
%146 = phi i32 [ 0, %101 ], [ %140, %139 ]
%147 = phi i32 [ %92, %101 ], [ %141, %139 ]
%148 = icmp eq i32 %107, 0
br i1 %148, label %161, label %149
149: ; preds = %144
switch i32 %147, label %152 [
i32 12, label %150
i32 10, label %150
i32 8, label %150
i32 7, label %150
i32 5, label %150
i32 3, label %150
i32 1, label %150
]
150: ; preds = %149, %149, %149, %149, %149, %149, %149
%151 = add nsw i32 %146, 31
br label %152
152: ; preds = %150, %149
%153 = phi i32 [ %151, %150 ], [ %146, %149 ]
switch i32 %147, label %161 [
i32 11, label %159
i32 9, label %159
i32 6, label %159
i32 4, label %159
i32 2, label %154
]
154: ; preds = %152
br i1 %104, label %157, label %155
155: ; preds = %154
%156 = add nsw i32 %153, 28
br label %161
157: ; preds = %154
%158 = add nsw i32 %153, 29
br label %161
159: ; preds = %152, %152, %152, %152
%160 = add nsw i32 %153, 30
br label %161
161: ; preds = %152, %155, %157, %159, %144
%162 = phi i32 [ %145, %144 ], [ %158, %157 ], [ %156, %155 ], [ %160, %159 ], [ %153, %152 ]
store i32 %90, i32* %2
br label %163
163: ; preds = %161, %99
%164 = phi i32 [ %162, %161 ], [ 0, %99 ]
%165 = load i32, i32* %1
%166 = add i32 %164, %91
%167 = sub i32 %166, %165
br label %235
168: ; preds = %94
br i1 %95, label %231, label %169
169: ; preds = %168
%170 = load i32, i32* %3
%171 = and i32 %170, 3
%172 = icmp eq i32 %171, 0
%173 = sub i32 %92, %90
%174 = add i32 %90, 1
%175 = and i32 %173, 1
%176 = icmp eq i32 %92, %174
br i1 %176, label %212, label %177
177: ; preds = %169
%178 = and i32 %173, -2
br label %179
179: ; preds = %207, %177
%180 = phi i32 [ 0, %177 ], [ %208, %207 ]
%181 = phi i32 [ %90, %177 ], [ %209, %207 ]
%182 = phi i32 [ 0, %177 ], [ %210, %207 ]
switch i32 %181, label %185 [
i32 12, label %183
i32 10, label %183
i32 8, label %183
i32 7, label %183
i32 5, label %183
i32 3, label %183
i32 1, label %183
]
183: ; preds = %179, %179, %179, %179, %179, %179, %179
%184 = add nsw i32 %180, -31
br label %185
185: ; preds = %179, %183
%186 = phi i32 [ %184, %183 ], [ %180, %179 ]
switch i32 %181, label %194 [
i32 11, label %187
i32 9, label %187
i32 6, label %187
i32 4, label %187
i32 2, label %189
]
187: ; preds = %185, %185, %185, %185
%188 = add nsw i32 %186, -30
br label %194
189: ; preds = %185
br i1 %172, label %190, label %192
190: ; preds = %189
%191 = add nsw i32 %186, -29
br label %194
192: ; preds = %189
%193 = add nsw i32 %186, -28
br label %194
194: ; preds = %185, %187, %190, %192
%195 = phi i32 [ %191, %190 ], [ %193, %192 ], [ %188, %187 ], [ %186, %185 ]
switch i32 %181, label %198 [
i32 11, label %196
i32 9, label %196
i32 7, label %196
i32 6, label %196
i32 4, label %196
i32 2, label %196
i32 0, label %196
]
196: ; preds = %194, %194, %194, %194, %194, %194, %194
%197 = add nsw i32 %195, -31
br label %198
198: ; preds = %196, %194
%199 = phi i32 [ %197, %196 ], [ %195, %194 ]
switch i32 %181, label %207 [
i32 10, label %205
i32 8, label %205
i32 5, label %205
i32 3, label %205
i32 1, label %200
]
200: ; preds = %198
br i1 %172, label %203, label %201
201: ; preds = %200
%202 = add nsw i32 %199, -28
br label %207
203: ; preds = %200
%204 = add nsw i32 %199, -29
br label %207
205: ; preds = %198, %198, %198, %198
%206 = add nsw i32 %199, -30
br label %207
207: ; preds = %205, %203, %201, %198
%208 = phi i32 [ %204, %203 ], [ %202, %201 ], [ %206, %205 ], [ %199, %198 ]
%209 = add nsw i32 %181, 2
%210 = add i32 %182, 2
%211 = icmp eq i32 %210, %178
br i1 %211, label %212, label %179
212: ; preds = %207, %169
%213 = phi i32 [ undef, %169 ], [ %208, %207 ]
%214 = phi i32 [ 0, %169 ], [ %208, %207 ]
%215 = phi i32 [ %90, %169 ], [ %209, %207 ]
%216 = icmp eq i32 %175, 0
br i1 %216, label %229, label %217
217: ; preds = %212
switch i32 %215, label %220 [
i32 12, label %218
i32 10, label %218
i32 8, label %218
i32 7, label %218
i32 5, label %218
i32 3, label %218
i32 1, label %218
]
218: ; preds = %217, %217, %217, %217, %217, %217, %217
%219 = add nsw i32 %214, -31
br label %220
220: ; preds = %218, %217
%221 = phi i32 [ %219, %218 ], [ %214, %217 ]
switch i32 %215, label %229 [
i32 11, label %227
i32 9, label %227
i32 6, label %227
i32 4, label %227
i32 2, label %222
]
222: ; preds = %220
br i1 %172, label %225, label %223
223: ; preds = %222
%224 = add nsw i32 %221, -28
br label %229
225: ; preds = %222
%226 = add nsw i32 %221, -29
br label %229
227: ; preds = %220, %220, %220, %220
%228 = add nsw i32 %221, -30
br label %229
229: ; preds = %220, %223, %225, %227, %212
%230 = phi i32 [ %213, %212 ], [ %226, %225 ], [ %224, %223 ], [ %228, %227 ], [ %221, %220 ]
store i32 %92, i32* %5
br label %231
231: ; preds = %229, %168
%232 = phi i32 [ %230, %229 ], [ 0, %168 ]
%233 = sub i32 %91, %96
%234 = add nsw i32 %233, %232
br label %235
235: ; preds = %231, %163
%236 = phi i32 [ %167, %163 ], [ %234, %231 ]
%237 = icmp sgt i32 %236, 0
br i1 %237, label %238, label %240
238: ; preds = %235
%239 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @.str.6, i64 0, i64 0), i32 %236)
br label %248
240: ; preds = %235
%241 = icmp slt i32 %236, 0
br i1 %241, label %242, label %246
242: ; preds = %240
%243 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str, i64 0, i64 0))
%244 = sub nsw i32 0, %236
%245 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.8, i64 0, i64 0), i32 %244)
br label %248
246: ; preds = %240
%247 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.9, i64 0, i64 0))
br label %248
248: ; preds = %242, %246, %238
ret void
}