void inc_date(int *a) {
  if (a[0] < 28) {
    a[0] += 1;
    if (a[3] < 7)
      a[3] += 1;
    else
      a[3] = 1;
  } else {
    if (a[0] == 28) {
      if (a[1] == 2) {
        if ((!(a[2] % 400)) || ((!(a[2] % 4)) && ((a[2] % 100)))) {
          a[0] += 1;
          if (a[3] < 7)
            a[3] += 1;
          else
            a[3] = 1;
        } else {
          a[0] = 1;
          if (a[3] < 7)
            a[3] += 1;
          else
            a[3] = 1;
          a[1] += 1;
        }
      } else {
        a[0] += 1;
        if (a[3] < 7)
          a[3] += 1;
        else
          a[3] = 1;
      }
    } else {
      if (a[0] == 29) {
        if (a[1] == 2) {
          a[0] = 1;
          if (a[3] < 7)
            a[3] += 1;
          else
            a[3] = 1;
          a[1] += 1;
        } else {
          a[0] += 1;
          if (a[3] < 7)
            a[3] += 1;
          else
            a[3] = 1;
        }
      } else {
        if (a[0] == 30) {
          if ((a[1] == 4) || (a[1] == 6) || (a[1] == 9) || (a[1] == 11)) {
            a[0] = 1;
            if (a[3] < 7)
              a[3] += 1;
            else
              a[3] = 1;
            a[1] += 1;
          } else {
            a[0] += 1;
            if (a[3] < 7)
              a[3] += 1;
            else
              a[3] = 1;
          }
        } else {
          a[0] = 1;
          if (a[3] < 7)
            a[3] += 1;
          else
            a[3] = 1;
          if (a[1] < 12)
            a[1] += 1;
          else {
            a[1] = 1;
            a[2] += 1;
          }
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<inc_date>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
cmpl   $0x1c,(%rax)
jge    1150 <inc_date+0x50>
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x7,0xc(%rax)
jge    1140 <inc_date+0x40>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rax)
jmp    114b <inc_date+0x4b>
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
jmp    1464 <inc_date+0x364>
mov    -0x8(%rbp),%rax
cmpl   $0x1c,(%rax)
jne    1275 <inc_date+0x175>
mov    -0x8(%rbp),%rax
cmpl   $0x2,0x4(%rax)
jne    1235 <inc_date+0x135>
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%eax
mov    $0x190,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     11b3 <inc_date+0xb3>
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    11ee <inc_date+0xee>
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     11ee <inc_date+0xee>
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x7,0xc(%rax)
jge    11de <inc_date+0xde>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rax)
jmp    11e9 <inc_date+0xe9>
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
jmp    1230 <inc_date+0x130>
mov    -0x8(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x7,0xc(%rax)
jge    1218 <inc_date+0x118>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rax)
jmp    1223 <inc_date+0x123>
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0x4(%rax)
jmp    1270 <inc_date+0x170>
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x7,0xc(%rax)
jge    1260 <inc_date+0x160>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rax)
jmp    126b <inc_date+0x16b>
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
jmp    1270 <inc_date+0x170>
jmp    145f <inc_date+0x35f>
mov    -0x8(%rbp),%rax
cmpl   $0x1d,(%rax)
jne    1317 <inc_date+0x217>
mov    -0x8(%rbp),%rax
cmpl   $0x2,0x4(%rax)
jne    12d7 <inc_date+0x1d7>
mov    -0x8(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x7,0xc(%rax)
jge    12ba <inc_date+0x1ba>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rax)
jmp    12c5 <inc_date+0x1c5>
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0x4(%rax)
jmp    1312 <inc_date+0x212>
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x7,0xc(%rax)
jge    1302 <inc_date+0x202>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rax)
jmp    130d <inc_date+0x20d>
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
jmp    1312 <inc_date+0x212>
jmp    145a <inc_date+0x35a>
mov    -0x8(%rbp),%rax
cmpl   $0x1e,(%rax)
jne    13e3 <inc_date+0x2e3>
mov    -0x8(%rbp),%rax
cmpl   $0x4,0x4(%rax)
je     135c <inc_date+0x25c>
mov    -0x8(%rbp),%rax
cmpl   $0x6,0x4(%rax)
je     135c <inc_date+0x25c>
mov    -0x8(%rbp),%rax
cmpl   $0x9,0x4(%rax)
je     135c <inc_date+0x25c>
mov    -0x8(%rbp),%rax
cmpl   $0xb,0x4(%rax)
jne    13a3 <inc_date+0x2a3>
mov    -0x8(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x7,0xc(%rax)
jge    1386 <inc_date+0x286>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rax)
jmp    1391 <inc_date+0x291>
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0x4(%rax)
jmp    13de <inc_date+0x2de>
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x7,0xc(%rax)
jge    13ce <inc_date+0x2ce>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rax)
jmp    13d9 <inc_date+0x2d9>
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
jmp    13de <inc_date+0x2de>
jmp    1455 <inc_date+0x355>
mov    -0x8(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x7,0xc(%rax)
jge    140d <inc_date+0x30d>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rax)
jmp    1418 <inc_date+0x318>
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0xc,0x4(%rax)
jge    1438 <inc_date+0x338>
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0x4(%rax)
jmp    1450 <inc_date+0x350>
mov    -0x8(%rbp),%rax
movl   $0x1,0x4(%rax)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0x8(%rax)
jmp    1455 <inc_date+0x355>
jmp    145a <inc_date+0x35a>
jmp    145f <inc_date+0x35f>
jmp    1464 <inc_date+0x364>
pop    %rbp
ret

