#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*/ gets(char *);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ sscanf(char *, char *, char *, char *, char *);
scalar_t__ strcmp(char *, char *);
int main() {
  char ST[10], MM[2], DD[2], YY[4];
  printf("Enter date. [E.g. 04 29 1980] : ");
  gets(ST);
  sscanf(ST, "%s %s %s", MM, DD, YY);
  if ((strcmp(MM, "1") == 0) || (strcmp(MM, "01") == 0)) {
    printf(" January %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "2") == 0) || (strcmp(MM, "02") == 0)) {
    printf(" February %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "3") == 0) || (strcmp(MM, "03") == 0)) {
    printf(" March %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "4") == 0) || (strcmp(MM, "04") == 0)) {
    printf(" April %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "5") == 0) || (strcmp(MM, "05") == 0)) {
    printf(" May %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "6") == 0) || (strcmp(MM, "06") == 0)) {
    printf(" June %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "7") == 0) || (strcmp(MM, "07") == 0)) {
    printf(" July %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "8") == 0) || (strcmp(MM, "08") == 0)) {
    printf(" August %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "9") == 0) || (strcmp(MM, "09") == 0)) {
    printf(" September %s, %s\n", DD, YY);
  } else if (strcmp(MM, "10") == 0) {
    printf(" October %s, %s\n", DD, YY);
  } else if (strcmp(MM, "11") == 0) {
    printf(" November %s, %s\n", DD, YY);
  } else if (strcmp(MM, "12") == 0) {
    printf(" December %s, %s\n", DD, YY);
  } else {
    printf("No matching value.\n");
    printf("MONTH:\t%s\n", MM);
    printf("DATE:\t%s\n", DD);
    printf("YEAR:\t%s\n", YY);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeaa(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0xe(%rbp),%rdi
call   1050 <gets@plt>
lea    -0xe(%rbp),%rdi
lea    -0x10(%rbp),%rdx
lea    -0x12(%rbp),%rcx
lea    -0x16(%rbp),%r8
lea    0xea4(%rip),%rsi
call   1060 <sscanf@plt>
lea    -0x10(%rbp),%rdi
lea    0xe9e(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     11b6 <main+0x76>
lea    -0x10(%rbp),%rdi
lea    0xe83(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    11d1 <main+0x91>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xe68(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1563 <main+0x423>
lea    -0x10(%rbp),%rdi
lea    0xe63(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     1205 <main+0xc5>
lea    -0x10(%rbp),%rdi
lea    0xe48(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    1220 <main+0xe0>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xe2d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    155e <main+0x41e>
lea    -0x10(%rbp),%rdi
lea    0xe29(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     1254 <main+0x114>
lea    -0x10(%rbp),%rdi
lea    0xe0e(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    126f <main+0x12f>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xdf3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1559 <main+0x419>
lea    -0x10(%rbp),%rdi
lea    0xdec(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     12a3 <main+0x163>
lea    -0x10(%rbp),%rdi
lea    0xdd1(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    12be <main+0x17e>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xdb6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1554 <main+0x414>
lea    -0x10(%rbp),%rdi
lea    0xdaf(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     12f2 <main+0x1b2>
lea    -0x10(%rbp),%rdi
lea    0xd94(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    130d <main+0x1cd>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xd79(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    154f <main+0x40f>
lea    -0x10(%rbp),%rdi
lea    0xd70(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     1341 <main+0x201>
lea    -0x10(%rbp),%rdi
lea    0xd55(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    135c <main+0x21c>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xd3a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    154a <main+0x40a>
lea    -0x10(%rbp),%rdi
lea    0xd32(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     1390 <main+0x250>
lea    -0x10(%rbp),%rdi
lea    0xd17(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    13ab <main+0x26b>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xcfc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1545 <main+0x405>
lea    -0x10(%rbp),%rdi
lea    0xcf4(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     13df <main+0x29f>
lea    -0x10(%rbp),%rdi
lea    0xcd9(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    13fa <main+0x2ba>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xcbe(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1540 <main+0x400>
lea    -0x10(%rbp),%rdi
lea    0xcb8(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     142e <main+0x2ee>
lea    -0x10(%rbp),%rdi
lea    0xc9d(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    1449 <main+0x309>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xc82(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    153b <main+0x3fb>
lea    -0x10(%rbp),%rdi
lea    0xc7e(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    147e <main+0x33e>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xc63(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1536 <main+0x3f6>
lea    -0x10(%rbp),%rdi
lea    0xc5d(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    14b3 <main+0x373>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xc42(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1531 <main+0x3f1>
lea    -0x10(%rbp),%rdi
lea    0xc3d(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    14e8 <main+0x3a8>
lea    -0x12(%rbp),%rsi
lea    -0x16(%rbp),%rdx
lea    0xc22(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    152c <main+0x3ec>
lea    0xc21(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x10(%rbp),%rsi
lea    0xc23(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x12(%rbp),%rsi
lea    0xc1c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x16(%rbp),%rsi
lea    0xc14(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1531 <main+0x3f1>
jmp    1536 <main+0x3f6>
jmp    153b <main+0x3fb>
jmp    1540 <main+0x400>
jmp    1545 <main+0x405>
jmp    154a <main+0x40a>
jmp    154f <main+0x40f>
jmp    1554 <main+0x414>
jmp    1559 <main+0x419>
jmp    155e <main+0x41e>
jmp    1563 <main+0x423>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0x18,%rsp
lea    0xea2(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xe(%rsp),%rbx
mov    %rbx,%rdi
call   1060 <gets@plt>
lea    0xea8(%rip),%rsi
lea    0x6(%rsp),%r14
lea    0x8(%rsp),%rcx
lea    0xa(%rsp),%r8
mov    %rbx,%rdi
mov    %r14,%rdx
call   1070 <sscanf@plt>
lea    0xe91(%rip),%rsi
mov    %r14,%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     13fa <main+0x2aa>
lea    0xe78(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     13fa <main+0x2aa>
lea    0xe73(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1403 <main+0x2b3>
lea    0xe58(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1403 <main+0x2b3>
lea    0xe54(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     140c <main+0x2bc>
lea    0xe39(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     140c <main+0x2bc>
lea    0xe32(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1415 <main+0x2c5>
lea    0xe17(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1415 <main+0x2c5>
lea    0xe10(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     141e <main+0x2ce>
lea    0xdf5(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     141e <main+0x2ce>
lea    0xdec(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1427 <main+0x2d7>
lea    0xdd1(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1427 <main+0x2d7>
lea    0xdc9(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1430 <main+0x2e0>
lea    0xdae(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1430 <main+0x2e0>
lea    0xda6(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1439 <main+0x2e9>
lea    0xd8b(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1439 <main+0x2e9>
lea    0xd85(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1442 <main+0x2f2>
lea    0xd6a(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1442 <main+0x2f2>
lea    0xd66(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1464 <main+0x314>
lea    0xd60(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     146d <main+0x31d>
lea    0xd5b(%rip),%rsi
lea    0x6(%rsp),%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1476 <main+0x326>
lea    0xd75(%rip),%rdi
call   1030 <puts@plt>
lea    0xd4a(%rip),%rdi
lea    0x6(%rsp),%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd42(%rip),%rdi
lea    0x8(%rsp),%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd39(%rip),%rdi
lea    0xa(%rsp),%rsi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    145a <main+0x30a>
lea    0xc2c(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc37(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc43(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc4c(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc55(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc5c(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc64(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc6c(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc76(%rip),%rdi
lea    0x8(%rsp),%rsi
lea    0xa(%rsp),%rdx
xor    %eax,%eax
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r14
ret
lea    0xc6a(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc75(%rip),%rdi
jmp    1449 <main+0x2f9>
lea    0xc81(%rip),%rdi
jmp    1449 <main+0x2f9>

LLVM IR (-O0):
@.str = [33 x i8] c"Enter date. [E.g. 04 29 1980] : \00"
@.str.1 = [9 x i8] c"%s %s %s\00"
@.str.2 = [2 x i8] c"1\00"
@.str.3 = [3 x i8] c"01\00"
@.str.4 = [17 x i8] c" January %s, %s\0A\00"
@.str.5 = [2 x i8] c"2\00"
@.str.6 = [3 x i8] c"02\00"
@.str.7 = [18 x i8] c" February %s, %s\0A\00"
@.str.8 = [2 x i8] c"3\00"
@.str.9 = [3 x i8] c"03\00"
@.str.10 = [15 x i8] c" March %s, %s\0A\00"
@.str.11 = [2 x i8] c"4\00"
@.str.12 = [3 x i8] c"04\00"
@.str.13 = [15 x i8] c" April %s, %s\0A\00"
@.str.14 = [2 x i8] c"5\00"
@.str.15 = [3 x i8] c"05\00"
@.str.16 = [13 x i8] c" May %s, %s\0A\00"
@.str.17 = [2 x i8] c"6\00"
@.str.18 = [3 x i8] c"06\00"
@.str.19 = [14 x i8] c" June %s, %s\0A\00"
@.str.20 = [2 x i8] c"7\00"
@.str.21 = [3 x i8] c"07\00"
@.str.22 = [14 x i8] c" July %s, %s\0A\00"
@.str.23 = [2 x i8] c"8\00"
@.str.24 = [3 x i8] c"08\00"
@.str.25 = [16 x i8] c" August %s, %s\0A\00"
@.str.26 = [2 x i8] c"9\00"
@.str.27 = [3 x i8] c"09\00"
@.str.28 = [19 x i8] c" September %s, %s\0A\00"
@.str.29 = [3 x i8] c"10\00"
@.str.30 = [17 x i8] c" October %s, %s\0A\00"
@.str.31 = [3 x i8] c"11\00"
@.str.32 = [18 x i8] c" November %s, %s\0A\00"
@.str.33 = [3 x i8] c"12\00"
@.str.34 = [18 x i8] c" December %s, %s\0A\00"
@.str.35 = [20 x i8] c"No matching value.\0A\00"
@.str.36 = [11 x i8] c"MONTH:\09%s\0A\00"
@.str.37 = [10 x i8] c"DATE:\09%s\0A\00"
@.str.38 = [10 x i8] c"YEAR:\09%s\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [10 x i8]
%3 = alloca [2 x i8]
%4 = alloca [2 x i8]
%5 = alloca [4 x i8]
store i32 0, i32* %1
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0))
%7 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%8 = call i32 @gets(i8* %7)
%9 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%10 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%11 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%12 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%13 = call i32 @sscanf(i8* %9, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* %10, i8* %11, i8* %12)
%14 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%15 = call i64 @strcmp(i8* %14, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%16 = icmp eq i64 %15, 0
br i1 %16, label %21, label %17
17: ; preds = %0
%18 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%19 = call i64 @strcmp(i8* %18, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
%20 = icmp eq i64 %19, 0
br i1 %20, label %21, label %25
21: ; preds = %17, %0
%22 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%23 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.4, i64 0, i64 0), i8* %22, i8* %23)
br label %164
25: ; preds = %17
%26 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%27 = call i64 @strcmp(i8* %26, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
%28 = icmp eq i64 %27, 0
br i1 %28, label %33, label %29
29: ; preds = %25
%30 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%31 = call i64 @strcmp(i8* %30, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0))
%32 = icmp eq i64 %31, 0
br i1 %32, label %33, label %37
33: ; preds = %29, %25
%34 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%35 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.7, i64 0, i64 0), i8* %34, i8* %35)
br label %163
37: ; preds = %29
%38 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%39 = call i64 @strcmp(i8* %38, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0))
%40 = icmp eq i64 %39, 0
br i1 %40, label %45, label %41
41: ; preds = %37
%42 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%43 = call i64 @strcmp(i8* %42, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0))
%44 = icmp eq i64 %43, 0
br i1 %44, label %45, label %49
45: ; preds = %41, %37
%46 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%47 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%48 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.10, i64 0, i64 0), i8* %46, i8* %47)
br label %162
49: ; preds = %41
%50 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%51 = call i64 @strcmp(i8* %50, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.11, i64 0, i64 0))
%52 = icmp eq i64 %51, 0
br i1 %52, label %57, label %53
53: ; preds = %49
%54 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%55 = call i64 @strcmp(i8* %54, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0))
%56 = icmp eq i64 %55, 0
br i1 %56, label %57, label %61
57: ; preds = %53, %49
%58 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%59 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%60 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.13, i64 0, i64 0), i8* %58, i8* %59)
br label %161
61: ; preds = %53
%62 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%63 = call i64 @strcmp(i8* %62, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.14, i64 0, i64 0))
%64 = icmp eq i64 %63, 0
br i1 %64, label %69, label %65
65: ; preds = %61
%66 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%67 = call i64 @strcmp(i8* %66, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0))
%68 = icmp eq i64 %67, 0
br i1 %68, label %69, label %73
69: ; preds = %65, %61
%70 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%71 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.16, i64 0, i64 0), i8* %70, i8* %71)
br label %160
73: ; preds = %65
%74 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%75 = call i64 @strcmp(i8* %74, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.17, i64 0, i64 0))
%76 = icmp eq i64 %75, 0
br i1 %76, label %81, label %77
77: ; preds = %73
%78 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%79 = call i64 @strcmp(i8* %78, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0))
%80 = icmp eq i64 %79, 0
br i1 %80, label %81, label %85
81: ; preds = %77, %73
%82 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%83 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.19, i64 0, i64 0), i8* %82, i8* %83)
br label %159
85: ; preds = %77
%86 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%87 = call i64 @strcmp(i8* %86, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0))
%88 = icmp eq i64 %87, 0
br i1 %88, label %93, label %89
89: ; preds = %85
%90 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%91 = call i64 @strcmp(i8* %90, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.21, i64 0, i64 0))
%92 = icmp eq i64 %91, 0
br i1 %92, label %93, label %97
93: ; preds = %89, %85
%94 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%95 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%96 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.22, i64 0, i64 0), i8* %94, i8* %95)
br label %158
97: ; preds = %89
%98 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%99 = call i64 @strcmp(i8* %98, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.23, i64 0, i64 0))
%100 = icmp eq i64 %99, 0
br i1 %100, label %105, label %101
101: ; preds = %97
%102 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%103 = call i64 @strcmp(i8* %102, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0))
%104 = icmp eq i64 %103, 0
br i1 %104, label %105, label %109
105: ; preds = %101, %97
%106 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%107 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%108 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.25, i64 0, i64 0), i8* %106, i8* %107)
br label %157
109: ; preds = %101
%110 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%111 = call i64 @strcmp(i8* %110, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0))
%112 = icmp eq i64 %111, 0
br i1 %112, label %117, label %113
113: ; preds = %109
%114 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%115 = call i64 @strcmp(i8* %114, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.27, i64 0, i64 0))
%116 = icmp eq i64 %115, 0
br i1 %116, label %117, label %121
117: ; preds = %113, %109
%118 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%119 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%120 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.28, i64 0, i64 0), i8* %118, i8* %119)
br label %156
121: ; preds = %113
%122 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%123 = call i64 @strcmp(i8* %122, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.29, i64 0, i64 0))
%124 = icmp eq i64 %123, 0
br i1 %124, label %125, label %129
125: ; preds = %121
%126 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%127 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%128 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.30, i64 0, i64 0), i8* %126, i8* %127)
br label %155
129: ; preds = %121
%130 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%131 = call i64 @strcmp(i8* %130, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.31, i64 0, i64 0))
%132 = icmp eq i64 %131, 0
br i1 %132, label %133, label %137
133: ; preds = %129
%134 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%135 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%136 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.32, i64 0, i64 0), i8* %134, i8* %135)
br label %154
137: ; preds = %129
%138 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%139 = call i64 @strcmp(i8* %138, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.33, i64 0, i64 0))
%140 = icmp eq i64 %139, 0
br i1 %140, label %141, label %145
141: ; preds = %137
%142 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%143 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%144 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.34, i64 0, i64 0), i8* %142, i8* %143)
br label %153
145: ; preds = %137
%146 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.35, i64 0, i64 0))
%147 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%148 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.36, i64 0, i64 0), i8* %147)
%149 = getelementptr inbounds [2 x i8], [2 x i8]* %4, i64 0, i64 0
%150 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.37, i64 0, i64 0), i8* %149)
%151 = getelementptr inbounds [4 x i8], [4 x i8]* %5, i64 0, i64 0
%152 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.38, i64 0, i64 0), i8* %151)
br label %153
153: ; preds = %145, %141
br label %154
154: ; preds = %153, %133
br label %155
155: ; preds = %154, %125
br label %156
156: ; preds = %155, %117
br label %157
157: ; preds = %156, %105
br label %158
158: ; preds = %157, %93
br label %159
159: ; preds = %158, %81
br label %160
160: ; preds = %159, %69
br label %161
161: ; preds = %160, %57
br label %162
162: ; preds = %161, %45
br label %163
163: ; preds = %162, %33
br label %164
164: ; preds = %163, %21
ret i32 0
}

LLVM IR (-O2):
@.str = [33 x i8] c"Enter date. [E.g. 04 29 1980] : \00"
@.str.1 = [9 x i8] c"%s %s %s\00"
@.str.2 = [2 x i8] c"1\00"
@.str.3 = [3 x i8] c"01\00"
@.str.4 = [17 x i8] c" January %s, %s\0A\00"
@.str.5 = [2 x i8] c"2\00"
@.str.6 = [3 x i8] c"02\00"
@.str.7 = [18 x i8] c" February %s, %s\0A\00"
@.str.8 = [2 x i8] c"3\00"
@.str.9 = [3 x i8] c"03\00"
@.str.10 = [15 x i8] c" March %s, %s\0A\00"
@.str.11 = [2 x i8] c"4\00"
@.str.12 = [3 x i8] c"04\00"
@.str.13 = [15 x i8] c" April %s, %s\0A\00"
@.str.14 = [2 x i8] c"5\00"
@.str.15 = [3 x i8] c"05\00"
@.str.16 = [13 x i8] c" May %s, %s\0A\00"
@.str.17 = [2 x i8] c"6\00"
@.str.18 = [3 x i8] c"06\00"
@.str.19 = [14 x i8] c" June %s, %s\0A\00"
@.str.20 = [2 x i8] c"7\00"
@.str.21 = [3 x i8] c"07\00"
@.str.22 = [14 x i8] c" July %s, %s\0A\00"
@.str.23 = [2 x i8] c"8\00"
@.str.24 = [3 x i8] c"08\00"
@.str.25 = [16 x i8] c" August %s, %s\0A\00"
@.str.26 = [2 x i8] c"9\00"
@.str.27 = [3 x i8] c"09\00"
@.str.28 = [19 x i8] c" September %s, %s\0A\00"
@.str.29 = [3 x i8] c"10\00"
@.str.30 = [17 x i8] c" October %s, %s\0A\00"
@.str.31 = [3 x i8] c"11\00"
@.str.32 = [18 x i8] c" November %s, %s\0A\00"
@.str.33 = [3 x i8] c"12\00"
@.str.34 = [18 x i8] c" December %s, %s\0A\00"
@.str.36 = [11 x i8] c"MONTH:\09%s\0A\00"
@.str.37 = [10 x i8] c"DATE:\09%s\0A\00"
@.str.38 = [10 x i8] c"YEAR:\09%s\0A\00"
@str = [19 x i8] c"No matching value.\00"
define i32 @main() {
%1 = alloca [10 x i8]
%2 = alloca [2 x i8]
%3 = alloca [2 x i8]
%4 = alloca [4 x i8]
%5 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 0
%6 = getelementptr inbounds [2 x i8], [2 x i8]* %2, i64 0, i64 0
%7 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%8 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 0
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0))
%10 = call i32 @gets(i8* %5)
%11 = call i32 @sscanf(i8* %5, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* %6, i8* %7, i8* %8)
%12 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%13 = icmp eq i64 %12, 0
br i1 %13, label %17, label %14
14: ; preds = %0
%15 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
%16 = icmp eq i64 %15, 0
br i1 %16, label %17, label %19
17: ; preds = %14, %0
%18 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.4, i64 0, i64 0), i8* %7, i8* %8)
br label %103
19: ; preds = %14
%20 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
%21 = icmp eq i64 %20, 0
br i1 %21, label %25, label %22
22: ; preds = %19
%23 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0))
%24 = icmp eq i64 %23, 0
br i1 %24, label %25, label %27
25: ; preds = %22, %19
%26 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.7, i64 0, i64 0), i8* %7, i8* %8)
br label %103
27: ; preds = %22
%28 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0))
%29 = icmp eq i64 %28, 0
br i1 %29, label %33, label %30
30: ; preds = %27
%31 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0))
%32 = icmp eq i64 %31, 0
br i1 %32, label %33, label %35
33: ; preds = %30, %27
%34 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.10, i64 0, i64 0), i8* %7, i8* %8)
br label %103
35: ; preds = %30
%36 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.11, i64 0, i64 0))
%37 = icmp eq i64 %36, 0
br i1 %37, label %41, label %38
38: ; preds = %35
%39 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0))
%40 = icmp eq i64 %39, 0
br i1 %40, label %41, label %43
41: ; preds = %38, %35
%42 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.13, i64 0, i64 0), i8* %7, i8* %8)
br label %103
43: ; preds = %38
%44 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.14, i64 0, i64 0))
%45 = icmp eq i64 %44, 0
br i1 %45, label %49, label %46
46: ; preds = %43
%47 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0))
%48 = icmp eq i64 %47, 0
br i1 %48, label %49, label %51
49: ; preds = %46, %43
%50 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.16, i64 0, i64 0), i8* %7, i8* %8)
br label %103
51: ; preds = %46
%52 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.17, i64 0, i64 0))
%53 = icmp eq i64 %52, 0
br i1 %53, label %57, label %54
54: ; preds = %51
%55 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0))
%56 = icmp eq i64 %55, 0
br i1 %56, label %57, label %59
57: ; preds = %54, %51
%58 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.19, i64 0, i64 0), i8* %7, i8* %8)
br label %103
59: ; preds = %54
%60 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0))
%61 = icmp eq i64 %60, 0
br i1 %61, label %65, label %62
62: ; preds = %59
%63 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.21, i64 0, i64 0))
%64 = icmp eq i64 %63, 0
br i1 %64, label %65, label %67
65: ; preds = %62, %59
%66 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.22, i64 0, i64 0), i8* %7, i8* %8)
br label %103
67: ; preds = %62
%68 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.23, i64 0, i64 0))
%69 = icmp eq i64 %68, 0
br i1 %69, label %73, label %70
70: ; preds = %67
%71 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0))
%72 = icmp eq i64 %71, 0
br i1 %72, label %73, label %75
73: ; preds = %70, %67
%74 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.25, i64 0, i64 0), i8* %7, i8* %8)
br label %103
75: ; preds = %70
%76 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0))
%77 = icmp eq i64 %76, 0
br i1 %77, label %81, label %78
78: ; preds = %75
%79 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.27, i64 0, i64 0))
%80 = icmp eq i64 %79, 0
br i1 %80, label %81, label %83
81: ; preds = %78, %75
%82 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.28, i64 0, i64 0), i8* %7, i8* %8)
br label %103
83: ; preds = %78
%84 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.29, i64 0, i64 0))
%85 = icmp eq i64 %84, 0
br i1 %85, label %86, label %88
86: ; preds = %83
%87 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.30, i64 0, i64 0), i8* %7, i8* %8)
br label %103
88: ; preds = %83
%89 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.31, i64 0, i64 0))
%90 = icmp eq i64 %89, 0
br i1 %90, label %91, label %93
91: ; preds = %88
%92 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.32, i64 0, i64 0), i8* %7, i8* %8)
br label %103
93: ; preds = %88
%94 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.33, i64 0, i64 0))
%95 = icmp eq i64 %94, 0
br i1 %95, label %96, label %98
96: ; preds = %93
%97 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.34, i64 0, i64 0), i8* %7, i8* %8)
br label %103
98: ; preds = %93
%99 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str, i64 0, i64 0))
%100 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.36, i64 0, i64 0), i8* %6)
%101 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.37, i64 0, i64 0), i8* %7)
%102 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.38, i64 0, i64 0), i8* %8)
br label %103
103: ; preds = %25, %41, %57, %73, %86, %96, %98, %91, %81, %65, %49, %33, %17
ret i32 0
}