#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 */
scalar_t__ get_day_in_month_range(int, int, int);
scalar_t__ get_day_in_year_range(int, int);
int get_last_day_of_month(int, int);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, int *, int *, int *);
int main(void) {
  int birth[3];
  int today[3];
  int passed_day = 0;
  printf("Enter birth[YEAR, MONTH, DAY](divide by space)=");
  scanf("%d%d%d", &birth[0], &birth[1], &birth[2]);
  printf("Enter today[YEAR, MONTH, DAY](divide by space)=");
  scanf("%d%d%d", &today[0], &today[1], &today[2]);
  {
    passed_day += get_day_in_year_range(birth[0], today[0]);
    if (birth[0] == today[0])
      passed_day += get_day_in_month_range(birth[0], birth[1], today[1]);
    else if (birth[0] > today[0]) {
      passed_day += get_day_in_month_range(birth[0], birth[1], 0);
      passed_day += get_day_in_month_range(today[0], 13, today[1]);
    } else {
      passed_day += get_day_in_month_range(today[0], 0, today[1]);
      passed_day += get_day_in_month_range(birth[0], birth[1], 13);
    }
    if (birth[0] == today[0] && birth[1] == today[1])
      passed_day += today[2] - birth[2];
    else if (birth[0] > today[0] ||
             birth[0] == today[0] &&
                 (birth[1] > today[1] ||
                  birth[1] == today[1] && birth[2] > today[2])) {
      passed_day -= get_last_day_of_month(today[0], today[1]) - today[2];
      passed_day -= birth[2];
    } else {
      passed_day += get_last_day_of_month(birth[0], birth[1]) - birth[2];
      passed_day += today[2];
    }
  }
  printf("Result is: %d\n", passed_day);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x20(%rbp)
lea    0xe93(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x10(%rbp),%rsi
lea    -0x10(%rbp),%rdx
add    $0x4,%rdx
lea    -0x10(%rbp),%rcx
add    $0x8,%rcx
lea    0xea1(%rip),%rdi
call   1050 <scanf@plt>
lea    0xe9c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x1c(%rbp),%rsi
lea    -0x1c(%rbp),%rdx
add    $0x4,%rdx
lea    -0x1c(%rbp),%rcx
add    $0x8,%rcx
lea    0xe73(%rip),%rdi
call   1050 <scanf@plt>
mov    -0x10(%rbp),%edi
mov    -0x1c(%rbp),%esi
call   1030 <get_day_in_year_range@plt>
mov    %rax,%rcx
movslq -0x20(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    1206 <main+0xb6>
mov    -0x10(%rbp),%edi
mov    -0xc(%rbp),%esi
mov    -0x18(%rbp),%edx
call   1070 <get_day_in_month_range@plt>
mov    %rax,%rcx
movslq -0x20(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x20(%rbp)
jmp    128a <main+0x13a>
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jle    124e <main+0xfe>
mov    -0x10(%rbp),%edi
mov    -0xc(%rbp),%esi
xor    %edx,%edx
call   1070 <get_day_in_month_range@plt>
mov    %rax,%rcx
movslq -0x20(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%edi
mov    -0x18(%rbp),%edx
mov    $0xd,%esi
call   1070 <get_day_in_month_range@plt>
mov    %rax,%rcx
movslq -0x20(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x20(%rbp)
jmp    1285 <main+0x135>
mov    -0x1c(%rbp),%edi
mov    -0x18(%rbp),%edx
xor    %esi,%esi
call   1070 <get_day_in_month_range@plt>
mov    %rax,%rcx
movslq -0x20(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%edi
mov    -0xc(%rbp),%esi
mov    $0xd,%edx
call   1070 <get_day_in_month_range@plt>
mov    %rax,%rcx
movslq -0x20(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x20(%rbp)
jmp    128a <main+0x13a>
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    12b3 <main+0x163>
mov    -0xc(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    12b3 <main+0x163>
mov    -0x14(%rbp),%eax
sub    -0x8(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    1339 <main+0x1e9>
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     12ef <main+0x19f>
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    1317 <main+0x1c7>
mov    -0xc(%rbp),%eax
cmp    -0x18(%rbp),%eax
jg     12ef <main+0x19f>
mov    -0xc(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    1317 <main+0x1c7>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    1317 <main+0x1c7>
mov    -0x1c(%rbp),%edi
mov    -0x18(%rbp),%esi
call   1060 <get_last_day_of_month@plt>
mov    %eax,%ecx
sub    -0x14(%rbp),%ecx
mov    -0x20(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x20(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
jmp    1334 <main+0x1e4>
mov    -0x10(%rbp),%edi
mov    -0xc(%rbp),%esi
call   1060 <get_last_day_of_month@plt>
sub    -0x8(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x14(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    1339 <main+0x1e9>
mov    -0x20(%rbp),%esi
lea    0xd24(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
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    0x10(%rsp),%rdx
lea    0x14(%rsp),%rcx
lea    0xeba(%rip),%rbx
lea    0xc(%rsp),%rsi
mov    %rbx,%rdi
call   1050 <scanf@plt>
lea    0xead(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x4(%rsp),%rdx
lea    0x8(%rsp),%rcx
mov    %rsp,%rsi
mov    %rbx,%rdi
call   1050 <scanf@plt>
mov    0xc(%rsp),%edi
mov    (%rsp),%esi
call   1030 <get_day_in_year_range@plt>
mov    %rax,%rbx
mov    0xc(%rsp),%edi
mov    (%rsp),%eax
cmp    %eax,%edi
jne    11d5 <main+0x85>
mov    0x10(%rsp),%esi
mov    0x4(%rsp),%edx
call   1070 <get_day_in_month_range@plt>
movslq %ebx,%rbx
add    %rax,%rbx
jmp    1228 <main+0xd8>
jle    11fd <main+0xad>
mov    0x10(%rsp),%esi
xor    %edx,%edx
call   1070 <get_day_in_month_range@plt>
add    %eax,%ebx
mov    (%rsp),%edi
mov    0x4(%rsp),%edx
mov    $0xd,%esi
call   1070 <get_day_in_month_range@plt>
movslq %ebx,%rbx
add    %rax,%rbx
jmp    1228 <main+0xd8>
mov    0x4(%rsp),%edx
mov    %eax,%edi
xor    %esi,%esi
call   1070 <get_day_in_month_range@plt>
mov    %rax,%r14
add    %rbx,%r14
mov    0xc(%rsp),%edi
mov    0x10(%rsp),%esi
mov    $0xd,%edx
call   1070 <get_day_in_month_range@plt>
mov    %rax,%rbx
add    %r14,%rbx
mov    0xc(%rsp),%edi
mov    (%rsp),%eax
cmp    %eax,%edi
jne    1249 <main+0xf9>
mov    0x10(%rsp),%esi
mov    0x4(%rsp),%ecx
cmp    %ecx,%esi
jne    1251 <main+0x101>
add    0x8(%rsp),%ebx
sub    0x14(%rsp),%ebx
jmp    127d <main+0x12d>
jle    1268 <main+0x118>
mov    0x4(%rsp),%ecx
jmp    1253 <main+0x103>
jle    126c <main+0x11c>
mov    %eax,%edi
mov    %ecx,%esi
call   1060 <get_last_day_of_month@plt>
add    0x8(%rsp),%ebx
add    0x14(%rsp),%eax
sub    %eax,%ebx
jmp    127d <main+0x12d>
mov    0x10(%rsp),%esi
call   1060 <get_last_day_of_month@plt>
add    %ebx,%eax
sub    0x14(%rsp),%eax
add    0x8(%rsp),%eax
mov    %eax,%ebx
lea    0xde3(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@.str = [48 x i8] c"Enter birth[YEAR, MONTH, DAY](divide by space)=\00"
@.str.1 = [7 x i8] c"%d%d%d\00"
@.str.2 = [48 x i8] c"Enter today[YEAR, MONTH, DAY](divide by space)=\00"
@.str.3 = [15 x i8] c"Result is: %d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [3 x i32]
%3 = alloca [3 x i32]
%4 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %4
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str, i64 0, i64 0))
%6 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%7 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%8 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%9 = call i32 @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i32* %6, i32* %7, i32* %8)
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.2, i64 0, i64 0))
%11 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%12 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 1
%13 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 2
%14 = call i32 @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i32* %11, i32* %12, i32* %13)
%15 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%16 = load i32, i32* %15
%17 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%18 = load i32, i32* %17
%19 = call i64 @get_day_in_year_range(i32 %16, i32 %18)
%20 = load i32, i32* %4
%21 = sext i32 %20 to i64
%22 = add nsw i64 %21, %19
%23 = trunc i64 %22 to i32
store i32 %23, i32* %4
%24 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%25 = load i32, i32* %24
%26 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%27 = load i32, i32* %26
%28 = icmp eq i32 %25, %27
br i1 %28, label %29, label %41
29: ; preds = %0
%30 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%31 = load i32, i32* %30
%32 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%33 = load i32, i32* %32
%34 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 1
%35 = load i32, i32* %34
%36 = call i64 @get_day_in_month_range(i32 %31, i32 %33, i32 %35)
%37 = load i32, i32* %4
%38 = sext i32 %37 to i64
%39 = add nsw i64 %38, %36
%40 = trunc i64 %39 to i32
store i32 %40, i32* %4
br label %86
41: ; preds = %0
%42 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%43 = load i32, i32* %42
%44 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%45 = load i32, i32* %44
%46 = icmp sgt i32 %43, %45
br i1 %46, label %47, label %66
47: ; preds = %41
%48 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%49 = load i32, i32* %48
%50 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%51 = load i32, i32* %50
%52 = call i64 @get_day_in_month_range(i32 %49, i32 %51, i32 0)
%53 = load i32, i32* %4
%54 = sext i32 %53 to i64
%55 = add nsw i64 %54, %52
%56 = trunc i64 %55 to i32
store i32 %56, i32* %4
%57 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%58 = load i32, i32* %57
%59 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 1
%60 = load i32, i32* %59
%61 = call i64 @get_day_in_month_range(i32 %58, i32 13, i32 %60)
%62 = load i32, i32* %4
%63 = sext i32 %62 to i64
%64 = add nsw i64 %63, %61
%65 = trunc i64 %64 to i32
store i32 %65, i32* %4
br label %85
66: ; preds = %41
%67 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%68 = load i32, i32* %67
%69 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 1
%70 = load i32, i32* %69
%71 = call i64 @get_day_in_month_range(i32 %68, i32 0, i32 %70)
%72 = load i32, i32* %4
%73 = sext i32 %72 to i64
%74 = add nsw i64 %73, %71
%75 = trunc i64 %74 to i32
store i32 %75, i32* %4
%76 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%77 = load i32, i32* %76
%78 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%79 = load i32, i32* %78
%80 = call i64 @get_day_in_month_range(i32 %77, i32 %79, i32 13)
%81 = load i32, i32* %4
%82 = sext i32 %81 to i64
%83 = add nsw i64 %82, %80
%84 = trunc i64 %83 to i32
store i32 %84, i32* %4
br label %85
85: ; preds = %66, %47
br label %86
86: ; preds = %85, %29
%87 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%88 = load i32, i32* %87
%89 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%90 = load i32, i32* %89
%91 = icmp eq i32 %88, %90
br i1 %91, label %92, label %106
92: ; preds = %86
%93 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%94 = load i32, i32* %93
%95 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 1
%96 = load i32, i32* %95
%97 = icmp eq i32 %94, %96
br i1 %97, label %98, label %106
98: ; preds = %92
%99 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 2
%100 = load i32, i32* %99
%101 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%102 = load i32, i32* %101
%103 = sub nsw i32 %100, %102
%104 = load i32, i32* %4
%105 = add nsw i32 %104, %103
store i32 %105, i32* %4
br label %167
106: ; preds = %92, %86
%107 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%108 = load i32, i32* %107
%109 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%110 = load i32, i32* %109
%111 = icmp sgt i32 %108, %110
br i1 %111, label %136, label %112
112: ; preds = %106
%113 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%114 = load i32, i32* %113
%115 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%116 = load i32, i32* %115
%117 = icmp eq i32 %114, %116
br i1 %117, label %118, label %151
118: ; preds = %112
%119 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%120 = load i32, i32* %119
%121 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 1
%122 = load i32, i32* %121
%123 = icmp sgt i32 %120, %122
br i1 %123, label %136, label %124
124: ; preds = %118
%125 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%126 = load i32, i32* %125
%127 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 1
%128 = load i32, i32* %127
%129 = icmp eq i32 %126, %128
br i1 %129, label %130, label %151
130: ; preds = %124
%131 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%132 = load i32, i32* %131
%133 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 2
%134 = load i32, i32* %133
%135 = icmp sgt i32 %132, %134
br i1 %135, label %136, label %151
136: ; preds = %130, %118, %106
%137 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 0
%138 = load i32, i32* %137
%139 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 1
%140 = load i32, i32* %139
%141 = call i32 @get_last_day_of_month(i32 %138, i32 %140)
%142 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 2
%143 = load i32, i32* %142
%144 = sub nsw i32 %141, %143
%145 = load i32, i32* %4
%146 = sub nsw i32 %145, %144
store i32 %146, i32* %4
%147 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%148 = load i32, i32* %147
%149 = load i32, i32* %4
%150 = sub nsw i32 %149, %148
store i32 %150, i32* %4
br label %166
151: ; preds = %130, %124, %112
%152 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%153 = load i32, i32* %152
%154 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%155 = load i32, i32* %154
%156 = call i32 @get_last_day_of_month(i32 %153, i32 %155)
%157 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%158 = load i32, i32* %157
%159 = sub nsw i32 %156, %158
%160 = load i32, i32* %4
%161 = add nsw i32 %160, %159
store i32 %161, i32* %4
%162 = getelementptr inbounds [3 x i32], [3 x i32]* %3, i64 0, i64 2
%163 = load i32, i32* %162
%164 = load i32, i32* %4
%165 = add nsw i32 %164, %163
store i32 %165, i32* %4
br label %166
166: ; preds = %151, %136
br label %167
167: ; preds = %166, %98
%168 = load i32, i32* %4
%169 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.3, i64 0, i64 0), i32 %168)
ret i32 0
}

LLVM IR (-O2):
@.str = [48 x i8] c"Enter birth[YEAR, MONTH, DAY](divide by space)=\00"
@.str.1 = [7 x i8] c"%d%d%d\00"
@.str.2 = [48 x i8] c"Enter today[YEAR, MONTH, DAY](divide by space)=\00"
@.str.3 = [15 x i8] c"Result is: %d\0A\00"
define i32 @main() {
%1 = alloca [3 x i32]
%2 = alloca [3 x i32]
%3 = bitcast [3 x i32]* %1 to i8*
%4 = bitcast [3 x i32]* %2 to i8*
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @.str, i64 0, i64 0))
%6 = getelementptr inbounds [3 x i32], [3 x i32]* %1, i64 0, i64 0
%7 = getelementptr inbounds [3 x i32], [3 x i32]* %1, i64 0, i64 1
%8 = getelementptr inbounds [3 x i32], [3 x i32]* %1, i64 0, i64 2
%9 = call i32 @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i32* %6, i32* %7, i32* %8)
%10 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @.str.2, i64 0, i64 0))
%11 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%12 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%13 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%14 = call i32 @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i32* %11, i32* %12, i32* %13)
%15 = load i32, i32* %6
%16 = load i32, i32* %11
%17 = call i64 @get_day_in_year_range(i32 %15, i32 %16)
%18 = load i32, i32* %6
%19 = load i32, i32* %11
%20 = icmp eq i32 %18, %19
br i1 %20, label %21, label %28
21: ; preds = %0
%22 = load i32, i32* %7
%23 = load i32, i32* %12
%24 = call i64 @get_day_in_month_range(i32 %18, i32 %22, i32 %23)
%25 = shl i64 %17, 32
%26 = ashr exact i64 %25, 32
%27 = add nsw i64 %24, %26
br label %48
28: ; preds = %0
%29 = icmp sgt i32 %18, %19
br i1 %29, label %30, label %40
30: ; preds = %28
%31 = load i32, i32* %7
%32 = call i64 @get_day_in_month_range(i32 %18, i32 %31, i32 0)
%33 = add i64 %32, %17
%34 = load i32, i32* %11
%35 = load i32, i32* %12
%36 = call i64 @get_day_in_month_range(i32 %34, i32 13, i32 %35)
%37 = shl i64 %33, 32
%38 = ashr exact i64 %37, 32
%39 = add nsw i64 %38, %36
br label %48
40: ; preds = %28
%41 = load i32, i32* %12
%42 = call i64 @get_day_in_month_range(i32 %19, i32 0, i32 %41)
%43 = add i64 %42, %17
%44 = load i32, i32* %6
%45 = load i32, i32* %7
%46 = call i64 @get_day_in_month_range(i32 %44, i32 %45, i32 13)
%47 = add i64 %43, %46
br label %48
48: ; preds = %30, %40, %21
%49 = phi i64 [ %27, %21 ], [ %39, %30 ], [ %47, %40 ]
%50 = trunc i64 %49 to i32
%51 = load i32, i32* %6
%52 = load i32, i32* %11
%53 = icmp eq i32 %51, %52
br i1 %53, label %54, label %63
54: ; preds = %48
%55 = load i32, i32* %7
%56 = load i32, i32* %12
%57 = icmp eq i32 %55, %56
br i1 %57, label %58, label %69
58: ; preds = %54
%59 = load i32, i32* %13
%60 = load i32, i32* %8
%61 = add i32 %59, %50
%62 = sub i32 %61, %60
br label %87
63: ; preds = %48
%64 = icmp sgt i32 %51, %52
br i1 %64, label %65, label %67
65: ; preds = %63
%66 = load i32, i32* %12
br label %71
67: ; preds = %63
%68 = load i32, i32* %7
br label %79
69: ; preds = %54
%70 = icmp sgt i32 %55, %56
br i1 %70, label %71, label %79
71: ; preds = %65, %69
%72 = phi i32 [ %66, %65 ], [ %56, %69 ]
%73 = call i32 @get_last_day_of_month(i32 %52, i32 %72)
%74 = load i32, i32* %13
%75 = load i32, i32* %8
%76 = add i32 %74, %50
%77 = add i32 %73, %75
%78 = sub i32 %76, %77
br label %87
79: ; preds = %69, %67
%80 = phi i32 [ %68, %67 ], [ %55, %69 ]
%81 = call i32 @get_last_day_of_month(i32 %51, i32 %80)
%82 = load i32, i32* %8
%83 = load i32, i32* %13
%84 = add i32 %81, %50
%85 = sub i32 %84, %82
%86 = add i32 %85, %83
br label %87
87: ; preds = %71, %79, %58
%88 = phi i32 [ %62, %58 ], [ %78, %71 ], [ %86, %79 ]
%89 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.3, i64 0, i64 0), i32 %88)
ret i32 0
}