x86 assembly (clang, -O2):
<inc_date>:
mov    (%rdi),%eax
cmp    $0x1b,%eax
jg     111b <inc_date+0x1b>
add    $0x1,%eax
mov    %eax,(%rdi)
mov    0xc(%rdi),%eax
cmp    $0x6,%eax
jg     117c <inc_date+0x7c>
add    $0x1,%eax
mov    %eax,0xc(%rdi)
ret
cmp    $0x1e,%eax
je     1184 <inc_date+0x84>
cmp    $0x1d,%eax
je     11ba <inc_date+0xba>
cmp    $0x1c,%eax
jne    11e2 <inc_date+0xe2>
cmpl   $0x2,0x4(%rdi)
jne    1174 <inc_date+0x74>
mov    0x8(%rdi),%eax
imul   $0xc28f5c29,%eax,%ecx
add    $0x51eb850,%ecx
ror    $0x4,%ecx
cmp    $0xa3d70b,%ecx
jb     1174 <inc_date+0x74>
test   $0x3,%al
jne    11c0 <inc_date+0xc0>
movslq %eax,%rcx
imul   $0x51eb851f,%rcx,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x25,%rcx
add    %edx,%ecx
imul   $0x64,%ecx,%ecx
sub    %ecx,%eax
je     11c0 <inc_date+0xc0>
movl   $0x1d,(%rdi)
jmp    110c <inc_date+0xc>
movl   $0x1,0xc(%rdi)
ret
mov    0x4(%rdi),%eax
cmp    $0xb,%eax
ja     1222 <inc_date+0x122>
mov    $0xa50,%ecx
bt     %eax,%ecx
jae    1222 <inc_date+0x122>
movl   $0x1,(%rdi)
mov    0xc(%rdi),%ecx
lea    0x1(%rcx),%edx
cmp    $0x7,%ecx
mov    $0x1,%ecx
cmovl  %edx,%ecx
mov    %ecx,0xc(%rdi)
jmp    1204 <inc_date+0x104>
cmpl   $0x2,0x4(%rdi)
jne    120b <inc_date+0x10b>
movabs $0x300000001,%rax
mov    %rax,(%rdi)
mov    0xc(%rdi),%eax
lea    0x1(%rax),%ecx
cmp    $0x7,%eax
mov    $0x1,%eax
cmovl  %ecx,%eax
mov    %eax,0xc(%rdi)
ret
movl   $0x1,(%rdi)
mov    0x4(%rdi),%eax
mov    0xc(%rdi),%ecx
lea    0x1(%rcx),%edx
cmp    $0x7,%ecx
mov    $0x1,%ecx
cmovl  %edx,%ecx
mov    %ecx,0xc(%rdi)
cmp    $0xb,%eax
jg     1216 <inc_date+0x116>
add    $0x1,%eax
mov    %eax,0x4(%rdi)
ret
movl   $0x1e,(%rdi)
jmp    110c <inc_date+0xc>
movl   $0x1,0x4(%rdi)
addl   $0x1,0x8(%rdi)
ret
movl   $0x1f,(%rdi)
jmp    110c <inc_date+0xc>

