#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 calculateweekindex(int, int, int);
scalar_t__ isLeapYear(int);
void getcalendar(int year, int month, int array[6][7]) {
  int n = calculateweekindex(year, month, 1);
  int i, j, t, b;
  int count = 1;
  int daytotal;
  int prevmonth = month - 1;
  if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
      month == 10 || month == 12)
    daytotal = 31;
  else if (month != 2)
    daytotal = 30;
  else {
    if (isLeapYear(year))
      daytotal = 29;
    else
      daytotal = 28;
  }
  for (i = 0; i < 6; i++) {
    for (j = i == 0 ? n - 1 : 0; j < 7; j++) {
      array[i][j] = count <= daytotal ? count : -(count - daytotal);
      count++;
    }
  }
  count = 1;
  b = j;
  for (t = i; i < 6; i++) {
    if (i == t) {
      for (j = b; j < 7; j++)
        array[i][j] = -count;
      count++;
    } else {
      for (j = 0; j < 7; j++)
        array[i][j] = -count;
      count++;
    }
  }
  if (prevmonth == 1 || prevmonth == 3 || prevmonth == 5 || prevmonth == 7 ||
      prevmonth == 8 || prevmonth == 10 || month == 12)
    daytotal = 31;
  else if (prevmonth != 2)
    daytotal = 30;
  else {
    if (isLeapYear(year))
      daytotal = 29;
    else
      daytotal = 28;
  }
  if (prevmonth != 0 && array[0][0] != 1) {
    for (j = n - 2; j >= 0; j--) {
      array[0][j] = -(daytotal--);
    }
  } else {
    prevmonth = 12;
    daytotal = 31;
    for (j = n - 2; j >= 0; j--) {
      array[0][j] = -(daytotal--);
    }
  }
}


