#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 EXIT_SUCCESS;
int cnt_one_bit_16(int);
int extract_day(int);
int extract_month(int);
int extract_year(int);
int pack_date(int, int, int);
int /*<<< orphan*/ printf(char *, char *);
int str2int(char *);
char xtolower(char);
char xtoupper(char);
int main(int argc, char *argv[]) {
  do {
    if (xtoupper('e') == 'E')
      printf("%s PASSED\n", "xtoupper('e') == 'E'");
    else
      printf("%s FAILED\n", "xtoupper('e') == 'E'");
  } while (0);
  do {
    if (xtoupper('*') == '*')
      printf("%s PASSED\n", "xtoupper('*') == '*'");
    else
      printf("%s FAILED\n", "xtoupper('*') == '*'");
  } while (0);
  do {
    if (xtolower('R') == 'r')
      printf("%s PASSED\n", "xtolower('R') == 'r'");
    else
      printf("%s FAILED\n", "xtolower('R') == 'r'");
  } while (0);
  do {
    if (xtolower('$') == '$')
      printf("%s PASSED\n", "xtolower('$') == '$'");
    else
      printf("%s FAILED\n", "xtolower('$') == '$'");
  } while (0);
  do {
    if (str2int("1234") == 1234)
      printf("%s PASSED\n", "str2int(\"1234\") == 1234");
    else
      printf("%s FAILED\n", "str2int(\"1234\") == 1234");
  } while (0);
  do {
    if (str2int("1000") == 1000)
      printf("%s PASSED\n", "str2int(\"1000\") == 1000");
    else
      printf("%s FAILED\n", "str2int(\"1000\") == 1000");
  } while (0);
  do {
    if (str2int("-456") == -456)
      printf("%s PASSED\n", "str2int(\"-456\") == -456");
    else
      printf("%s FAILED\n", "str2int(\"-456\") == -456");
  } while (0);
  do {
    if (str2int("-9842dea") == -9842)
      printf("%s PASSED\n", "str2int(\"-9842dea\") == -9842");
    else
      printf("%s FAILED\n", "str2int(\"-9842dea\") == -9842");
  } while (0);
  do {
    if (pack_date(7, 12, 1980) == 0x3e50)
      printf("%s PASSED\n", "pack_date(7, 12, 1980) == 0x3e50");
    else
      printf("%s FAILED\n", "pack_date(7, 12, 1980) == 0x3e50");
  } while (0);
  do {
    if (extract_day(0x3e50) == 7)
      printf("%s PASSED\n", "extract_day(0x3e50) == 7");
    else
      printf("%s FAILED\n", "extract_day(0x3e50) == 7");
  } while (0);
  do {
    if (extract_month(0x3e50) == 12)
      printf("%s PASSED\n", "extract_month(0x3e50) == 12");
    else
      printf("%s FAILED\n", "extract_month(0x3e50) == 12");
  } while (0);
  do {
    if (extract_year(0x3e50) == 1980)
      printf("%s PASSED\n", "extract_year(0x3e50) == 1980");
    else
      printf("%s FAILED\n", "extract_year(0x3e50) == 1980");
  } while (0);
  do {
    if (pack_date(11, 4, 2016) == 0x5a74)
      printf("%s PASSED\n", "pack_date(11, 4, 2016) == 0x5a74");
    else
      printf("%s FAILED\n", "pack_date(11, 4, 2016) == 0x5a74");
  } while (0);
  do {
    if (extract_day(0x5a74) == 11)
      printf("%s PASSED\n", "extract_day(0x5a74) == 11");
    else
      printf("%s FAILED\n", "extract_day(0x5a74) == 11");
  } while (0);
  do {
    if (extract_month(0x5a74) == 4)
      printf("%s PASSED\n", "extract_month(0x5a74) == 4");
    else
      printf("%s FAILED\n", "extract_month(0x5a74) == 4");
  } while (0);
  do {
    if (extract_year(0x5a74) == 2016)
      printf("%s PASSED\n", "extract_year(0x5a74) == 2016");
    else
      printf("%s FAILED\n", "extract_year(0x5a74) == 2016");
  } while (0);
  do {
    if (cnt_one_bit_16(0x4971) == 7)
      printf("%s PASSED\n", "cnt_one_bit_16(0x4971) == 7");
    else
      printf("%s FAILED\n", "cnt_one_bit_16(0x4971) == 7");
  } while (0);
  do {
    if (cnt_one_bit_16(0x0) == 0)
      printf("%s PASSED\n", "cnt_one_bit_16(0x0) == 0");
    else
      printf("%s FAILED\n", "cnt_one_bit_16(0x0) == 0");
  } while (0);
  do {
    if (cnt_one_bit_16(0xffff) == 16)
      printf("%s PASSED\n", "cnt_one_bit_16(0xffff) == 16");
    else
      printf("%s FAILED\n", "cnt_one_bit_16(0xffff) == 16");
  } while (0);
  return EXIT_SUCCESS;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    $0x65,%edi
call   1090 <xtoupper@plt>
movsbl %al,%eax
cmp    $0x45,%eax
jne    11d4 <main+0x44>
lea    0xe3d(%rip),%rdi
lea    0xe41(%rip),%rsi
call   1040 <printf@plt>
jmp    11e7 <main+0x57>
lea    0xe45(%rip),%rdi
lea    0xe29(%rip),%rsi
call   1040 <printf@plt>
jmp    11ec <main+0x5c>
jmp    11f1 <main+0x61>
mov    $0x2a,%edi
call   1090 <xtoupper@plt>
movsbl %al,%eax
cmp    $0x2a,%eax
jne    121f <main+0x8f>
lea    0xdf2(%rip),%rdi
lea    0xe16(%rip),%rsi
call   1040 <printf@plt>
jmp    1232 <main+0xa2>
lea    0xdfa(%rip),%rdi
lea    0xdfe(%rip),%rsi
call   1040 <printf@plt>
jmp    1237 <main+0xa7>
jmp    123c <main+0xac>
mov    $0x52,%edi
call   1050 <xtolower@plt>
movsbl %al,%eax
cmp    $0x72,%eax
jne    126a <main+0xda>
lea    0xda7(%rip),%rdi
lea    0xde0(%rip),%rsi
call   1040 <printf@plt>
jmp    127d <main+0xed>
lea    0xdaf(%rip),%rdi
lea    0xdc8(%rip),%rsi
call   1040 <printf@plt>
jmp    1282 <main+0xf2>
jmp    1287 <main+0xf7>
mov    $0x24,%edi
call   1050 <xtolower@plt>
movsbl %al,%eax
cmp    $0x24,%eax
jne    12b5 <main+0x125>
lea    0xd5c(%rip),%rdi
lea    0xdaa(%rip),%rsi
call   1040 <printf@plt>
jmp    12c8 <main+0x138>
lea    0xd64(%rip),%rdi
lea    0xd92(%rip),%rsi
call   1040 <printf@plt>
jmp    12cd <main+0x13d>
jmp    12d2 <main+0x142>
lea    0xda4(%rip),%rdi
call   1030 <str2int@plt>
cmp    $0x4d2,%eax
jne    1301 <main+0x171>
lea    0xd10(%rip),%rdi
lea    0xd73(%rip),%rsi
call   1040 <printf@plt>
jmp    1314 <main+0x184>
lea    0xd18(%rip),%rdi
lea    0xd5b(%rip),%rsi
call   1040 <printf@plt>
jmp    1319 <main+0x189>
jmp    131e <main+0x18e>
lea    0xd70(%rip),%rdi
call   1030 <str2int@plt>
cmp    $0x3e8,%eax
jne    134d <main+0x1bd>
lea    0xcc4(%rip),%rdi
lea    0xd3f(%rip),%rsi
call   1040 <printf@plt>
jmp    1360 <main+0x1d0>
lea    0xccc(%rip),%rdi
lea    0xd27(%rip),%rsi
call   1040 <printf@plt>
jmp    1365 <main+0x1d5>
jmp    136a <main+0x1da>
lea    0xd3c(%rip),%rdi
call   1030 <str2int@plt>
cmp    $0xfffffe38,%eax
jne    1399 <main+0x209>
lea    0xc78(%rip),%rdi
lea    0xd0b(%rip),%rsi
call   1040 <printf@plt>
jmp    13ac <main+0x21c>
lea    0xc80(%rip),%rdi
lea    0xcf3(%rip),%rsi
call   1040 <printf@plt>
jmp    13b1 <main+0x221>
jmp    13b6 <main+0x226>
lea    0xcf5(%rip),%rdi
call   1030 <str2int@plt>
cmp    $0xffffd98e,%eax
jne    13e5 <main+0x255>
lea    0xc2c(%rip),%rdi
lea    0xce0(%rip),%rsi
call   1040 <printf@plt>
jmp    13f8 <main+0x268>
lea    0xc34(%rip),%rdi
lea    0xcc8(%rip),%rsi
call   1040 <printf@plt>
jmp    13fd <main+0x26d>
jmp    1402 <main+0x272>
mov    $0x7,%edi
mov    $0xc,%esi
mov    $0x7bc,%edx
call   10b0 <pack_date@plt>
cmp    $0x3e50,%eax
jne    1439 <main+0x2a9>
lea    0xbd8(%rip),%rdi
lea    0xca9(%rip),%rsi
call   1040 <printf@plt>
jmp    144c <main+0x2bc>
lea    0xbe0(%rip),%rdi
lea    0xc91(%rip),%rsi
call   1040 <printf@plt>
jmp    1451 <main+0x2c1>
jmp    1456 <main+0x2c6>
mov    $0x3e50,%edi
call   1060 <extract_day@plt>
cmp    $0x7,%eax
jne    1481 <main+0x2f1>
lea    0xb90(%rip),%rdi
lea    0xc82(%rip),%rsi
call   1040 <printf@plt>
jmp    1494 <main+0x304>
lea    0xb98(%rip),%rdi
lea    0xc6a(%rip),%rsi
call   1040 <printf@plt>
jmp    1499 <main+0x309>
jmp    149e <main+0x30e>
mov    $0x3e50,%edi
call   10a0 <extract_month@plt>
cmp    $0xc,%eax
jne    14c9 <main+0x339>
lea    0xb48(%rip),%rdi
lea    0xc53(%rip),%rsi
call   1040 <printf@plt>
jmp    14dc <main+0x34c>
lea    0xb50(%rip),%rdi
lea    0xc3b(%rip),%rsi
call   1040 <printf@plt>
jmp    14e1 <main+0x351>
jmp    14e6 <main+0x356>
mov    $0x3e50,%edi
call   1080 <extract_year@plt>
cmp    $0x7bc,%eax
jne    1513 <main+0x383>
lea    0xafe(%rip),%rdi
lea    0xc25(%rip),%rsi
call   1040 <printf@plt>
jmp    1526 <main+0x396>
lea    0xb06(%rip),%rdi
lea    0xc0d(%rip),%rsi
call   1040 <printf@plt>
jmp    152b <main+0x39b>
jmp    1530 <main+0x3a0>
mov    $0xb,%edi
mov    $0x4,%esi
mov    $0x7e0,%edx
call   10b0 <pack_date@plt>
cmp    $0x5a74,%eax
jne    1567 <main+0x3d7>
lea    0xaaa(%rip),%rdi
lea    0xbee(%rip),%rsi
call   1040 <printf@plt>
jmp    157a <main+0x3ea>
lea    0xab2(%rip),%rdi
lea    0xbd6(%rip),%rsi
call   1040 <printf@plt>
jmp    157f <main+0x3ef>
jmp    1584 <main+0x3f4>
mov    $0x5a74,%edi
call   1060 <extract_day@plt>
cmp    $0xb,%eax
jne    15af <main+0x41f>
lea    0xa62(%rip),%rdi
lea    0xbc7(%rip),%rsi
call   1040 <printf@plt>
jmp    15c2 <main+0x432>
lea    0xa6a(%rip),%rdi
lea    0xbaf(%rip),%rsi
call   1040 <printf@plt>
jmp    15c7 <main+0x437>
jmp    15cc <main+0x43c>
mov    $0x5a74,%edi
call   10a0 <extract_month@plt>
cmp    $0x4,%eax
jne    15f7 <main+0x467>
lea    0xa1a(%rip),%rdi
lea    0xb99(%rip),%rsi
call   1040 <printf@plt>
jmp    160a <main+0x47a>
lea    0xa22(%rip),%rdi
lea    0xb81(%rip),%rsi
call   1040 <printf@plt>
jmp    160f <main+0x47f>
jmp    1614 <main+0x484>
mov    $0x5a74,%edi
call   1080 <extract_year@plt>
cmp    $0x7e0,%eax
jne    1641 <main+0x4b1>
lea    0x9d0(%rip),%rdi
lea    0xb6a(%rip),%rsi
call   1040 <printf@plt>
jmp    1654 <main+0x4c4>
lea    0x9d8(%rip),%rdi
lea    0xb52(%rip),%rsi
call   1040 <printf@plt>
jmp    1659 <main+0x4c9>
jmp    165e <main+0x4ce>
mov    $0x4971,%edi
call   1070 <cnt_one_bit_16@plt>
cmp    $0x7,%eax
jne    1689 <main+0x4f9>
lea    0x988(%rip),%rdi
lea    0xb3f(%rip),%rsi
call   1040 <printf@plt>
jmp    169c <main+0x50c>
lea    0x990(%rip),%rdi
lea    0xb27(%rip),%rsi
call   1040 <printf@plt>
jmp    16a1 <main+0x511>
jmp    16a6 <main+0x516>
xor    %edi,%edi
call   1070 <cnt_one_bit_16@plt>
cmp    $0x0,%eax
jne    16ce <main+0x53e>
lea    0x943(%rip),%rdi
lea    0xb16(%rip),%rsi
call   1040 <printf@plt>
jmp    16e1 <main+0x551>
lea    0x94b(%rip),%rdi
lea    0xafe(%rip),%rsi
call   1040 <printf@plt>
jmp    16e6 <main+0x556>
jmp    16eb <main+0x55b>
mov    $0xffff,%edi
call   1070 <cnt_one_bit_16@plt>
cmp    $0x10,%eax
jne    1716 <main+0x586>
lea    0x8fb(%rip),%rdi
lea    0xae7(%rip),%rsi
call   1040 <printf@plt>
jmp    1729 <main+0x599>
lea    0x903(%rip),%rdi
lea    0xacf(%rip),%rsi
call   1040 <printf@plt>
jmp    172e <main+0x59e>
mov    0x28ab(%rip),%rax
mov    (%rax),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
push   %rax
mov    $0x65,%edi
call   1090 <xtoupper@plt>
cmp    $0x45,%al
lea    0xe59(%rip),%r14
lea    0xe72(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe4f(%rip),%rsi
call   1040 <printf@plt>
mov    $0x2a,%edi
call   1090 <xtoupper@plt>
cmp    $0x2a,%al
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe50(%rip),%rsi
call   1040 <printf@plt>
mov    $0x52,%edi
call   1050 <xtolower@plt>
cmp    $0x72,%al
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe46(%rip),%rsi
call   1040 <printf@plt>
mov    $0x24,%edi
call   1050 <xtolower@plt>
cmp    $0x24,%al
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe3c(%rip),%rsi
call   1040 <printf@plt>
lea    0xe58(%rip),%rdi
call   1030 <str2int@plt>
cmp    $0x4d2,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe2d(%rip),%rsi
call   1040 <printf@plt>
lea    0xe4c(%rip),%rdi
call   1030 <str2int@plt>
cmp    $0x3e8,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe21(%rip),%rsi
call   1040 <printf@plt>
lea    0xe40(%rip),%rdi
call   1030 <str2int@plt>
cmp    $0xfffffe38,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe15(%rip),%rsi
call   1040 <printf@plt>
lea    0xe21(%rip),%rdi
call   1030 <str2int@plt>
cmp    $0xffffd98e,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe12(%rip),%rsi
call   1040 <printf@plt>
mov    $0x7,%edi
mov    $0xc,%esi
mov    $0x7bc,%edx
call   10b0 <pack_date@plt>
cmp    $0x3e50,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe03(%rip),%rsi
call   1040 <printf@plt>
mov    $0x3e50,%edi
call   1060 <extract_day@plt>
cmp    $0x7,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xe04(%rip),%rsi
call   1040 <printf@plt>
mov    $0x3e50,%edi
call   10a0 <extract_month@plt>
cmp    $0xc,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xdfd(%rip),%rsi
call   1040 <printf@plt>
mov    $0x3e50,%edi
call   1080 <extract_year@plt>
cmp    $0x7bc,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xdf7(%rip),%rsi
call   1040 <printf@plt>
mov    $0xb,%edi
mov    $0x4,%esi
mov    $0x7e0,%edx
call   10b0 <pack_date@plt>
cmp    $0x5a74,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xde8(%rip),%rsi
call   1040 <printf@plt>
mov    $0x5a74,%edi
call   1060 <extract_day@plt>
cmp    $0xb,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xde9(%rip),%rsi
call   1040 <printf@plt>
mov    $0x5a74,%edi
call   10a0 <extract_month@plt>
cmp    $0x4,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xde3(%rip),%rsi
call   1040 <printf@plt>
mov    $0x5a74,%edi
call   1080 <extract_year@plt>
cmp    $0x7e0,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xddc(%rip),%rsi
call   1040 <printf@plt>
mov    $0x4971,%edi
call   1070 <cnt_one_bit_16@plt>
cmp    $0x7,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xdd9(%rip),%rsi
call   1040 <printf@plt>
xor    %edi,%edi
call   1070 <cnt_one_bit_16@plt>
test   %eax,%eax
mov    %rbx,%rdi
cmove  %r14,%rdi
lea    0xdd9(%rip),%rsi
call   1040 <printf@plt>
mov    $0xffff,%edi
call   1070 <cnt_one_bit_16@plt>
cmp    $0x10,%eax
cmove  %r14,%rbx
lea    0xdd5(%rip),%rsi
mov    %rbx,%rdi
call   1040 <printf@plt>
mov    0x2bb3(%rip),%rax
mov    (%rax),%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@.str = [11 x i8] c"%s PASSED\0A\00"
@.str.1 = [21 x i8] c"xtoupper('e') == 'E'\00"
@.str.2 = [11 x i8] c"%s FAILED\0A\00"
@.str.3 = [21 x i8] c"xtoupper('*') == '*'\00"
@.str.4 = [21 x i8] c"xtolower('R') == 'r'\00"
@.str.5 = [21 x i8] c"xtolower('$') == '$'\00"
@.str.6 = [5 x i8] c"1234\00"
@.str.7 = [24 x i8] c"str2int(\221234\22) == 1234\00"
@.str.8 = [5 x i8] c"1000\00"
@.str.9 = [24 x i8] c"str2int(\221000\22) == 1000\00"
@.str.10 = [5 x i8] c"-456\00"
@.str.11 = [24 x i8] c"str2int(\22-456\22) == -456\00"
@.str.12 = [9 x i8] c"-9842dea\00"
@.str.13 = [29 x i8] c"str2int(\22-9842dea\22) == -9842\00"
@.str.14 = [33 x i8] c"pack_date(7, 12, 1980) == 0x3e50\00"
@.str.15 = [25 x i8] c"extract_day(0x3e50) == 7\00"
@.str.16 = [28 x i8] c"extract_month(0x3e50) == 12\00"
@.str.17 = [29 x i8] c"extract_year(0x3e50) == 1980\00"
@.str.18 = [33 x i8] c"pack_date(11, 4, 2016) == 0x5a74\00"
@.str.19 = [26 x i8] c"extract_day(0x5a74) == 11\00"
@.str.20 = [27 x i8] c"extract_month(0x5a74) == 4\00"
@.str.21 = [29 x i8] c"extract_year(0x5a74) == 2016\00"
@.str.22 = [28 x i8] c"cnt_one_bit_16(0x4971) == 7\00"
@.str.23 = [25 x i8] c"cnt_one_bit_16(0x0) == 0\00"
@.str.24 = [29 x i8] c"cnt_one_bit_16(0xffff) == 16\00"
@EXIT_SUCCESS = global i32 0
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
br label %6
6: ; preds = %2
%7 = call signext i8 @xtoupper(i8 signext 101)
%8 = sext i8 %7 to i32
%9 = icmp eq i32 %8, 69
br i1 %9, label %10, label %12
10: ; preds = %6
%11 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0))
br label %14
12: ; preds = %6
%13 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0))
br label %14
14: ; preds = %12, %10
br label %15
15: ; preds = %14
br label %16
16: ; preds = %15
%17 = call signext i8 @xtoupper(i8 signext 42)
%18 = sext i8 %17 to i32
%19 = icmp eq i32 %18, 42
br i1 %19, label %20, label %22
20: ; preds = %16
%21 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0))
br label %24
22: ; preds = %16
%23 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0))
br label %24
24: ; preds = %22, %20
br label %25
25: ; preds = %24
br label %26
26: ; preds = %25
%27 = call signext i8 @xtolower(i8 signext 82)
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %28, 114
br i1 %29, label %30, label %32
30: ; preds = %26
%31 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.4, i64 0, i64 0))
br label %34
32: ; preds = %26
%33 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.4, i64 0, i64 0))
br label %34
34: ; preds = %32, %30
br label %35
35: ; preds = %34
br label %36
36: ; preds = %35
%37 = call signext i8 @xtolower(i8 signext 36)
%38 = sext i8 %37 to i32
%39 = icmp eq i32 %38, 36
br i1 %39, label %40, label %42
40: ; preds = %36
%41 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.5, i64 0, i64 0))
br label %44
42: ; preds = %36
%43 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.5, i64 0, i64 0))
br label %44
44: ; preds = %42, %40
br label %45
45: ; preds = %44
br label %46
46: ; preds = %45
%47 = call i32 @str2int(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
%48 = icmp eq i32 %47, 1234
br i1 %48, label %49, label %51
49: ; preds = %46
%50 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0))
br label %53
51: ; preds = %46
%52 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0))
br label %53
53: ; preds = %51, %49
br label %54
54: ; preds = %53
br label %55
55: ; preds = %54
%56 = call i32 @str2int(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0))
%57 = icmp eq i32 %56, 1000
br i1 %57, label %58, label %60
58: ; preds = %55
%59 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.9, i64 0, i64 0))
br label %62
60: ; preds = %55
%61 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.9, i64 0, i64 0))
br label %62
62: ; preds = %60, %58
br label %63
63: ; preds = %62
br label %64
64: ; preds = %63
%65 = call i32 @str2int(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%66 = icmp eq i32 %65, -456
br i1 %66, label %67, label %69
67: ; preds = %64
%68 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.11, i64 0, i64 0))
br label %71
69: ; preds = %64
%70 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.11, i64 0, i64 0))
br label %71
71: ; preds = %69, %67
br label %72
72: ; preds = %71
br label %73
73: ; preds = %72
%74 = call i32 @str2int(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.12, i64 0, i64 0))
%75 = icmp eq i32 %74, -9842
br i1 %75, label %76, label %78
76: ; preds = %73
%77 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.13, i64 0, i64 0))
br label %80
78: ; preds = %73
%79 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.13, i64 0, i64 0))
br label %80
80: ; preds = %78, %76
br label %81
81: ; preds = %80
br label %82
82: ; preds = %81
%83 = call i32 @pack_date(i32 7, i32 12, i32 1980)
%84 = icmp eq i32 %83, 15952
br i1 %84, label %85, label %87
85: ; preds = %82
%86 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.14, i64 0, i64 0))
br label %89
87: ; preds = %82
%88 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.14, i64 0, i64 0))
br label %89
89: ; preds = %87, %85
br label %90
90: ; preds = %89
br label %91
91: ; preds = %90
%92 = call i32 @extract_day(i32 15952)
%93 = icmp eq i32 %92, 7
br i1 %93, label %94, label %96
94: ; preds = %91
%95 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.15, i64 0, i64 0))
br label %98
96: ; preds = %91
%97 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.15, i64 0, i64 0))
br label %98
98: ; preds = %96, %94
br label %99
99: ; preds = %98
br label %100
100: ; preds = %99
%101 = call i32 @extract_month(i32 15952)
%102 = icmp eq i32 %101, 12
br i1 %102, label %103, label %105
103: ; preds = %100
%104 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))
br label %107
105: ; preds = %100
%106 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))
br label %107
107: ; preds = %105, %103
br label %108
108: ; preds = %107
br label %109
109: ; preds = %108
%110 = call i32 @extract_year(i32 15952)
%111 = icmp eq i32 %110, 1980
br i1 %111, label %112, label %114
112: ; preds = %109
%113 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i64 0, i64 0))
br label %116
114: ; preds = %109
%115 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i64 0, i64 0))
br label %116
116: ; preds = %114, %112
br label %117
117: ; preds = %116
br label %118
118: ; preds = %117
%119 = call i32 @pack_date(i32 11, i32 4, i32 2016)
%120 = icmp eq i32 %119, 23156
br i1 %120, label %121, label %123
121: ; preds = %118
%122 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.18, i64 0, i64 0))
br label %125
123: ; preds = %118
%124 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.18, i64 0, i64 0))
br label %125
125: ; preds = %123, %121
br label %126
126: ; preds = %125
br label %127
127: ; preds = %126
%128 = call i32 @extract_day(i32 23156)
%129 = icmp eq i32 %128, 11
br i1 %129, label %130, label %132
130: ; preds = %127
%131 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.19, i64 0, i64 0))
br label %134
132: ; preds = %127
%133 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.19, i64 0, i64 0))
br label %134
134: ; preds = %132, %130
br label %135
135: ; preds = %134
br label %136
136: ; preds = %135
%137 = call i32 @extract_month(i32 23156)
%138 = icmp eq i32 %137, 4
br i1 %138, label %139, label %141
139: ; preds = %136
%140 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.20, i64 0, i64 0))
br label %143
141: ; preds = %136
%142 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.20, i64 0, i64 0))
br label %143
143: ; preds = %141, %139
br label %144
144: ; preds = %143
br label %145
145: ; preds = %144
%146 = call i32 @extract_year(i32 23156)
%147 = icmp eq i32 %146, 2016
br i1 %147, label %148, label %150
148: ; preds = %145
%149 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.21, i64 0, i64 0))
br label %152
150: ; preds = %145
%151 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.21, i64 0, i64 0))
br label %152
152: ; preds = %150, %148
br label %153
153: ; preds = %152
br label %154
154: ; preds = %153
%155 = call i32 @cnt_one_bit_16(i32 18801)
%156 = icmp eq i32 %155, 7
br i1 %156, label %157, label %159
157: ; preds = %154
%158 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.22, i64 0, i64 0))
br label %161
159: ; preds = %154
%160 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.22, i64 0, i64 0))
br label %161
161: ; preds = %159, %157
br label %162
162: ; preds = %161
br label %163
163: ; preds = %162
%164 = call i32 @cnt_one_bit_16(i32 0)
%165 = icmp eq i32 %164, 0
br i1 %165, label %166, label %168
166: ; preds = %163
%167 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.23, i64 0, i64 0))
br label %170
168: ; preds = %163
%169 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.23, i64 0, i64 0))
br label %170
170: ; preds = %168, %166
br label %171
171: ; preds = %170
br label %172
172: ; preds = %171
%173 = call i32 @cnt_one_bit_16(i32 65535)
%174 = icmp eq i32 %173, 16
br i1 %174, label %175, label %177
175: ; preds = %172
%176 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.24, i64 0, i64 0))
br label %179
177: ; preds = %172
%178 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.24, i64 0, i64 0))
br label %179
179: ; preds = %177, %175
br label %180
180: ; preds = %179
%181 = load i32, i32* @EXIT_SUCCESS
ret i32 %181
}