LLVM IR (-O0):
define void @inc_date(i32* %0) {
%2 = alloca i32*
store i32* %0, i32** %2
%3 = load i32*, i32** %2
%4 = getelementptr inbounds i32, i32* %3, i64 0
%5 = load i32, i32* %4
%6 = icmp slt i32 %5, 28
br i1 %6, label %7, label %25
7: ; preds = %1
%8 = load i32*, i32** %2
%9 = getelementptr inbounds i32, i32* %8, i64 0
%10 = load i32, i32* %9
%11 = add nsw i32 %10, 1
store i32 %11, i32* %9
%12 = load i32*, i32** %2
%13 = getelementptr inbounds i32, i32* %12, i64 3
%14 = load i32, i32* %13
%15 = icmp slt i32 %14, 7
br i1 %15, label %16, label %21
16: ; preds = %7
%17 = load i32*, i32** %2
%18 = getelementptr inbounds i32, i32* %17, i64 3
%19 = load i32, i32* %18
%20 = add nsw i32 %19, 1
store i32 %20, i32* %18
br label %24
21: ; preds = %7
%22 = load i32*, i32** %2
%23 = getelementptr inbounds i32, i32* %22, i64 3
store i32 1, i32* %23
br label %24
24: ; preds = %21, %16
br label %260
25: ; preds = %1
%26 = load i32*, i32** %2
%27 = getelementptr inbounds i32, i32* %26, i64 0
%28 = load i32, i32* %27
%29 = icmp eq i32 %28, 28
br i1 %29, label %30, label %111
30: ; preds = %25
%31 = load i32*, i32** %2
%32 = getelementptr inbounds i32, i32* %31, i64 1
%33 = load i32, i32* %32
%34 = icmp eq i32 %33, 2
br i1 %34, label %35, label %92
35: ; preds = %30
%36 = load i32*, i32** %2
%37 = getelementptr inbounds i32, i32* %36, i64 2
%38 = load i32, i32* %37
%39 = srem i32 %38, 400
%40 = icmp ne i32 %39, 0
br i1 %40, label %41, label %53
41: ; preds = %35
%42 = load i32*, i32** %2
%43 = getelementptr inbounds i32, i32* %42, i64 2
%44 = load i32, i32* %43
%45 = srem i32 %44, 4
%46 = icmp ne i32 %45, 0
br i1 %46, label %71, label %47
47: ; preds = %41
%48 = load i32*, i32** %2
%49 = getelementptr inbounds i32, i32* %48, i64 2
%50 = load i32, i32* %49
%51 = srem i32 %50, 100
%52 = icmp ne i32 %51, 0
br i1 %52, label %53, label %71
53: ; preds = %47, %35
%54 = load i32*, i32** %2
%55 = getelementptr inbounds i32, i32* %54, i64 0
%56 = load i32, i32* %55
%57 = add nsw i32 %56, 1
store i32 %57, i32* %55
%58 = load i32*, i32** %2
%59 = getelementptr inbounds i32, i32* %58, i64 3
%60 = load i32, i32* %59
%61 = icmp slt i32 %60, 7
br i1 %61, label %62, label %67
62: ; preds = %53
%63 = load i32*, i32** %2
%64 = getelementptr inbounds i32, i32* %63, i64 3
%65 = load i32, i32* %64
%66 = add nsw i32 %65, 1
store i32 %66, i32* %64
br label %70
67: ; preds = %53
%68 = load i32*, i32** %2
%69 = getelementptr inbounds i32, i32* %68, i64 3
store i32 1, i32* %69
br label %70
70: ; preds = %67, %62
br label %91
71: ; preds = %47, %41
%72 = load i32*, i32** %2
%73 = getelementptr inbounds i32, i32* %72, i64 0
store i32 1, i32* %73
%74 = load i32*, i32** %2
%75 = getelementptr inbounds i32, i32* %74, i64 3
%76 = load i32, i32* %75
%77 = icmp slt i32 %76, 7
br i1 %77, label %78, label %83
78: ; preds = %71
%79 = load i32*, i32** %2
%80 = getelementptr inbounds i32, i32* %79, i64 3
%81 = load i32, i32* %80
%82 = add nsw i32 %81, 1
store i32 %82, i32* %80
br label %86
83: ; preds = %71
%84 = load i32*, i32** %2
%85 = getelementptr inbounds i32, i32* %84, i64 3
store i32 1, i32* %85
br label %86
86: ; preds = %83, %78
%87 = load i32*, i32** %2
%88 = getelementptr inbounds i32, i32* %87, i64 1
%89 = load i32, i32* %88
%90 = add nsw i32 %89, 1
store i32 %90, i32* %88
br label %91
91: ; preds = %86, %70
br label %110
92: ; preds = %30
%93 = load i32*, i32** %2
%94 = getelementptr inbounds i32, i32* %93, i64 0
%95 = load i32, i32* %94
%96 = add nsw i32 %95, 1
store i32 %96, i32* %94
%97 = load i32*, i32** %2
%98 = getelementptr inbounds i32, i32* %97, i64 3
%99 = load i32, i32* %98
%100 = icmp slt i32 %99, 7
br i1 %100, label %101, label %106
101: ; preds = %92
%102 = load i32*, i32** %2
%103 = getelementptr inbounds i32, i32* %102, i64 3
%104 = load i32, i32* %103
%105 = add nsw i32 %104, 1
store i32 %105, i32* %103
br label %109
106: ; preds = %92
%107 = load i32*, i32** %2
%108 = getelementptr inbounds i32, i32* %107, i64 3
store i32 1, i32* %108
br label %109
109: ; preds = %106, %101
br label %110
110: ; preds = %109, %91
br label %259
111: ; preds = %25
%112 = load i32*, i32** %2
%113 = getelementptr inbounds i32, i32* %112, i64 0
%114 = load i32, i32* %113
%115 = icmp eq i32 %114, 29
br i1 %115, label %116, label %160
116: ; preds = %111
%117 = load i32*, i32** %2
%118 = getelementptr inbounds i32, i32* %117, i64 1
%119 = load i32, i32* %118
%120 = icmp eq i32 %119, 2
br i1 %120, label %121, label %141
121: ; preds = %116
%122 = load i32*, i32** %2
%123 = getelementptr inbounds i32, i32* %122, i64 0
store i32 1, i32* %123
%124 = load i32*, i32** %2
%125 = getelementptr inbounds i32, i32* %124, i64 3
%126 = load i32, i32* %125
%127 = icmp slt i32 %126, 7
br i1 %127, label %128, label %133
128: ; preds = %121
%129 = load i32*, i32** %2
%130 = getelementptr inbounds i32, i32* %129, i64 3
%131 = load i32, i32* %130
%132 = add nsw i32 %131, 1
store i32 %132, i32* %130
br label %136
133: ; preds = %121
%134 = load i32*, i32** %2
%135 = getelementptr inbounds i32, i32* %134, i64 3
store i32 1, i32* %135
br label %136
136: ; preds = %133, %128
%137 = load i32*, i32** %2
%138 = getelementptr inbounds i32, i32* %137, i64 1
%139 = load i32, i32* %138
%140 = add nsw i32 %139, 1
store i32 %140, i32* %138
br label %159
141: ; preds = %116
%142 = load i32*, i32** %2
%143 = getelementptr inbounds i32, i32* %142, i64 0
%144 = load i32, i32* %143
%145 = add nsw i32 %144, 1
store i32 %145, i32* %143
%146 = load i32*, i32** %2
%147 = getelementptr inbounds i32, i32* %146, i64 3
%148 = load i32, i32* %147
%149 = icmp slt i32 %148, 7
br i1 %149, label %150, label %155
150: ; preds = %141
%151 = load i32*, i32** %2
%152 = getelementptr inbounds i32, i32* %151, i64 3
%153 = load i32, i32* %152
%154 = add nsw i32 %153, 1
store i32 %154, i32* %152
br label %158
155: ; preds = %141
%156 = load i32*, i32** %2
%157 = getelementptr inbounds i32, i32* %156, i64 3
store i32 1, i32* %157
br label %158
158: ; preds = %155, %150
br label %159
159: ; preds = %158, %136
br label %258
160: ; preds = %111
%161 = load i32*, i32** %2
%162 = getelementptr inbounds i32, i32* %161, i64 0
%163 = load i32, i32* %162
%164 = icmp eq i32 %163, 30
br i1 %164, label %165, label %224
165: ; preds = %160
%166 = load i32*, i32** %2
%167 = getelementptr inbounds i32, i32* %166, i64 1
%168 = load i32, i32* %167
%169 = icmp eq i32 %168, 4
br i1 %169, label %185, label %170
170: ; preds = %165
%171 = load i32*, i32** %2
%172 = getelementptr inbounds i32, i32* %171, i64 1
%173 = load i32, i32* %172
%174 = icmp eq i32 %173, 6
br i1 %174, label %185, label %175
175: ; preds = %170
%176 = load i32*, i32** %2
%177 = getelementptr inbounds i32, i32* %176, i64 1
%178 = load i32, i32* %177
%179 = icmp eq i32 %178, 9
br i1 %179, label %185, label %180
180: ; preds = %175
%181 = load i32*, i32** %2
%182 = getelementptr inbounds i32, i32* %181, i64 1
%183 = load i32, i32* %182
%184 = icmp eq i32 %183, 11
br i1 %184, label %185, label %205
185: ; preds = %180, %175, %170, %165
%186 = load i32*, i32** %2
%187 = getelementptr inbounds i32, i32* %186, i64 0
store i32 1, i32* %187
%188 = load i32*, i32** %2
%189 = getelementptr inbounds i32, i32* %188, i64 3
%190 = load i32, i32* %189
%191 = icmp slt i32 %190, 7
br i1 %191, label %192, label %197
192: ; preds = %185
%193 = load i32*, i32** %2
%194 = getelementptr inbounds i32, i32* %193, i64 3
%195 = load i32, i32* %194
%196 = add nsw i32 %195, 1
store i32 %196, i32* %194
br label %200
197: ; preds = %185
%198 = load i32*, i32** %2
%199 = getelementptr inbounds i32, i32* %198, i64 3
store i32 1, i32* %199
br label %200
200: ; preds = %197, %192
%201 = load i32*, i32** %2
%202 = getelementptr inbounds i32, i32* %201, i64 1
%203 = load i32, i32* %202
%204 = add nsw i32 %203, 1
store i32 %204, i32* %202
br label %223
205: ; preds = %180
%206 = load i32*, i32** %2
%207 = getelementptr inbounds i32, i32* %206, i64 0
%208 = load i32, i32* %207
%209 = add nsw i32 %208, 1
store i32 %209, i32* %207
%210 = load i32*, i32** %2
%211 = getelementptr inbounds i32, i32* %210, i64 3
%212 = load i32, i32* %211
%213 = icmp slt i32 %212, 7
br i1 %213, label %214, label %219
214: ; preds = %205
%215 = load i32*, i32** %2
%216 = getelementptr inbounds i32, i32* %215, i64 3
%217 = load i32, i32* %216
%218 = add nsw i32 %217, 1
store i32 %218, i32* %216
br label %222
219: ; preds = %205
%220 = load i32*, i32** %2
%221 = getelementptr inbounds i32, i32* %220, i64 3
store i32 1, i32* %221
br label %222
222: ; preds = %219, %214
br label %223
223: ; preds = %222, %200
br label %257
224: ; preds = %160
%225 = load i32*, i32** %2
%226 = getelementptr inbounds i32, i32* %225, i64 0
store i32 1, i32* %226
%227 = load i32*, i32** %2
%228 = getelementptr inbounds i32, i32* %227, i64 3
%229 = load i32, i32* %228
%230 = icmp slt i32 %229, 7
br i1 %230, label %231, label %236
231: ; preds = %224
%232 = load i32*, i32** %2
%233 = getelementptr inbounds i32, i32* %232, i64 3
%234 = load i32, i32* %233
%235 = add nsw i32 %234, 1
store i32 %235, i32* %233
br label %239
236: ; preds = %224
%237 = load i32*, i32** %2
%238 = getelementptr inbounds i32, i32* %237, i64 3
store i32 1, i32* %238
br label %239
239: ; preds = %236, %231
%240 = load i32*, i32** %2
%241 = getelementptr inbounds i32, i32* %240, i64 1
%242 = load i32, i32* %241
%243 = icmp slt i32 %242, 12
br i1 %243, label %244, label %249
244: ; preds = %239
%245 = load i32*, i32** %2
%246 = getelementptr inbounds i32, i32* %245, i64 1
%247 = load i32, i32* %246
%248 = add nsw i32 %247, 1
store i32 %248, i32* %246
br label %256
249: ; preds = %239
%250 = load i32*, i32** %2
%251 = getelementptr inbounds i32, i32* %250, i64 1
store i32 1, i32* %251
%252 = load i32*, i32** %2
%253 = getelementptr inbounds i32, i32* %252, i64 2
%254 = load i32, i32* %253
%255 = add nsw i32 %254, 1
store i32 %255, i32* %253
br label %256
256: ; preds = %249, %244
br label %257
257: ; preds = %256, %223
br label %258
258: ; preds = %257, %159
br label %259
259: ; preds = %258, %110
br label %260
260: ; preds = %259, %24
ret void
}

