#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 current(int);
int date(int day, int month, int year) {
  int date = 0;
  register int i;
  static int m[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  if (year == 0)
    year = current(1);
  for (i = 0; i < month - 1; i++)
    date += m[i];
  date += day;
  if ((year % 4) == 0 && month > 2 && (year % 100) != 0)
    date++;
  for (i = 1984; i < year; i++) {
    if ((i % 4) == 0)
      date += 366;
    else
      date += 365;
  }
  return (date);
}


x86 assembly (clang, -O0):
<date>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
cmpl   $0x0,-0xc(%rbp)
jne    113f <date+0x2f>
mov    $0x1,%edi
call   1030 <current@plt>
mov    %eax,-0xc(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1179 <date+0x69>
movslq -0x14(%rbp),%rcx
lea    0x2ece(%rip),%rax
mov    (%rax,%rcx,4),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1146 <date+0x36>
mov    -0x4(%rbp),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    11bd <date+0xad>
cmpl   $0x2,-0x8(%rbp)
jle    11bd <date+0xad>
mov    -0xc(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     11bd <date+0xad>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
movl   $0x7c0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1212 <date+0x102>
mov    -0x14(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    11f4 <date+0xe4>
mov    -0x10(%rbp),%eax
add    $0x16e,%eax
mov    %eax,-0x10(%rbp)
jmp    11ff <date+0xef>
mov    -0x10(%rbp),%eax
add    $0x16d,%eax
mov    %eax,-0x10(%rbp)
jmp    1204 <date+0xf4>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11c4 <date+0xb4>
mov    -0x10(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<date>:
push   %rbp
push   %r14
push   %rbx
mov    %esi,%ebx
mov    %edi,%r14d
test   %edx,%edx
jne    1129 <date+0x19>
mov    $0x1,%edi
call   1030 <current@plt>
mov    %eax,%edx
xor    %esi,%esi
cmp    $0x2,%ebx
jl     124c <date+0x13c>
lea    -0x1(%rbx),%eax
cmp    $0x8,%eax
jae    1146 <date+0x36>
xor    %r8d,%r8d
xor    %esi,%esi
jmp    1223 <date+0x113>
mov    %eax,%r8d
and    $0xfffffff8,%r8d
lea    -0x8(%r8),%rcx
mov    %rcx,%rsi
shr    $0x3,%rsi
add    $0x1,%rsi
mov    %esi,%ebp
and    $0x3,%ebp
cmp    $0x18,%rcx
jae    1173 <date+0x63>
pxor   %xmm0,%xmm0
xor    %edi,%edi
pxor   %xmm1,%xmm1
jmp    11c9 <date+0xb9>
and    $0xfffffffffffffffc,%rsi
pxor   %xmm0,%xmm0
xor    %edi,%edi
lea    0xecc(%rip),%rcx
pxor   %xmm1,%xmm1
nopl   0x0(%rax,%rax,1)
paddd  (%rcx,%rdi,4),%xmm0
paddd  0x10(%rcx,%rdi,4),%xmm1
paddd  0x20(%rcx,%rdi,4),%xmm0
paddd  0x30(%rcx,%rdi,4),%xmm1
paddd  0x40(%rcx,%rdi,4),%xmm0
paddd  0x50(%rcx,%rdi,4),%xmm1
paddd  0x60(%rcx,%rdi,4),%xmm0
paddd  0x70(%rcx,%rdi,4),%xmm1
add    $0x20,%rdi
add    $0xfffffffffffffffc,%rsi
jne    1190 <date+0x80>
test   %rbp,%rbp
je     1204 <date+0xf4>
lea    0xe7b(%rip),%rcx
lea    (%rcx,%rdi,4),%rcx
add    $0x10,%rcx
shl    $0x5,%rbp
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
paddd  -0x10(%rcx,%rsi,1),%xmm0
paddd  (%rcx,%rsi,1),%xmm1
add    $0x20,%rsi
cmp    %rsi,%rbp
jne    11f0 <date+0xe0>
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%esi
cmp    %rax,%r8
je     124c <date+0x13c>
lea    0xe26(%rip),%rcx
lea    (%rcx,%r8,4),%rcx
sub    %r8,%rax
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    (%rcx,%rdi,4),%esi
add    $0x1,%rdi
cmp    %rdi,%rax
jne    1240 <date+0x130>
test   $0x3,%dl
sete   %al
cmp    $0x3,%ebx
setge  %cl
imul   $0xc28f5c29,%edx,%edi
add    $0x51eb850,%edi
ror    $0x2,%edi
cmp    $0x28f5c29,%edi
setae  %bl
and    %al,%cl
and    %bl,%cl
movzbl %cl,%eax
add    %r14d,%eax
add    %esi,%eax
cmp    $0x7c1,%edx
jl     1387 <date+0x277>
lea    -0x7c0(%rdx),%esi
mov    $0x7c0,%ecx
cmp    $0x8,%esi
jb     1370 <date+0x260>
mov    %esi,%ecx
and    $0xfffffff8,%ecx
movd   %eax,%xmm0
lea    -0x8(%rcx),%edi
mov    %edi,%eax
shr    $0x3,%eax
add    $0x1,%eax
test   %edi,%edi
je     138c <date+0x27c>
mov    %eax,%edi
and    $0xfffffffe,%edi
pxor   %xmm8,%xmm8
movdqa 0xd46(%rip),%xmm4
movdqa 0xd4d(%rip),%xmm9
movdqa 0xd55(%rip),%xmm5
movdqa 0xd5d(%rip),%xmm7
pxor   %xmm1,%xmm1
nopw   0x0(%rax,%rax,1)
movdqa %xmm4,%xmm3
movdqa %xmm4,%xmm2
pand   %xmm9,%xmm2
pcmpeqd %xmm8,%xmm2
movdqa %xmm5,%xmm6
psubd  %xmm2,%xmm6
paddd  %xmm6,%xmm0
paddd  %xmm6,%xmm1
paddd  %xmm6,%xmm0
paddd  %xmm6,%xmm1
paddd  %xmm7,%xmm4
add    $0xfffffffe,%edi
jne    12f0 <date+0x1e0>
pand   0xcf5(%rip),%xmm3
test   $0x1,%al
je     134b <date+0x23b>
pxor   %xmm2,%xmm2
pcmpeqd %xmm2,%xmm3
movdqa 0xcf1(%rip),%xmm2
psubd  %xmm3,%xmm2
paddd  %xmm2,%xmm0
paddd  %xmm2,%xmm1
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
cmp    %ecx,%esi
je     1387 <date+0x277>
add    $0x7c0,%ecx
nop
mov    %ecx,%esi
and    $0x3,%esi
cmp    $0x1,%esi
adc    $0x0,%eax
add    $0x16d,%eax
add    $0x1,%ecx
cmp    %ecx,%edx
jne    1370 <date+0x260>
pop    %rbx
pop    %r14
pop    %rbp
ret
pxor   %xmm1,%xmm1
movdqa 0xc68(%rip),%xmm3
test   $0x1,%al
jne    132f <date+0x21f>
jmp    134b <date+0x23b>

LLVM IR (-O0):
@date.m = internal global [12 x i32] [i32 31, i32 28, i32 31, i32 30, i32 31, i32 30, i32 31, i32 31, i32 30, i32 31, i32 30, i32 31]
define i32 @date(i32 %0, i32 %1, i32 %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i32 %0, i32* %4
store i32 %1, i32* %5
store i32 %2, i32* %6
store i32 0, i32* %7
%9 = load i32, i32* %6
%10 = icmp eq i32 %9, 0
br i1 %10, label %11, label %13
11: ; preds = %3
%12 = call i32 @current(i32 1)
store i32 %12, i32* %6
br label %13
13: ; preds = %11, %3
store i32 0, i32* %8
br label %14
14: ; preds = %26, %13
%15 = load i32, i32* %8
%16 = load i32, i32* %5
%17 = sub nsw i32 %16, 1
%18 = icmp slt i32 %15, %17
br i1 %18, label %19, label %29
19: ; preds = %14
%20 = load i32, i32* %8
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [12 x i32], [12 x i32]* @date.m, i64 0, i64 %21
%23 = load i32, i32* %22
%24 = load i32, i32* %7
%25 = add nsw i32 %24, %23
store i32 %25, i32* %7
br label %26
26: ; preds = %19
%27 = load i32, i32* %8
%28 = add nsw i32 %27, 1
store i32 %28, i32* %8
br label %14
29: ; preds = %14
%30 = load i32, i32* %4
%31 = load i32, i32* %7
%32 = add nsw i32 %31, %30
store i32 %32, i32* %7
%33 = load i32, i32* %6
%34 = srem i32 %33, 4
%35 = icmp eq i32 %34, 0
br i1 %35, label %36, label %46
36: ; preds = %29
%37 = load i32, i32* %5
%38 = icmp sgt i32 %37, 2
br i1 %38, label %39, label %46
39: ; preds = %36
%40 = load i32, i32* %6
%41 = srem i32 %40, 100
%42 = icmp ne i32 %41, 0
br i1 %42, label %43, label %46
43: ; preds = %39
%44 = load i32, i32* %7
%45 = add nsw i32 %44, 1
store i32 %45, i32* %7
br label %46
46: ; preds = %43, %39, %36, %29
store i32 1984, i32* %8
br label %47
47: ; preds = %62, %46
%48 = load i32, i32* %8
%49 = load i32, i32* %6
%50 = icmp slt i32 %48, %49
br i1 %50, label %51, label %65
51: ; preds = %47
%52 = load i32, i32* %8
%53 = srem i32 %52, 4
%54 = icmp eq i32 %53, 0
br i1 %54, label %55, label %58
55: ; preds = %51
%56 = load i32, i32* %7
%57 = add nsw i32 %56, 366
store i32 %57, i32* %7
br label %61
58: ; preds = %51
%59 = load i32, i32* %7
%60 = add nsw i32 %59, 365
store i32 %60, i32* %7
br label %61
61: ; preds = %58, %55
br label %62
62: ; preds = %61
%63 = load i32, i32* %8
%64 = add nsw i32 %63, 1
store i32 %64, i32* %8
br label %47
65: ; preds = %47
%66 = load i32, i32* %7
ret i32 %66
}

LLVM IR (-O2):
@date.m = internal unnamed_addr constant [12 x i32] [i32 31, i32 28, i32 31, i32 30, i32 31, i32 30, i32 31, i32 31, i32 30, i32 31, i32 30, i32 31]
define i32 @date(i32 %0, i32 %1, i32 %2) {
%4 = icmp eq i32 %2, 0
br i1 %4, label %5, label %7
5: ; preds = %3
%6 = tail call i32 @current(i32 1)
br label %7
7: ; preds = %5, %3
%8 = phi i32 [ %6, %5 ], [ %2, %3 ]
%9 = icmp sgt i32 %1, 1
br i1 %9, label %10, label %106
10: ; preds = %7
%11 = add nsw i32 %1, -1
%12 = zext i32 %11 to i64
%13 = icmp ult i32 %11, 8
br i1 %13, label %95, label %14
14: ; preds = %10
%15 = and i64 %12, 4294967288
%16 = add nsw i64 %15, -8
%17 = lshr exact i64 %16, 3
%18 = add nuw nsw i64 %17, 1
%19 = and i64 %18, 3
%20 = icmp ult i64 %16, 24
br i1 %20, label %66, label %21
21: ; preds = %14
%22 = and i64 %18, 4611686018427387900
br label %23
23: ; preds = %23, %21
%24 = phi i64 [ 0, %21 ], [ %63, %23 ]
%25 = phi <4 x i32> [ zeroinitializer, %21 ], [ %61, %23 ]
%26 = phi <4 x i32> [ zeroinitializer, %21 ], [ %62, %23 ]
%27 = phi i64 [ 0, %21 ], [ %64, %23 ]
%28 = getelementptr inbounds [12 x i32], [12 x i32]* @date.m, i64 0, i64 %24
%29 = bitcast i32* %28 to <4 x i32>*
%30 = load <4 x i32>, <4 x i32>* %29
%31 = getelementptr inbounds i32, i32* %28, i64 4
%32 = bitcast i32* %31 to <4 x i32>*
%33 = load <4 x i32>, <4 x i32>* %32
%34 = add <4 x i32> %30, %25
%35 = add <4 x i32> %33, %26
%36 = or i64 %24, 8
%37 = getelementptr inbounds [12 x i32], [12 x i32]* @date.m, i64 0, i64 %36
%38 = bitcast i32* %37 to <4 x i32>*
%39 = load <4 x i32>, <4 x i32>* %38
%40 = getelementptr inbounds i32, i32* %37, i64 4
%41 = bitcast i32* %40 to <4 x i32>*
%42 = load <4 x i32>, <4 x i32>* %41
%43 = add <4 x i32> %39, %34
%44 = add <4 x i32> %42, %35
%45 = or i64 %24, 16
%46 = getelementptr inbounds [12 x i32], [12 x i32]* @date.m, i64 0, i64 %45
%47 = bitcast i32* %46 to <4 x i32>*
%48 = load <4 x i32>, <4 x i32>* %47
%49 = getelementptr inbounds i32, i32* %46, i64 4
%50 = bitcast i32* %49 to <4 x i32>*
%51 = load <4 x i32>, <4 x i32>* %50
%52 = add <4 x i32> %48, %43
%53 = add <4 x i32> %51, %44
%54 = or i64 %24, 24
%55 = getelementptr inbounds [12 x i32], [12 x i32]* @date.m, i64 0, i64 %54
%56 = bitcast i32* %55 to <4 x i32>*
%57 = load <4 x i32>, <4 x i32>* %56
%58 = getelementptr inbounds i32, i32* %55, i64 4
%59 = bitcast i32* %58 to <4 x i32>*
%60 = load <4 x i32>, <4 x i32>* %59
%61 = add <4 x i32> %57, %52
%62 = add <4 x i32> %60, %53
%63 = add nuw i64 %24, 32
%64 = add i64 %27, 4
%65 = icmp eq i64 %64, %22
br i1 %65, label %66, label %23
66: ; preds = %23, %14
%67 = phi <4 x i32> [ undef, %14 ], [ %61, %23 ]
%68 = phi <4 x i32> [ undef, %14 ], [ %62, %23 ]
%69 = phi i64 [ 0, %14 ], [ %63, %23 ]
%70 = phi <4 x i32> [ zeroinitializer, %14 ], [ %61, %23 ]
%71 = phi <4 x i32> [ zeroinitializer, %14 ], [ %62, %23 ]
%72 = icmp eq i64 %19, 0
br i1 %72, label %89, label %73
73: ; preds = %66, %73
%74 = phi i64 [ %86, %73 ], [ %69, %66 ]
%75 = phi <4 x i32> [ %84, %73 ], [ %70, %66 ]
%76 = phi <4 x i32> [ %85, %73 ], [ %71, %66 ]
%77 = phi i64 [ %87, %73 ], [ 0, %66 ]
%78 = getelementptr inbounds [12 x i32], [12 x i32]* @date.m, i64 0, i64 %74
%79 = bitcast i32* %78 to <4 x i32>*
%80 = load <4 x i32>, <4 x i32>* %79
%81 = getelementptr inbounds i32, i32* %78, i64 4
%82 = bitcast i32* %81 to <4 x i32>*
%83 = load <4 x i32>, <4 x i32>* %82
%84 = add <4 x i32> %80, %75
%85 = add <4 x i32> %83, %76
%86 = add nuw i64 %74, 8
%87 = add i64 %77, 1
%88 = icmp eq i64 %87, %19
br i1 %88, label %89, label %73
89: ; preds = %73, %66
%90 = phi <4 x i32> [ %67, %66 ], [ %84, %73 ]
%91 = phi <4 x i32> [ %68, %66 ], [ %85, %73 ]
%92 = add <4 x i32> %91, %90
%93 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %92)
%94 = icmp eq i64 %15, %12
br i1 %94, label %106, label %95
95: ; preds = %10, %89
%96 = phi i64 [ 0, %10 ], [ %15, %89 ]
%97 = phi i32 [ 0, %10 ], [ %93, %89 ]
br label %98
98: ; preds = %95, %98
%99 = phi i64 [ %104, %98 ], [ %96, %95 ]
%100 = phi i32 [ %103, %98 ], [ %97, %95 ]
%101 = getelementptr inbounds [12 x i32], [12 x i32]* @date.m, i64 0, i64 %99
%102 = load i32, i32* %101
%103 = add nsw i32 %102, %100
%104 = add nuw nsw i64 %99, 1
%105 = icmp eq i64 %104, %12
br i1 %105, label %106, label %98
106: ; preds = %98, %89, %7
%107 = phi i32 [ 0, %7 ], [ %93, %89 ], [ %103, %98 ]
%108 = and i32 %8, 3
%109 = icmp eq i32 %108, 0
%110 = icmp sgt i32 %1, 2
%111 = srem i32 %8, 100
%112 = icmp ne i32 %111, 0
%113 = and i1 %110, %109
%114 = select i1 %113, i1 %112, i1 false
%115 = zext i1 %114 to i32
%116 = add i32 %115, %0
%117 = add i32 %116, %107
%118 = icmp sgt i32 %8, 1984
br i1 %118, label %119, label %191
119: ; preds = %106
%120 = add i32 %8, -1984
%121 = icmp ult i32 %120, 8
br i1 %121, label %179, label %122
122: ; preds = %119
%123 = and i32 %120, -8
%124 = add i32 %123, 1984
%125 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %117, i64 0
%126 = add i32 %123, -8
%127 = lshr exact i32 %126, 3
%128 = add nuw nsw i32 %127, 1
%129 = and i32 %128, 1
%130 = icmp eq i32 %126, 0
br i1 %130, label %159, label %131
131: ; preds = %122
%132 = and i32 %128, 1073741822
br label %133
133: ; preds = %133, %131
%134 = phi <4 x i32> [ <i32 1984, i32 1985, i32 1986, i32 1987>, %131 ], [ %154, %133 ]
%135 = phi <4 x i32> [ %125, %131 ], [ %152, %133 ]
%136 = phi <4 x i32> [ zeroinitializer, %131 ], [ %153, %133 ]
%137 = phi i32 [ 0, %131 ], [ %155, %133 ]
%138 = and <4 x i32> %134, <i32 3, i32 3, i32 3, i32 3>
%139 = and <4 x i32> %134, <i32 3, i32 3, i32 3, i32 3>
%140 = icmp eq <4 x i32> %138, zeroinitializer
%141 = icmp eq <4 x i32> %139, zeroinitializer
%142 = select <4 x i1> %140, <4 x i32> <i32 366, i32 366, i32 366, i32 366>, <4 x i32> <i32 365, i32 365, i32 365, i32 365>
%143 = select <4 x i1> %141, <4 x i32> <i32 366, i32 366, i32 366, i32 366>, <4 x i32> <i32 365, i32 365, i32 365, i32 365>
%144 = add <4 x i32> %142, %135
%145 = add <4 x i32> %143, %136
%146 = and <4 x i32> %134, <i32 3, i32 3, i32 3, i32 3>
%147 = and <4 x i32> %134, <i32 3, i32 3, i32 3, i32 3>
%148 = icmp eq <4 x i32> %146, zeroinitializer
%149 = icmp eq <4 x i32> %147, zeroinitializer
%150 = select <4 x i1> %148, <4 x i32> <i32 366, i32 366, i32 366, i32 366>, <4 x i32> <i32 365, i32 365, i32 365, i32 365>
%151 = select <4 x i1> %149, <4 x i32> <i32 366, i32 366, i32 366, i32 366>, <4 x i32> <i32 365, i32 365, i32 365, i32 365>
%152 = add <4 x i32> %150, %144
%153 = add <4 x i32> %151, %145
%154 = add <4 x i32> %134, <i32 16, i32 16, i32 16, i32 16>
%155 = add i32 %137, 2
%156 = icmp eq i32 %155, %132
br i1 %156, label %157, label %133
157: ; preds = %133
%158 = and <4 x i32> %134, <i32 3, i32 3, i32 3, i32 3>
br label %159
159: ; preds = %157, %122
%160 = phi <4 x i32> [ undef, %122 ], [ %152, %157 ]
%161 = phi <4 x i32> [ undef, %122 ], [ %153, %157 ]
%162 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %122 ], [ %158, %157 ]
%163 = phi <4 x i32> [ %125, %122 ], [ %152, %157 ]
%164 = phi <4 x i32> [ zeroinitializer, %122 ], [ %153, %157 ]
%165 = icmp eq i32 %129, 0
br i1 %165, label %173, label %166
166: ; preds = %159
%167 = icmp eq <4 x i32> %162, zeroinitializer
%168 = icmp eq <4 x i32> %162, zeroinitializer
%169 = select <4 x i1> %167, <4 x i32> <i32 366, i32 366, i32 366, i32 366>, <4 x i32> <i32 365, i32 365, i32 365, i32 365>
%170 = select <4 x i1> %168, <4 x i32> <i32 366, i32 366, i32 366, i32 366>, <4 x i32> <i32 365, i32 365, i32 365, i32 365>
%171 = add <4 x i32> %169, %163
%172 = add <4 x i32> %170, %164
br label %173
173: ; preds = %159, %166
%174 = phi <4 x i32> [ %160, %159 ], [ %171, %166 ]
%175 = phi <4 x i32> [ %161, %159 ], [ %172, %166 ]
%176 = add <4 x i32> %175, %174
%177 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %176)
%178 = icmp eq i32 %120, %123
br i1 %178, label %191, label %179
179: ; preds = %119, %173
%180 = phi i32 [ 1984, %119 ], [ %124, %173 ]
%181 = phi i32 [ %117, %119 ], [ %177, %173 ]
br label %182
182: ; preds = %179, %182
%183 = phi i32 [ %189, %182 ], [ %180, %179 ]
%184 = phi i32 [ %188, %182 ], [ %181, %179 ]
%185 = and i32 %183, 3
%186 = icmp eq i32 %185, 0
%187 = select i1 %186, i32 366, i32 365
%188 = add nsw i32 %187, %184
%189 = add nuw nsw i32 %183, 1
%190 = icmp eq i32 %189, %8
br i1 %190, label %191, label %182
191: ; preds = %182, %173, %106
%192 = phi i32 [ %117, %106 ], [ %177, %173 ], [ %188, %182 ]
ret i32 %192
}