x86 assembly (clang, -O0):
<getcalendar>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    $0x1,%edx
call   1030 <calculateweekindex@plt>
mov    %eax,-0x14(%rbp)
movl   $0x1,-0x28(%rbp)
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x1,-0x8(%rbp)
je     119b <getcalendar+0x7b>
cmpl   $0x3,-0x8(%rbp)
je     119b <getcalendar+0x7b>
cmpl   $0x5,-0x8(%rbp)
je     119b <getcalendar+0x7b>
cmpl   $0x7,-0x8(%rbp)
je     119b <getcalendar+0x7b>
cmpl   $0x8,-0x8(%rbp)
je     119b <getcalendar+0x7b>
cmpl   $0xa,-0x8(%rbp)
je     119b <getcalendar+0x7b>
cmpl   $0xc,-0x8(%rbp)
jne    11a7 <getcalendar+0x87>
movl   $0x1f,-0x2c(%rbp)
jmp    11ec <getcalendar+0xcc>
cmpl   $0x2,-0x8(%rbp)
je     11bd <getcalendar+0x9d>
movl   $0x1e,-0x2c(%rbp)
jmp    11e7 <getcalendar+0xc7>
mov    -0x4(%rbp),%edi
call   1040 <isLeapYear@plt>
cmp    $0x0,%rax
je     11db <getcalendar+0xbb>
movl   $0x1d,-0x2c(%rbp)
jmp    11e2 <getcalendar+0xc2>
movl   $0x1c,-0x2c(%rbp)
jmp    11e7 <getcalendar+0xc7>
jmp    11ec <getcalendar+0xcc>
movl   $0x0,-0x18(%rbp)
cmpl   $0x6,-0x18(%rbp)
jge    1296 <getcalendar+0x176>
cmpl   $0x0,-0x18(%rbp)
jne    1215 <getcalendar+0xf5>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    121f <getcalendar+0xff>
xor    %eax,%eax
mov    %eax,-0x34(%rbp)
jmp    121f <getcalendar+0xff>
mov    -0x34(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x7,-0x1c(%rbp)
jge    1283 <getcalendar+0x163>
mov    -0x28(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1246 <getcalendar+0x126>
mov    -0x28(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    1253 <getcalendar+0x133>
mov    -0x28(%rbp),%ecx
sub    -0x2c(%rbp),%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1225 <getcalendar+0x105>
jmp    1288 <getcalendar+0x168>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11f3 <getcalendar+0xd3>
movl   $0x1,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x6,-0x18(%rbp)
jge    135c <getcalendar+0x23c>
mov    -0x18(%rbp),%eax
cmp    -0x20(%rbp),%eax
jne    1306 <getcalendar+0x1e6>
mov    -0x24(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x7,-0x1c(%rbp)
jge    12f8 <getcalendar+0x1d8>
xor    %edx,%edx
sub    -0x28(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    12c5 <getcalendar+0x1a5>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1349 <getcalendar+0x229>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x7,-0x1c(%rbp)
jge    1340 <getcalendar+0x220>
xor    %edx,%edx
sub    -0x28(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    130d <getcalendar+0x1ed>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    134e <getcalendar+0x22e>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12a9 <getcalendar+0x189>
cmpl   $0x1,-0x30(%rbp)
je     13a2 <getcalendar+0x282>
cmpl   $0x3,-0x30(%rbp)
je     13a2 <getcalendar+0x282>
cmpl   $0x5,-0x30(%rbp)
je     13a2 <getcalendar+0x282>
cmpl   $0x7,-0x30(%rbp)
je     13a2 <getcalendar+0x282>
cmpl   $0x8,-0x30(%rbp)
je     13a2 <getcalendar+0x282>
cmpl   $0xa,-0x30(%rbp)
je     13a2 <getcalendar+0x282>
cmpl   $0xc,-0x8(%rbp)
jne    13ae <getcalendar+0x28e>
movl   $0x1f,-0x2c(%rbp)
jmp    13f3 <getcalendar+0x2d3>
cmpl   $0x2,-0x30(%rbp)
je     13c4 <getcalendar+0x2a4>
movl   $0x1e,-0x2c(%rbp)
jmp    13ee <getcalendar+0x2ce>
mov    -0x4(%rbp),%edi
call   1040 <isLeapYear@plt>
cmp    $0x0,%rax
je     13e2 <getcalendar+0x2c2>
movl   $0x1d,-0x2c(%rbp)
jmp    13e9 <getcalendar+0x2c9>
movl   $0x1c,-0x2c(%rbp)
jmp    13ee <getcalendar+0x2ce>
jmp    13f3 <getcalendar+0x2d3>
cmpl   $0x0,-0x30(%rbp)
je     144a <getcalendar+0x32a>
mov    -0x10(%rbp),%rax
cmpl   $0x1,(%rax)
je     144a <getcalendar+0x32a>
mov    -0x14(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jl     1445 <getcalendar+0x325>
mov    -0x2c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x2c(%rbp)
xor    %edx,%edx
sub    %eax,%edx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1413 <getcalendar+0x2f3>
jmp    1498 <getcalendar+0x378>
movl   $0xc,-0x30(%rbp)
movl   $0x1f,-0x2c(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jl     1493 <getcalendar+0x373>
mov    -0x2c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x2c(%rbp)
xor    %edx,%edx
sub    %eax,%edx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1461 <getcalendar+0x341>
jmp    1498 <getcalendar+0x378>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getcalendar>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rdx,%r14
mov    %esi,%r12d
mov    %edi,%r15d
mov    $0x1,%edx
call   1030 <calculateweekindex@plt>
mov    %eax,%ebx
cmp    $0xc,%r12d
ja     1850 <getcalendar+0x730>
mov    $0x1f,%r11d
mov    $0x15aa,%ecx
bt     %r12d,%ecx
jae    182f <getcalendar+0x70f>
mov    $0x1,%ecx
movd   %r11d,%xmm8
cmp    $0x7,%ebx
jg     1388 <getcalendar+0x268>
lea    -0x1(%rbx),%ecx
movslq %ecx,%r8
mov    $0x9,%ecx
sub    %ebx,%ecx
mov    $0x7,%esi
sub    %ebx,%esi
mov    $0x1,%ebp
cmp    $0x7,%esi
jb     1359 <getcalendar+0x239>
add    $0x1,%rsi
mov    %rsi,%r9
and    $0xfffffffffffffff8,%r9
pshufd $0x0,%xmm8,%xmm14
lea    -0x8(%r9),%rdx
mov    %rdx,%r10
shr    $0x3,%r10
add    $0x1,%r10
test   %rdx,%rdx
je     1865 <getcalendar+0x745>
mov    %r10,%rdi
and    $0xfffffffffffffffe,%rdi
lea    (%r14,%r8,4),%rbp
add    $0x30,%rbp
movdqa 0xe2f(%rip),%xmm7
xor    %edx,%edx
movdqa 0xe34(%rip),%xmm9
movdqa 0xe3b(%rip),%xmm13
movdqa %xmm14,%xmm5
pxor   %xmm13,%xmm5
movdqa 0xe38(%rip),%xmm10
movdqa 0xe3f(%rip),%xmm11
movdqa 0xe46(%rip),%xmm12
nopw   0x0(%rax,%rax,1)
movdqa %xmm7,%xmm6
paddd  %xmm9,%xmm6
movdqa %xmm7,%xmm3
pxor   %xmm13,%xmm3
pcmpgtd %xmm5,%xmm3
movdqa %xmm6,%xmm2
pxor   %xmm13,%xmm2
pcmpgtd %xmm5,%xmm2
movdqa %xmm14,%xmm1
psubd  %xmm7,%xmm1
movdqa %xmm14,%xmm0
psubd  %xmm6,%xmm0
pand   %xmm3,%xmm1
pandn  %xmm7,%xmm3
por    %xmm1,%xmm3
pand   %xmm2,%xmm0
pandn  %xmm6,%xmm2
por    %xmm0,%xmm2
movdqu %xmm3,-0x30(%rbp,%rdx,4)
movdqu %xmm2,-0x20(%rbp,%rdx,4)
movdqa %xmm7,%xmm0
paddd  %xmm10,%xmm0
movdqa %xmm7,%xmm1
paddd  %xmm11,%xmm1
movdqa %xmm0,%xmm2
pxor   %xmm13,%xmm2
pcmpgtd %xmm5,%xmm2
movdqa %xmm1,%xmm3
pxor   %xmm13,%xmm3
pcmpgtd %xmm5,%xmm3
movdqa %xmm14,%xmm6
psubd  %xmm0,%xmm6
movdqa %xmm14,%xmm4
psubd  %xmm1,%xmm4
pand   %xmm2,%xmm6
pandn  %xmm0,%xmm2
por    %xmm6,%xmm2
pand   %xmm3,%xmm4
pandn  %xmm1,%xmm3
por    %xmm4,%xmm3
movdqu %xmm2,-0x10(%rbp,%rdx,4)
movdqu %xmm3,0x0(%rbp,%rdx,4)
add    $0x10,%rdx
paddd  %xmm12,%xmm7
add    $0xfffffffffffffffe,%rdi
jne    1210 <getcalendar+0xf0>
test   $0x1,%r10b
je     134d <getcalendar+0x22d>
add    %r8,%rdx
movdqa 0xd21(%rip),%xmm0
paddd  %xmm7,%xmm0
movdqa 0xd25(%rip),%xmm1
movdqa %xmm14,%xmm2
pxor   %xmm1,%xmm2
movdqa %xmm7,%xmm3
pxor   %xmm1,%xmm3
pcmpgtd %xmm2,%xmm3
pxor   %xmm0,%xmm1
pcmpgtd %xmm2,%xmm1
movdqa %xmm14,%xmm2
psubd  %xmm7,%xmm2
psubd  %xmm0,%xmm14
pand   %xmm3,%xmm2
pandn  %xmm7,%xmm3
por    %xmm2,%xmm3
pand   %xmm1,%xmm14
pandn  %xmm0,%xmm1
por    %xmm14,%xmm1
movdqu %xmm3,(%r14,%rdx,4)
movdqu %xmm1,0x10(%r14,%rdx,4)
cmp    %r9,%rsi
je     1388 <getcalendar+0x268>
add    %r9,%r8
lea    0x1(%r9),%ebp
lea    (%r14,%r8,4),%rsi
mov    %r11d,%edi
sub    %ebp,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    %ebp,%r11d
mov    %ebp,%edx
cmovb  %edi,%edx
mov    %edx,(%rsi)
add    $0x1,%ebp
add    $0x4,%rsi
add    $0xffffffff,%edi
cmp    %ebp,%ecx
jne    1370 <getcalendar+0x250>
lea    0x1(%rcx),%esi
mov    %r11d,%edx
sub    %esi,%edx
mov    %r11d,%edi
sub    %ecx,%edi
cmovge %ecx,%edi
mov    %edi,0x1c(%r14)
cmovg  %esi,%edx
lea    0x6(%rcx),%esi
mov    %r11d,%edi
sub    %esi,%edi
cmovge %esi,%edi
lea    0x7(%rcx),%esi
lea    0x8(%rcx),%r8d
mov    %r11d,%eax
sub    %r8d,%eax
mov    %r11d,%ebp
sub    %esi,%ebp
cmovge %esi,%ebp
mov    %edx,0x20(%r14)
movd   %ecx,%xmm0
pshufd $0x0,%xmm0,%xmm1
movdqa 0xc8c(%rip),%xmm2
paddd  %xmm1,%xmm2
pshufd $0x0,%xmm8,%xmm0
movdqa %xmm2,%xmm3
pcmpgtd %xmm0,%xmm3
movdqa %xmm0,%xmm4
psubd  %xmm2,%xmm4
pand   %xmm3,%xmm4
pandn  %xmm2,%xmm3
por    %xmm4,%xmm3
movdqu %xmm3,0x24(%r14)
mov    %edi,0x34(%r14)
mov    %ebp,0x38(%r14)
cmovg  %r8d,%eax
mov    %eax,0x3c(%r14)
movdqa 0xc58(%rip),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,%xmm3
pcmpgtd %xmm0,%xmm3
movdqa %xmm0,%xmm4
psubd  %xmm2,%xmm4
pand   %xmm3,%xmm4
pandn  %xmm2,%xmm3
por    %xmm4,%xmm3
lea    0xd(%rcx),%eax
mov    %r11d,%edx
sub    %eax,%edx
cmovge %eax,%edx
movdqu %xmm3,0x40(%r14)
mov    %edx,0x50(%r14)
lea    0xe(%rcx),%eax
lea    0xf(%rcx),%edx
mov    %r11d,%esi
sub    %edx,%esi
mov    %r11d,%edi
sub    %eax,%edi
cmovge %eax,%edi
mov    %edi,0x54(%r14)
cmovg  %edx,%esi
mov    %esi,0x58(%r14)
movdqa 0xc0d(%rip),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,%xmm3
pcmpgtd %xmm0,%xmm3
movdqa %xmm0,%xmm4
psubd  %xmm2,%xmm4
pand   %xmm3,%xmm4
pandn  %xmm2,%xmm3
por    %xmm4,%xmm3
movdqu %xmm3,0x5c(%r14)
lea    0x14(%rcx),%eax
mov    %r11d,%edx
sub    %eax,%edx
cmovge %eax,%edx
mov    %edx,0x6c(%r14)
lea    0x15(%rcx),%eax
lea    0x16(%rcx),%edx
mov    %r11d,%esi
sub    %edx,%esi
mov    %r11d,%edi
sub    %eax,%edi
cmovge %eax,%edi
mov    %edi,0x70(%r14)
cmovg  %edx,%esi
mov    %esi,0x74(%r14)
movdqa 0xbc2(%rip),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,%xmm3
pcmpgtd %xmm0,%xmm3
movdqa %xmm0,%xmm4
psubd  %xmm2,%xmm4
pand   %xmm3,%xmm4
pandn  %xmm2,%xmm3
por    %xmm4,%xmm3
movdqu %xmm3,0x78(%r14)
lea    0x1b(%rcx),%eax
mov    %r11d,%edx
sub    %eax,%edx
cmovge %eax,%edx
mov    %edx,0x88(%r14)
lea    0x1c(%rcx),%eax
lea    0x1d(%rcx),%edx
mov    %r11d,%esi
sub    %edx,%esi
mov    %r11d,%edi
sub    %eax,%edi
cmovge %eax,%edi
cmovg  %edx,%esi
mov    %edi,0x8c(%r14)
mov    %esi,0x90(%r14)
paddd  0xb6e(%rip),%xmm1
movdqa %xmm1,%xmm2
pcmpgtd %xmm0,%xmm2
psubd  %xmm1,%xmm0
pand   %xmm2,%xmm0
pandn  %xmm1,%xmm2
por    %xmm0,%xmm2
movdqu %xmm2,0x94(%r14)
add    $0x22,%ecx
sub    %ecx,%r11d
cmovge %ecx,%r11d
mov    %r11d,0xa4(%r14)
cmp    $0xc,%r12d
ja     185b <getcalendar+0x73b>
mov    $0x1f,%eax
mov    $0x1b54,%ecx
bt     %r12d,%ecx
jae    1806 <getcalendar+0x6e6>
cmpl   $0x1,(%r14)
jne    16d2 <getcalendar+0x5b2>
cmp    $0x2,%ebx
jl     17fd <getcalendar+0x6dd>
add    $0xfffffffe,%ebx
mov    $0x1f,%ecx
cmp    $0x7,%ebx
jb     16b7 <getcalendar+0x597>
lea    0x1(%rbx),%rcx
mov    %rcx,%rax
and    $0xfffffffffffffff8,%rax
lea    -0x8(%rax),%rsi
mov    %rsi,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     187e <getcalendar+0x75e>
mov    %rdx,%rdi
and    $0xfffffffffffffffe,%rdi
lea    (%r14,%rbx,4),%rbp
add    $0xfffffffffffffff4,%rbp
movdqa 0xaf0(%rip),%xmm0
xor    %esi,%esi
movdqa 0xa26(%rip),%xmm1
movdqa 0xa3e(%rip),%xmm2
movdqa 0xa46(%rip),%xmm3
movdqa 0xabe(%rip),%xmm4
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm1,%xmm5
psubd  %xmm0,%xmm5
pshufd $0x1b,%xmm0,%xmm6
pxor   %xmm7,%xmm7
psubd  %xmm6,%xmm7
movdqu %xmm7,0x0(%rbp,%rsi,4)
pshufd $0x1b,%xmm5,%xmm5
movdqu %xmm5,-0x10(%rbp,%rsi,4)
movdqa %xmm2,%xmm5
psubd  %xmm0,%xmm5
movdqa %xmm3,%xmm6
psubd  %xmm0,%xmm6
pshufd $0x1b,%xmm5,%xmm5
movdqu %xmm5,-0x20(%rbp,%rsi,4)
pshufd $0x1b,%xmm6,%xmm5
movdqu %xmm5,-0x30(%rbp,%rsi,4)
paddd  %xmm4,%xmm0
add    $0xfffffffffffffff0,%rsi
add    $0xfffffffffffffffe,%rdi
jne    1610 <getcalendar+0x4f0>
neg    %rsi
test   $0x1,%dl
je     16a4 <getcalendar+0x584>
mov    %rbx,%rdx
sub    %rsi,%rdx
pxor   %xmm1,%xmm1
movdqa 0x98c(%rip),%xmm2
psubd  %xmm0,%xmm2
pshufd $0x1b,%xmm0,%xmm0
psubd  %xmm0,%xmm1
movdqu %xmm1,-0xc(%r14,%rdx,4)
pshufd $0x1b,%xmm2,%xmm0
movdqu %xmm0,-0x1c(%r14,%rdx,4)
cmp    %rax,%rcx
je     17fd <getcalendar+0x6dd>
mov    $0x1f,%ecx
sub    %rax,%rbx
sub    %eax,%ecx
neg    %ecx
nopl   0x0(%rax)
mov    %ecx,(%r14,%rbx,4)
add    $0x1,%ecx
add    $0xffffffffffffffff,%rbx
jb     16c0 <getcalendar+0x5a0>
jmp    17fd <getcalendar+0x6dd>
cmp    $0x2,%ebx
jl     17fd <getcalendar+0x6dd>
add    $0xfffffffe,%ebx
cmp    $0x7,%ebx
jb     17ee <getcalendar+0x6ce>
lea    0x1(%rbx),%r8
mov    %r8,%rcx
and    $0xfffffffffffffff8,%rcx
movd   %eax,%xmm0
pshufd $0x0,%xmm0,%xmm0
paddd  0x9ad(%rip),%xmm0
lea    -0x8(%rcx),%rdx
mov    %rdx,%rbp
shr    $0x3,%rbp
add    $0x1,%rbp
test   %rdx,%rdx
je     1896 <getcalendar+0x776>
mov    %rbp,%rsi
and    $0xfffffffffffffffe,%rsi
lea    (%r14,%rbx,4),%rdx
add    $0xfffffffffffffff4,%rdx
xor    %edi,%edi
movdqa 0x8dc(%rip),%xmm1
movdqa 0x8f4(%rip),%xmm2
movdqa 0x8fc(%rip),%xmm3
movdqa 0x974(%rip),%xmm4
nopl   0x0(%rax)
movdqa %xmm1,%xmm5
psubd  %xmm0,%xmm5
pshufd $0x1b,%xmm0,%xmm6
pxor   %xmm7,%xmm7
psubd  %xmm6,%xmm7
movdqu %xmm7,(%rdx,%rdi,4)
pshufd $0x1b,%xmm5,%xmm5
movdqu %xmm5,-0x10(%rdx,%rdi,4)
movdqa %xmm2,%xmm5
psubd  %xmm0,%xmm5
movdqa %xmm3,%xmm6
psubd  %xmm0,%xmm6
pshufd $0x1b,%xmm5,%xmm5
movdqu %xmm5,-0x20(%rdx,%rdi,4)
pshufd $0x1b,%xmm6,%xmm5
movdqu %xmm5,-0x30(%rdx,%rdi,4)
paddd  %xmm4,%xmm0
add    $0xfffffffffffffff0,%rdi
add    $0xfffffffffffffffe,%rsi
jne    1750 <getcalendar+0x630>
neg    %rdi
test   $0x1,%bpl
je     17e4 <getcalendar+0x6c4>
mov    %rbx,%rdx
sub    %rdi,%rdx
pxor   %xmm1,%xmm1
movdqa 0x84c(%rip),%xmm2
psubd  %xmm0,%xmm2
pshufd $0x1b,%xmm0,%xmm0
psubd  %xmm0,%xmm1
movdqu %xmm1,-0xc(%r14,%rdx,4)
pshufd $0x1b,%xmm2,%xmm0
movdqu %xmm0,-0x1c(%r14,%rdx,4)
cmp    %rcx,%r8
je     17fd <getcalendar+0x6dd>
sub    %rcx,%rbx
sub    %ecx,%eax
neg    %eax
mov    %eax,(%r14,%rbx,4)
add    $0x1,%eax
add    $0xffffffffffffffff,%rbx
jb     17f0 <getcalendar+0x6d0>
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0x1,%r12d
je     158c <getcalendar+0x46c>
cmp    $0x3,%r12d
jne    185b <getcalendar+0x73b>
mov    %r15d,%edi
call   1040 <isLeapYear@plt>
cmp    $0x1,%rax
mov    $0x1d,%eax
sbb    $0x0,%eax
jmp    1582 <getcalendar+0x462>
cmp    $0x2,%r12d
jne    1850 <getcalendar+0x730>
mov    %r15d,%edi
call   1040 <isLeapYear@plt>
cmp    $0x1,%rax
mov    $0x1d,%r11d
sbb    $0x0,%r11d
jmp    115c <getcalendar+0x3c>
mov    $0x1e,%r11d
jmp    115c <getcalendar+0x3c>
mov    $0x1e,%eax
jmp    1582 <getcalendar+0x462>
movdqa 0x793(%rip),%xmm7
xor    %edx,%edx
test   $0x1,%r10b
jne    12e4 <getcalendar+0x1c4>
jmp    134d <getcalendar+0x22d>
movdqa 0x84a(%rip),%xmm0
xor    %esi,%esi
test   $0x1,%dl
jne    1672 <getcalendar+0x552>
jmp    16a4 <getcalendar+0x584>
xor    %edi,%edi
test   $0x1,%bpl
jne    17b2 <getcalendar+0x692>
jmp    17e4 <getcalendar+0x6c4>

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

LLVM IR (-O2):
define void @getcalendar(i32 %0, i32 %1, [7 x i32]* nocapture %2) {
%4 = tail call i32 @calculateweekindex(i32 %0, i32 %1, i32 1)
switch i32 %1, label %5 [
i32 12, label %10
i32 10, label %10
i32 8, label %10
i32 7, label %10
i32 5, label %10
i32 3, label %10
i32 1, label %10
i32 2, label %6
]
5: ; preds = %3
br label %10
6: ; preds = %3
%7 = tail call i64 @isLeapYear(i32 %0)
%8 = icmp eq i64 %7, 0
%9 = select i1 %8, i32 28, i32 29
br label %10
10: ; preds = %6, %3, %3, %3, %3, %3, %3, %3, %5
%11 = phi i32 [ 30, %5 ], [ 31, %3 ], [ 31, %3 ], [ 31, %3 ], [ 31, %3 ], [ 31, %3 ], [ 31, %3 ], [ 31, %3 ], [ %9, %6 ]
%12 = icmp slt i32 %4, 8
br i1 %12, label %13, label %103
13: ; preds = %10
%14 = add nsw i32 %4, -1
%15 = sext i32 %14 to i64
%16 = sub i32 9, %4
%17 = sub i32 7, %4
%18 = zext i32 %17 to i64
%19 = add nuw nsw i64 %18, 1
%20 = icmp ult i32 %17, 7
br i1 %20, label %90, label %21
21: ; preds = %13
%22 = and i64 %19, 8589934584
%23 = add nsw i64 %22, %15
%24 = trunc i64 %22 to i32
%25 = or i32 %24, 1
%26 = insertelement <4 x i32> poison, i32 %11, i64 0
%27 = shufflevector <4 x i32> %26, <4 x i32> poison, <4 x i32> zeroinitializer
%28 = insertelement <4 x i32> poison, i32 %11, i64 0
%29 = shufflevector <4 x i32> %28, <4 x i32> poison, <4 x i32> zeroinitializer
%30 = add nsw i64 %22, -8
%31 = lshr exact i64 %30, 3
%32 = add nuw nsw i64 %31, 1
%33 = and i64 %32, 1
%34 = icmp eq i64 %30, 0
br i1 %34, label %71, label %35
35: ; preds = %21
%36 = and i64 %32, 4611686018427387902
br label %37
37: ; preds = %37, %35
%38 = phi i64 [ 0, %35 ], [ %67, %37 ]
%39 = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %35 ], [ %68, %37 ]
%40 = phi i64 [ 0, %35 ], [ %69, %37 ]
%41 = add i64 %38, %15
%42 = add <4 x i32> %39, <i32 4, i32 4, i32 4, i32 4>
%43 = icmp ult <4 x i32> %27, %39
%44 = icmp ult <4 x i32> %29, %42
%45 = sub <4 x i32> %27, %39
%46 = sub <4 x i32> %29, %42
%47 = select <4 x i1> %43, <4 x i32> %45, <4 x i32> %39
%48 = select <4 x i1> %44, <4 x i32> %46, <4 x i32> %42
%49 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %41
%50 = bitcast i32* %49 to <4 x i32>*
store <4 x i32> %47, <4 x i32>* %50
%51 = getelementptr inbounds i32, i32* %49, i64 4
%52 = bitcast i32* %51 to <4 x i32>*
store <4 x i32> %48, <4 x i32>* %52
%53 = or i64 %38, 8
%54 = add <4 x i32> %39, <i32 8, i32 8, i32 8, i32 8>
%55 = add i64 %53, %15
%56 = add <4 x i32> %39, <i32 12, i32 12, i32 12, i32 12>
%57 = icmp ult <4 x i32> %27, %54
%58 = icmp ult <4 x i32> %29, %56
%59 = sub <4 x i32> %27, %54
%60 = sub <4 x i32> %29, %56
%61 = select <4 x i1> %57, <4 x i32> %59, <4 x i32> %54
%62 = select <4 x i1> %58, <4 x i32> %60, <4 x i32> %56
%63 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %55
%64 = bitcast i32* %63 to <4 x i32>*
store <4 x i32> %61, <4 x i32>* %64
%65 = getelementptr inbounds i32, i32* %63, i64 4
%66 = bitcast i32* %65 to <4 x i32>*
store <4 x i32> %62, <4 x i32>* %66
%67 = add nuw i64 %38, 16
%68 = add <4 x i32> %39, <i32 16, i32 16, i32 16, i32 16>
%69 = add i64 %40, 2
%70 = icmp eq i64 %69, %36
br i1 %70, label %71, label %37
71: ; preds = %37, %21
%72 = phi i64 [ 0, %21 ], [ %67, %37 ]
%73 = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %21 ], [ %68, %37 ]
%74 = icmp eq i64 %33, 0
br i1 %74, label %88, label %75
75: ; preds = %71
%76 = add i64 %72, %15
%77 = add <4 x i32> %73, <i32 4, i32 4, i32 4, i32 4>
%78 = icmp ult <4 x i32> %27, %73
%79 = icmp ult <4 x i32> %29, %77
%80 = sub <4 x i32> %27, %73
%81 = sub <4 x i32> %29, %77
%82 = select <4 x i1> %78, <4 x i32> %80, <4 x i32> %73
%83 = select <4 x i1> %79, <4 x i32> %81, <4 x i32> %77
%84 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %76
%85 = bitcast i32* %84 to <4 x i32>*
store <4 x i32> %82, <4 x i32>* %85
%86 = getelementptr inbounds i32, i32* %84, i64 4
%87 = bitcast i32* %86 to <4 x i32>*
store <4 x i32> %83, <4 x i32>* %87
br label %88
88: ; preds = %71, %75
%89 = icmp eq i64 %19, %22
br i1 %89, label %103, label %90
90: ; preds = %13, %88
%91 = phi i64 [ %15, %13 ], [ %23, %88 ]
%92 = phi i32 [ 1, %13 ], [ %25, %88 ]
br label %93
93: ; preds = %90, %93
%94 = phi i64 [ %101, %93 ], [ %91, %90 ]
%95 = phi i32 [ %100, %93 ], [ %92, %90 ]
%96 = icmp ult i32 %11, %95
%97 = sub i32 %11, %95
%98 = select i1 %96, i32 %97, i32 %95
%99 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %94
store i32 %98, i32* %99
%100 = add nuw i32 %95, 1
%101 = add nsw i64 %94, 1
%102 = icmp eq i32 %100, %16
br i1 %102, label %103, label %93
103: ; preds = %93, %88, %10
%104 = phi i32 [ 1, %10 ], [ %16, %88 ], [ %16, %93 ]
%105 = icmp slt i32 %11, %104
%106 = sub i32 %11, %104
%107 = select i1 %105, i32 %106, i32 %104
%108 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 1, i64 0
store i32 %107, i32* %108
%109 = add nsw i32 %104, 1
%110 = icmp sgt i32 %11, %104
%111 = sub i32 %11, %109
%112 = select i1 %110, i32 %109, i32 %111
%113 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 1, i64 1
store i32 %112, i32* %113
%114 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 1, i64 2
%115 = insertelement <4 x i32> poison, i32 %104, i64 0
%116 = shufflevector <4 x i32> %115, <4 x i32> poison, <4 x i32> zeroinitializer
%117 = add nsw <4 x i32> %116, <i32 2, i32 3, i32 4, i32 5>
%118 = insertelement <4 x i32> poison, i32 %11, i64 0
%119 = shufflevector <4 x i32> %118, <4 x i32> poison, <4 x i32> zeroinitializer
%120 = icmp slt <4 x i32> %119, %117
%121 = sub <4 x i32> %119, %117
%122 = select <4 x i1> %120, <4 x i32> %121, <4 x i32> %117
%123 = bitcast i32* %114 to <4 x i32>*
store <4 x i32> %122, <4 x i32>* %123
%124 = add nsw i32 %104, 6
%125 = icmp slt i32 %11, %124
%126 = sub i32 %11, %124
%127 = select i1 %125, i32 %126, i32 %124
%128 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 1, i64 6
store i32 %127, i32* %128
%129 = add nsw i32 %104, 7
%130 = icmp slt i32 %11, %129
%131 = sub i32 %11, %129
%132 = select i1 %130, i32 %131, i32 %129
%133 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 2, i64 0
store i32 %132, i32* %133
%134 = add nsw i32 %104, 8
%135 = icmp sgt i32 %11, %129
%136 = sub i32 %11, %134
%137 = select i1 %135, i32 %134, i32 %136
%138 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 2, i64 1
store i32 %137, i32* %138
%139 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 2, i64 2
%140 = add nsw <4 x i32> %116, <i32 9, i32 10, i32 11, i32 12>
%141 = icmp slt <4 x i32> %119, %140
%142 = sub <4 x i32> %119, %140
%143 = select <4 x i1> %141, <4 x i32> %142, <4 x i32> %140
%144 = bitcast i32* %139 to <4 x i32>*
store <4 x i32> %143, <4 x i32>* %144
%145 = add nsw i32 %104, 13
%146 = icmp slt i32 %11, %145
%147 = sub i32 %11, %145
%148 = select i1 %146, i32 %147, i32 %145
%149 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 2, i64 6
store i32 %148, i32* %149
%150 = add nsw i32 %104, 14
%151 = icmp slt i32 %11, %150
%152 = sub i32 %11, %150
%153 = select i1 %151, i32 %152, i32 %150
%154 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 3, i64 0
store i32 %153, i32* %154
%155 = add nsw i32 %104, 15
%156 = icmp sgt i32 %11, %150
%157 = sub i32 %11, %155
%158 = select i1 %156, i32 %155, i32 %157
%159 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 3, i64 1
store i32 %158, i32* %159
%160 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 3, i64 2
%161 = add nsw <4 x i32> %116, <i32 16, i32 17, i32 18, i32 19>
%162 = icmp slt <4 x i32> %119, %161
%163 = sub <4 x i32> %119, %161
%164 = select <4 x i1> %162, <4 x i32> %163, <4 x i32> %161
%165 = bitcast i32* %160 to <4 x i32>*
store <4 x i32> %164, <4 x i32>* %165
%166 = add nsw i32 %104, 20
%167 = icmp slt i32 %11, %166
%168 = sub i32 %11, %166
%169 = select i1 %167, i32 %168, i32 %166
%170 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 3, i64 6
store i32 %169, i32* %170
%171 = add nsw i32 %104, 21
%172 = icmp slt i32 %11, %171
%173 = sub i32 %11, %171
%174 = select i1 %172, i32 %173, i32 %171
%175 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 4, i64 0
store i32 %174, i32* %175
%176 = add nsw i32 %104, 22
%177 = icmp sgt i32 %11, %171
%178 = sub i32 %11, %176
%179 = select i1 %177, i32 %176, i32 %178
%180 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 4, i64 1
store i32 %179, i32* %180
%181 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 4, i64 2
%182 = add nsw <4 x i32> %116, <i32 23, i32 24, i32 25, i32 26>
%183 = icmp slt <4 x i32> %119, %182
%184 = sub <4 x i32> %119, %182
%185 = select <4 x i1> %183, <4 x i32> %184, <4 x i32> %182
%186 = bitcast i32* %181 to <4 x i32>*
store <4 x i32> %185, <4 x i32>* %186
%187 = add nsw i32 %104, 27
%188 = icmp slt i32 %11, %187
%189 = sub i32 %11, %187
%190 = select i1 %188, i32 %189, i32 %187
%191 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 4, i64 6
store i32 %190, i32* %191
%192 = add nsw i32 %104, 28
%193 = icmp slt i32 %11, %192
%194 = sub i32 %11, %192
%195 = select i1 %193, i32 %194, i32 %192
%196 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 5, i64 0
store i32 %195, i32* %196
%197 = add nsw i32 %104, 29
%198 = icmp sgt i32 %11, %192
%199 = sub i32 %11, %197
%200 = select i1 %198, i32 %197, i32 %199
%201 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 5, i64 1
store i32 %200, i32* %201
%202 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 5, i64 2
%203 = add nsw <4 x i32> %116, <i32 30, i32 31, i32 32, i32 33>
%204 = icmp slt <4 x i32> %119, %203
%205 = sub <4 x i32> %119, %203
%206 = select <4 x i1> %204, <4 x i32> %205, <4 x i32> %203
%207 = bitcast i32* %202 to <4 x i32>*
store <4 x i32> %206, <4 x i32>* %207
%208 = add nsw i32 %104, 34
%209 = icmp slt i32 %11, %208
%210 = sub nsw i32 %11, %208
%211 = select i1 %209, i32 %210, i32 %208
%212 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 5, i64 6
store i32 %211, i32* %212
switch i32 %1, label %217 [
i32 12, label %218
i32 11, label %218
i32 9, label %218
i32 8, label %218
i32 6, label %218
i32 4, label %218
i32 2, label %218
i32 3, label %213
i32 1, label %302
]
213: ; preds = %103
%214 = tail call i64 @isLeapYear(i32 %0)
%215 = icmp eq i64 %214, 0
%216 = select i1 %215, i32 28, i32 29
br label %218
217: ; preds = %103
br label %218
218: ; preds = %103, %103, %103, %103, %103, %103, %103, %217, %213
%219 = phi i32 [ %216, %213 ], [ 31, %103 ], [ 30, %217 ], [ 31, %103 ], [ 31, %103 ], [ 31, %103 ], [ 31, %103 ], [ 31, %103 ], [ 31, %103 ]
%220 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 0
%221 = load i32, i32* %220
%222 = icmp eq i32 %221, 1
br i1 %222, label %302, label %223
223: ; preds = %218
%224 = icmp sgt i32 %4, 1
br i1 %224, label %225, label %378
225: ; preds = %223
%226 = add nsw i32 %4, -2
%227 = zext i32 %226 to i64
%228 = add nuw nsw i64 %227, 1
%229 = icmp ult i32 %226, 7
br i1 %229, label %291, label %230
230: ; preds = %225
%231 = and i64 %228, 8589934584
%232 = sub nsw i64 %227, %231
%233 = trunc i64 %231 to i32
%234 = sub i32 %219, %233
%235 = insertelement <4 x i32> poison, i32 %219, i64 0
%236 = shufflevector <4 x i32> %235, <4 x i32> poison, <4 x i32> zeroinitializer
%237 = add nsw <4 x i32> %236, <i32 0, i32 -1, i32 -2, i32 -3>
%238 = add nsw i64 %231, -8
%239 = lshr exact i64 %238, 3
%240 = add nuw nsw i64 %239, 1
%241 = and i64 %240, 1
%242 = icmp eq i64 %238, 0
br i1 %242, label %274, label %243
243: ; preds = %230
%244 = and i64 %240, 4611686018427387902
br label %245
245: ; preds = %245, %243
%246 = phi i64 [ 0, %243 ], [ %270, %245 ]
%247 = phi <4 x i32> [ %237, %243 ], [ %271, %245 ]
%248 = phi i64 [ 0, %243 ], [ %272, %245 ]
%249 = sub i64 %227, %246
%250 = sub nsw <4 x i32> zeroinitializer, %247
%251 = sub <4 x i32> <i32 4, i32 4, i32 4, i32 4>, %247
%252 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %249
%253 = shufflevector <4 x i32> %250, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%254 = getelementptr inbounds i32, i32* %252, i64 -3
%255 = bitcast i32* %254 to <4 x i32>*
store <4 x i32> %253, <4 x i32>* %255
%256 = shufflevector <4 x i32> %251, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%257 = getelementptr inbounds i32, i32* %252, i64 -7
%258 = bitcast i32* %257 to <4 x i32>*
store <4 x i32> %256, <4 x i32>* %258
%259 = or i64 %246, 8
%260 = sub i64 %227, %259
%261 = sub <4 x i32> <i32 8, i32 8, i32 8, i32 8>, %247
%262 = sub <4 x i32> <i32 12, i32 12, i32 12, i32 12>, %247
%263 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %260
%264 = shufflevector <4 x i32> %261, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%265 = getelementptr inbounds i32, i32* %263, i64 -3
%266 = bitcast i32* %265 to <4 x i32>*
store <4 x i32> %264, <4 x i32>* %266
%267 = shufflevector <4 x i32> %262, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%268 = getelementptr inbounds i32, i32* %263, i64 -7
%269 = bitcast i32* %268 to <4 x i32>*
store <4 x i32> %267, <4 x i32>* %269
%270 = add nuw i64 %246, 16
%271 = add <4 x i32> %247, <i32 -16, i32 -16, i32 -16, i32 -16>
%272 = add i64 %248, 2
%273 = icmp eq i64 %272, %244
br i1 %273, label %274, label %245
274: ; preds = %245, %230
%275 = phi i64 [ 0, %230 ], [ %270, %245 ]
%276 = phi <4 x i32> [ %237, %230 ], [ %271, %245 ]
%277 = icmp eq i64 %241, 0
br i1 %277, label %289, label %278
278: ; preds = %274
%279 = sub i64 %227, %275
%280 = sub nsw <4 x i32> zeroinitializer, %276
%281 = sub <4 x i32> <i32 4, i32 4, i32 4, i32 4>, %276
%282 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %279
%283 = shufflevector <4 x i32> %280, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%284 = getelementptr inbounds i32, i32* %282, i64 -3
%285 = bitcast i32* %284 to <4 x i32>*
store <4 x i32> %283, <4 x i32>* %285
%286 = shufflevector <4 x i32> %281, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%287 = getelementptr inbounds i32, i32* %282, i64 -7
%288 = bitcast i32* %287 to <4 x i32>*
store <4 x i32> %286, <4 x i32>* %288
br label %289
289: ; preds = %274, %278
%290 = icmp eq i64 %228, %231
br i1 %290, label %378, label %291
291: ; preds = %225, %289
%292 = phi i64 [ %227, %225 ], [ %232, %289 ]
%293 = phi i32 [ %219, %225 ], [ %234, %289 ]
br label %294
294: ; preds = %291, %294
%295 = phi i64 [ %300, %294 ], [ %292, %291 ]
%296 = phi i32 [ %297, %294 ], [ %293, %291 ]
%297 = add nsw i32 %296, -1
%298 = sub nsw i32 0, %296
%299 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %295
store i32 %298, i32* %299
%300 = add nsw i64 %295, -1
%301 = icmp eq i64 %295, 0
br i1 %301, label %378, label %294
302: ; preds = %103, %218
%303 = icmp sgt i32 %4, 1
br i1 %303, label %304, label %378
304: ; preds = %302
%305 = add nsw i32 %4, -2
%306 = zext i32 %305 to i64
%307 = add nuw nsw i64 %306, 1
%308 = icmp ult i32 %305, 7
br i1 %308, label %367, label %309
309: ; preds = %304
%310 = and i64 %307, 8589934584
%311 = sub nsw i64 %306, %310
%312 = trunc i64 %310 to i32
%313 = sub i32 31, %312
%314 = add nsw i64 %310, -8
%315 = lshr exact i64 %314, 3
%316 = add nuw nsw i64 %315, 1
%317 = and i64 %316, 1
%318 = icmp eq i64 %314, 0
br i1 %318, label %350, label %319
319: ; preds = %309
%320 = and i64 %316, 4611686018427387902
br label %321
321: ; preds = %321, %319
%322 = phi i64 [ 0, %319 ], [ %346, %321 ]
%323 = phi <4 x i32> [ <i32 31, i32 30, i32 29, i32 28>, %319 ], [ %347, %321 ]
%324 = phi i64 [ 0, %319 ], [ %348, %321 ]
%325 = sub i64 %306, %322
%326 = sub nsw <4 x i32> zeroinitializer, %323
%327 = sub <4 x i32> <i32 4, i32 4, i32 4, i32 4>, %323
%328 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %325
%329 = shufflevector <4 x i32> %326, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%330 = getelementptr inbounds i32, i32* %328, i64 -3
%331 = bitcast i32* %330 to <4 x i32>*
store <4 x i32> %329, <4 x i32>* %331
%332 = shufflevector <4 x i32> %327, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%333 = getelementptr inbounds i32, i32* %328, i64 -7
%334 = bitcast i32* %333 to <4 x i32>*
store <4 x i32> %332, <4 x i32>* %334
%335 = or i64 %322, 8
%336 = sub i64 %306, %335
%337 = sub <4 x i32> <i32 8, i32 8, i32 8, i32 8>, %323
%338 = sub <4 x i32> <i32 12, i32 12, i32 12, i32 12>, %323
%339 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %336
%340 = shufflevector <4 x i32> %337, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%341 = getelementptr inbounds i32, i32* %339, i64 -3
%342 = bitcast i32* %341 to <4 x i32>*
store <4 x i32> %340, <4 x i32>* %342
%343 = shufflevector <4 x i32> %338, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%344 = getelementptr inbounds i32, i32* %339, i64 -7
%345 = bitcast i32* %344 to <4 x i32>*
store <4 x i32> %343, <4 x i32>* %345
%346 = add nuw i64 %322, 16
%347 = add <4 x i32> %323, <i32 -16, i32 -16, i32 -16, i32 -16>
%348 = add i64 %324, 2
%349 = icmp eq i64 %348, %320
br i1 %349, label %350, label %321
350: ; preds = %321, %309
%351 = phi i64 [ 0, %309 ], [ %346, %321 ]
%352 = phi <4 x i32> [ <i32 31, i32 30, i32 29, i32 28>, %309 ], [ %347, %321 ]
%353 = icmp eq i64 %317, 0
br i1 %353, label %365, label %354
354: ; preds = %350
%355 = sub i64 %306, %351
%356 = sub nsw <4 x i32> zeroinitializer, %352
%357 = sub <4 x i32> <i32 4, i32 4, i32 4, i32 4>, %352
%358 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %355
%359 = shufflevector <4 x i32> %356, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%360 = getelementptr inbounds i32, i32* %358, i64 -3
%361 = bitcast i32* %360 to <4 x i32>*
store <4 x i32> %359, <4 x i32>* %361
%362 = shufflevector <4 x i32> %357, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%363 = getelementptr inbounds i32, i32* %358, i64 -7
%364 = bitcast i32* %363 to <4 x i32>*
store <4 x i32> %362, <4 x i32>* %364
br label %365
365: ; preds = %350, %354
%366 = icmp eq i64 %307, %310
br i1 %366, label %378, label %367
367: ; preds = %304, %365
%368 = phi i64 [ %306, %304 ], [ %311, %365 ]
%369 = phi i32 [ 31, %304 ], [ %313, %365 ]
br label %370
370: ; preds = %367, %370
%371 = phi i64 [ %376, %370 ], [ %368, %367 ]
%372 = phi i32 [ %373, %370 ], [ %369, %367 ]
%373 = add nsw i32 %372, -1
%374 = sub nsw i32 0, %372
%375 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 %371
store i32 %374, i32* %375
%376 = add nsw i64 %371, -1
%377 = icmp eq i64 %371, 0
br i1 %377, label %378, label %370
378: ; preds = %294, %370, %289, %365, %223, %302
ret void
}