LLVM IR (-O2):
define void @inc_date(i32* %0) {
%2 = load i32, i32* %0
%3 = icmp slt i32 %2, 28
br i1 %3, label %4, label %12
4: ; preds = %1
%5 = add nsw i32 %2, 1
store i32 %5, i32* %0
%6 = getelementptr inbounds i32, i32* %0, i64 3
%7 = load i32, i32* %6
%8 = icmp slt i32 %7, 7
br i1 %8, label %9, label %11
9: ; preds = %4
%10 = add nsw i32 %7, 1
store i32 %10, i32* %6
br label %97
11: ; preds = %4
store i32 1, i32* %6
br label %97
12: ; preds = %1
switch i32 %2, label %82 [
i32 28, label %13
i32 29, label %48
i32 30, label %65
]
13: ; preds = %12
%14 = getelementptr inbounds i32, i32* %0, i64 1
%15 = load i32, i32* %14
%16 = icmp eq i32 %15, 2
br i1 %16, label %17, label %41
17: ; preds = %13
%18 = getelementptr inbounds i32, i32* %0, i64 2
%19 = load i32, i32* %18
%20 = srem i32 %19, 400
%21 = icmp eq i32 %20, 0
br i1 %21, label %28, label %22
22: ; preds = %17
%23 = and i32 %19, 3
%24 = icmp ne i32 %23, 0
%25 = srem i32 %19, 100
%26 = icmp eq i32 %25, 0
%27 = or i1 %24, %26
br i1 %27, label %35, label %28
28: ; preds = %22, %17
store i32 29, i32* %0
%29 = getelementptr inbounds i32, i32* %0, i64 3
%30 = load i32, i32* %29
%31 = icmp slt i32 %30, 7
br i1 %31, label %32, label %34
32: ; preds = %28
%33 = add nsw i32 %30, 1
store i32 %33, i32* %29
br label %97
34: ; preds = %28
store i32 1, i32* %29
br label %97
35: ; preds = %22
store i32 1, i32* %0
%36 = getelementptr inbounds i32, i32* %0, i64 3
%37 = load i32, i32* %36
%38 = icmp slt i32 %37, 7
%39 = add nsw i32 %37, 1
%40 = select i1 %38, i32 %39, i32 1
store i32 %40, i32* %36
store i32 3, i32* %14
br label %97
41: ; preds = %13
store i32 29, i32* %0
%42 = getelementptr inbounds i32, i32* %0, i64 3
%43 = load i32, i32* %42
%44 = icmp slt i32 %43, 7
br i1 %44, label %45, label %47
45: ; preds = %41
%46 = add nsw i32 %43, 1
store i32 %46, i32* %42
br label %97
47: ; preds = %41
store i32 1, i32* %42
br label %97
48: ; preds = %12
%49 = getelementptr inbounds i32, i32* %0, i64 1
%50 = load i32, i32* %49
%51 = icmp eq i32 %50, 2
br i1 %51, label %52, label %58
52: ; preds = %48
store i32 1, i32* %0
%53 = getelementptr inbounds i32, i32* %0, i64 3
%54 = load i32, i32* %53
%55 = icmp slt i32 %54, 7
%56 = add nsw i32 %54, 1
%57 = select i1 %55, i32 %56, i32 1
store i32 %57, i32* %53
store i32 3, i32* %49
br label %97
58: ; preds = %48
store i32 30, i32* %0
%59 = getelementptr inbounds i32, i32* %0, i64 3
%60 = load i32, i32* %59
%61 = icmp slt i32 %60, 7
br i1 %61, label %62, label %64
62: ; preds = %58
%63 = add nsw i32 %60, 1
store i32 %63, i32* %59
br label %97
64: ; preds = %58
store i32 1, i32* %59
br label %97
65: ; preds = %12
%66 = getelementptr inbounds i32, i32* %0, i64 1
%67 = load i32, i32* %66
switch i32 %67, label %75 [
i32 4, label %68
i32 6, label %68
i32 9, label %68
i32 11, label %68
]
68: ; preds = %65, %65, %65, %65
store i32 1, i32* %0
%69 = getelementptr inbounds i32, i32* %0, i64 3
%70 = load i32, i32* %69
%71 = icmp slt i32 %70, 7
%72 = add nsw i32 %70, 1
%73 = select i1 %71, i32 %72, i32 1
store i32 %73, i32* %69
%74 = add nuw nsw i32 %67, 1
store i32 %74, i32* %66
br label %97
75: ; preds = %65
store i32 31, i32* %0
%76 = getelementptr inbounds i32, i32* %0, i64 3
%77 = load i32, i32* %76
%78 = icmp slt i32 %77, 7
br i1 %78, label %79, label %81
79: ; preds = %75
%80 = add nsw i32 %77, 1
store i32 %80, i32* %76
br label %97
81: ; preds = %75
store i32 1, i32* %76
br label %97
82: ; preds = %12
store i32 1, i32* %0
%83 = getelementptr inbounds i32, i32* %0, i64 3
%84 = load i32, i32* %83
%85 = icmp slt i32 %84, 7
%86 = add nsw i32 %84, 1
%87 = select i1 %85, i32 %86, i32 1
store i32 %87, i32* %83
%88 = getelementptr inbounds i32, i32* %0, i64 1
%89 = load i32, i32* %88
%90 = icmp slt i32 %89, 12
br i1 %90, label %91, label %93
91: ; preds = %82
%92 = add nsw i32 %89, 1
store i32 %92, i32* %88
br label %97
93: ; preds = %82
store i32 1, i32* %88
%94 = getelementptr inbounds i32, i32* %0, i64 2
%95 = load i32, i32* %94
%96 = add nsw i32 %95, 1
store i32 %96, i32* %94
br label %97
97: ; preds = %45, %47, %35, %34, %32, %79, %81, %68, %93, %91, %52, %64, %62, %9, %11
ret void
}