LLVM IR (-O2):
@.str = [11 x i8] c"%s PASSED\0A\00"
@.str.1 = [21 x i8] c"xtoupper('e') == 'E'\00"
@.str.2 = [11 x i8] c"%s FAILED\0A\00"
@.str.3 = [21 x i8] c"xtoupper('*') == '*'\00"
@.str.4 = [21 x i8] c"xtolower('R') == 'r'\00"
@.str.5 = [21 x i8] c"xtolower('$') == '$'\00"
@.str.6 = [5 x i8] c"1234\00"
@.str.7 = [24 x i8] c"str2int(\221234\22) == 1234\00"
@.str.8 = [5 x i8] c"1000\00"
@.str.9 = [24 x i8] c"str2int(\221000\22) == 1000\00"
@.str.10 = [5 x i8] c"-456\00"
@.str.11 = [24 x i8] c"str2int(\22-456\22) == -456\00"
@.str.12 = [9 x i8] c"-9842dea\00"
@.str.13 = [29 x i8] c"str2int(\22-9842dea\22) == -9842\00"
@.str.14 = [33 x i8] c"pack_date(7, 12, 1980) == 0x3e50\00"
@.str.15 = [25 x i8] c"extract_day(0x3e50) == 7\00"
@.str.16 = [28 x i8] c"extract_month(0x3e50) == 12\00"
@.str.17 = [29 x i8] c"extract_year(0x3e50) == 1980\00"
@.str.18 = [33 x i8] c"pack_date(11, 4, 2016) == 0x5a74\00"
@.str.19 = [26 x i8] c"extract_day(0x5a74) == 11\00"
@.str.20 = [27 x i8] c"extract_month(0x5a74) == 4\00"
@.str.21 = [29 x i8] c"extract_year(0x5a74) == 2016\00"
@.str.22 = [28 x i8] c"cnt_one_bit_16(0x4971) == 7\00"
@.str.23 = [25 x i8] c"cnt_one_bit_16(0x0) == 0\00"
@.str.24 = [29 x i8] c"cnt_one_bit_16(0xffff) == 16\00"
@EXIT_SUCCESS = global i32 0
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = tail call signext i8 @xtoupper(i8 signext 101)
%4 = icmp eq i8 %3, 69
%5 = select i1 %4, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%6 = tail call i32 @printf(i8* %5, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0))
%7 = tail call signext i8 @xtoupper(i8 signext 42)
%8 = icmp eq i8 %7, 42
%9 = select i1 %8, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%10 = tail call i32 @printf(i8* %9, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0))
%11 = tail call signext i8 @xtolower(i8 signext 82)
%12 = icmp eq i8 %11, 114
%13 = select i1 %12, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%14 = tail call i32 @printf(i8* %13, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.4, i64 0, i64 0))
%15 = tail call signext i8 @xtolower(i8 signext 36)
%16 = icmp eq i8 %15, 36
%17 = select i1 %16, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%18 = tail call i32 @printf(i8* %17, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.5, i64 0, i64 0))
%19 = tail call i32 @str2int(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
%20 = icmp eq i32 %19, 1234
%21 = select i1 %20, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%22 = tail call i32 @printf(i8* %21, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0))
%23 = tail call i32 @str2int(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0))
%24 = icmp eq i32 %23, 1000
%25 = select i1 %24, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%26 = tail call i32 @printf(i8* %25, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.9, i64 0, i64 0))
%27 = tail call i32 @str2int(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%28 = icmp eq i32 %27, -456
%29 = select i1 %28, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%30 = tail call i32 @printf(i8* %29, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.11, i64 0, i64 0))
%31 = tail call i32 @str2int(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.12, i64 0, i64 0))
%32 = icmp eq i32 %31, -9842
%33 = select i1 %32, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%34 = tail call i32 @printf(i8* %33, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.13, i64 0, i64 0))
%35 = tail call i32 @pack_date(i32 7, i32 12, i32 1980)
%36 = icmp eq i32 %35, 15952
%37 = select i1 %36, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%38 = tail call i32 @printf(i8* %37, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.14, i64 0, i64 0))
%39 = tail call i32 @extract_day(i32 15952)
%40 = icmp eq i32 %39, 7
%41 = select i1 %40, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%42 = tail call i32 @printf(i8* %41, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.15, i64 0, i64 0))
%43 = tail call i32 @extract_month(i32 15952)
%44 = icmp eq i32 %43, 12
%45 = select i1 %44, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%46 = tail call i32 @printf(i8* %45, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))
%47 = tail call i32 @extract_year(i32 15952)
%48 = icmp eq i32 %47, 1980
%49 = select i1 %48, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%50 = tail call i32 @printf(i8* %49, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i64 0, i64 0))
%51 = tail call i32 @pack_date(i32 11, i32 4, i32 2016)
%52 = icmp eq i32 %51, 23156
%53 = select i1 %52, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%54 = tail call i32 @printf(i8* %53, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.18, i64 0, i64 0))
%55 = tail call i32 @extract_day(i32 23156)
%56 = icmp eq i32 %55, 11
%57 = select i1 %56, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%58 = tail call i32 @printf(i8* %57, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.19, i64 0, i64 0))
%59 = tail call i32 @extract_month(i32 23156)
%60 = icmp eq i32 %59, 4
%61 = select i1 %60, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%62 = tail call i32 @printf(i8* %61, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.20, i64 0, i64 0))
%63 = tail call i32 @extract_year(i32 23156)
%64 = icmp eq i32 %63, 2016
%65 = select i1 %64, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%66 = tail call i32 @printf(i8* %65, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.21, i64 0, i64 0))
%67 = tail call i32 @cnt_one_bit_16(i32 18801)
%68 = icmp eq i32 %67, 7
%69 = select i1 %68, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%70 = tail call i32 @printf(i8* %69, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.22, i64 0, i64 0))
%71 = tail call i32 @cnt_one_bit_16(i32 0)
%72 = icmp eq i32 %71, 0
%73 = select i1 %72, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%74 = tail call i32 @printf(i8* %73, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.23, i64 0, i64 0))
%75 = tail call i32 @cnt_one_bit_16(i32 65535)
%76 = icmp eq i32 %75, 16
%77 = select i1 %76, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0)
%78 = tail call i32 @printf(i8* %77, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.24, i64 0, i64 0))
%79 = load i32, i32* @EXIT_SUCCESS
ret i32 %79
}