void fixdate(iyr, imon, iday, ihr, imn, sec, ndsec) int *iyr;
int *imon;
int *iday;
int *ihr;
int *imn;
double *sec;
int ndsec;
{
  double days;
  if (ndsec == 0)
    *sec = dint(*sec + 0.5);
  else if (ndsec < 2)
    *sec = dint(*sec * 10.0 + 0.5) / 10.0;
  else if (ndsec < 3)
    *sec = dint(*sec * 100.0 + 0.5) / 100.0;
  else if (ndsec < 4)
    *sec = dint(*sec * 1000.0 + 0.5) / 1000.0;
  else if (ndsec < 5)
    *sec = dint(*sec * 10000.0 + 0.5) / 10000.0;
  if (*sec > 60.0) {
    *sec = *sec - 60.0;
    *imn = *imn + 1;
  }
  if (*imn > 60) {
    *imn = *imn - 60;
    *ihr = *ihr + 1;
  }
  if (*iyr == 0 && *imon == 0 && *iday == 0)
    return;
  if (*ihr > 23) {
    *ihr = *ihr - 24;
    *iday = *iday + 1;
  }
  days = caldays(*iyr, *imon);
  if (*iday > days) {
    *iday = *iday - days;
    *imon = *imon + 1;
  }
  if (*iday < 1) {
    *imon = *imon - 1;
    if (*imon < 1) {
      *imon = *imon + 12;
      *iyr = *iyr - 1;
    }
    days = caldays(*iyr, *imon);
    *iday = *iday + days;
  }
  if (*imon < 1) {
    *imon = *imon + 12;
    *iyr = *iyr - 1;
    days = caldays(*iyr, *imon);
    if (*iday > days) {
      *iday = *iday - days;
      *imon = *imon + 1;
    }
  }
  if (*imon > 12) {
    *imon = *imon - 12;
    *iyr = *iyr + 1;
  }
  return;
}


x86 assembly (clang, -O0):
<fixdate>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
cmpl   $0x0,0x10(%rbp)
jne    1175 <fixdate+0x55>
mov    -0x30(%rbp),%rax
movsd  0xeaf(%rip),%xmm0
addsd  (%rax),%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
cvtsi2sd %eax,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    12bc <fixdate+0x19c>
cmpl   $0x2,0x10(%rbp)
jge    11c3 <fixdate+0xa3>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xe91(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe6d(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
cvtsi2sd %eax,%xmm0
movsd  0xe6e(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    12b7 <fixdate+0x197>
cmpl   $0x3,0x10(%rbp)
jge    1211 <fixdate+0xf1>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xe3b(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe1f(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
cvtsi2sd %eax,%xmm0
movsd  0xe18(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    12b2 <fixdate+0x192>
cmpl   $0x4,0x10(%rbp)
jge    125f <fixdate+0x13f>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xde5(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdd1(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
cvtsi2sd %eax,%xmm0
movsd  0xdc2(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    12ad <fixdate+0x18d>
cmpl   $0x5,0x10(%rbp)
jge    12a8 <fixdate+0x188>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xd87(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd83(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
cvtsi2sd %eax,%xmm0
movsd  0xd64(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    12ad <fixdate+0x18d>
jmp    12b2 <fixdate+0x192>
jmp    12b7 <fixdate+0x197>
jmp    12bc <fixdate+0x19c>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xd5c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1301 <fixdate+0x1e1>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xd42(%rip),%xmm1
subsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%rax
cmpl   $0x3c,(%rax)
jle    132c <fixdate+0x20c>
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
sub    $0x3c,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1358 <fixdate+0x238>
mov    -0x10(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1358 <fixdate+0x238>
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1358 <fixdate+0x238>
jmp    1507 <fixdate+0x3e7>
mov    -0x20(%rbp),%rax
cmpl   $0x17,(%rax)
jle    1383 <fixdate+0x263>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
sub    $0x18,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    (%rax),%esi
mov    $0x0,%al
call   1040 <caldays@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    13d8 <fixdate+0x2b8>
mov    -0x18(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
subsd  -0x38(%rbp),%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
cmpl   $0x1,(%rax)
jge    1452 <fixdate+0x332>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
sub    $0x1,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0x1,(%rax)
jge    141f <fixdate+0x2ff>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0xc,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
sub    $0x1,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    (%rax),%esi
mov    $0x0,%al
call   1040 <caldays@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
addsd  -0x38(%rbp),%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0x1,(%rax)
jge    14d7 <fixdate+0x3b7>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0xc,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
sub    $0x1,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    (%rax),%esi
mov    $0x0,%al
call   1040 <caldays@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    14d2 <fixdate+0x3b2>
mov    -0x18(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
subsd  -0x38(%rbp),%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    14d7 <fixdate+0x3b7>
mov    -0x10(%rbp),%rax
cmpl   $0xc,(%rax)
jle    1502 <fixdate+0x3e2>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
sub    $0xc,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
jmp    1507 <fixdate+0x3e7>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fixdate>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r9,%rbp
mov    %r8,%r13
mov    %rcx,%r12
mov    %rdx,%r15
mov    %rsi,%rbx
mov    %rdi,%r14
mov    0x40(%rsp),%eax
test   %eax,%eax
je     117a <fixdate+0x5a>
cmp    $0x1,%eax
jg     119a <fixdate+0x7a>
movsd  0x0(%rbp),%xmm0
mulsd  0xec9(%rip),%xmm0
addsd  0xea9(%rip),%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  0xeab(%rip),%xmm0
jmp    122e <fixdate+0x10e>
movsd  0x0(%rbp),%xmm0
addsd  0xe81(%rip),%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
jmp    122e <fixdate+0x10e>
cmp    $0x2,%eax
jne    11cc <fixdate+0xac>
movsd  0x0(%rbp),%xmm0
mulsd  0xe6c(%rip),%xmm0
addsd  0xe54(%rip),%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  0xe4e(%rip),%xmm0
jmp    122e <fixdate+0x10e>
cmp    $0x3,%eax
ja     11fe <fixdate+0xde>
movsd  0x0(%rbp),%xmm0
mulsd  0xe32(%rip),%xmm0
addsd  0xe22(%rip),%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  0xe14(%rip),%xmm0
jmp    122e <fixdate+0x10e>
movsd  0x0(%rbp),%xmm0
cmp    $0x4,%eax
jne    1233 <fixdate+0x113>
mulsd  0xdf0(%rip),%xmm0
addsd  0xdf0(%rip),%xmm0
mov    $0x1,%al
call   1030 <dint@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  0xdd2(%rip),%xmm0
movsd  %xmm0,0x0(%rbp)
ucomisd 0xded(%rip),%xmm0
jbe    125c <fixdate+0x13c>
addsd  0xdeb(%rip),%xmm0
movsd  %xmm0,0x0(%rbp)
mov    0x0(%r13),%eax
add    $0x1,%eax
mov    %eax,0x0(%r13)
cmp    $0x3d,%eax
jge    1265 <fixdate+0x145>
jmp    1271 <fixdate+0x151>
mov    0x0(%r13),%eax
cmp    $0x3d,%eax
jl     1271 <fixdate+0x151>
add    $0xffffffc4,%eax
mov    %eax,0x0(%r13)
addl   $0x1,(%r12)
mov    (%r14),%edi
test   %edi,%edi
jne    1287 <fixdate+0x167>
cmpl   $0x0,(%rbx)
jne    1287 <fixdate+0x167>
cmpl   $0x0,(%r15)
je     1324 <fixdate+0x204>
mov    (%r12),%eax
cmp    $0x18,%eax
jl     129e <fixdate+0x17e>
add    $0xffffffe8,%eax
mov    %eax,(%r12)
addl   $0x1,(%r15)
mov    (%r14),%edi
mov    (%rbx),%esi
xor    %eax,%eax
call   1040 <caldays@plt>
mov    (%r15),%ecx
mov    %ecx,%edx
sub    %eax,%edx
jle    12b9 <fixdate+0x199>
mov    %edx,(%r15)
addl   $0x1,(%rbx)
mov    (%r15),%ecx
test   %ecx,%ecx
jg     12e8 <fixdate+0x1c8>
mov    (%rbx),%eax
lea    -0x1(%rax),%esi
mov    %esi,(%rbx)
cmp    $0x2,%eax
jge    12db <fixdate+0x1bb>
add    $0xb,%eax
mov    %eax,(%rbx)
mov    (%r14),%edi
add    $0xffffffff,%edi
mov    %edi,(%r14)
mov    (%rbx),%esi
jmp    12de <fixdate+0x1be>
mov    (%r14),%edi
xor    %eax,%eax
call   1040 <caldays@plt>
add    %eax,(%r15)
mov    (%rbx),%eax
test   %eax,%eax
jg     1316 <fixdate+0x1f6>
add    $0xc,%eax
mov    %eax,(%rbx)
mov    (%r14),%edi
add    $0xffffffff,%edi
mov    %edi,(%r14)
mov    (%rbx),%esi
xor    %eax,%eax
call   1040 <caldays@plt>
mov    (%r15),%ecx
sub    %eax,%ecx
jle    1333 <fixdate+0x213>
mov    %ecx,(%r15)
mov    (%rbx),%eax
add    $0x1,%eax
mov    %eax,(%rbx)
cmp    $0xd,%eax
jl     1324 <fixdate+0x204>
add    $0xfffffff4,%eax
mov    %eax,(%rbx)
addl   $0x1,(%r14)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    (%rbx),%eax
cmp    $0xd,%eax
jge    131b <fixdate+0x1fb>
jmp    1324 <fixdate+0x204>

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

LLVM IR (-O2):
define void @fixdate(i32* nocapture %0, i32* nocapture %1, i32* nocapture %2, i32* nocapture %3, i32* nocapture %4, double* nocapture %5, i32 %6) {
%8 = icmp eq i32 %6, 0
br i1 %8, label %9, label %14
9: ; preds = %7
%10 = load double, double* %5
%11 = fadd double %10, 5.000000e-01
%12 = tail call i32 (double, ...) bitcast (i32 (...)* @dint to i32 (double, ...)*)(double %11)
%13 = sitofp i32 %12 to double
br label %46
14: ; preds = %7
%15 = icmp slt i32 %6, 2
br i1 %15, label %16, label %22
16: ; preds = %14
%17 = load double, double* %5
%18 = tail call double @llvm.fmuladd.f64(double %17, double 1.000000e+01, double 5.000000e-01)
%19 = tail call i32 (double, ...) bitcast (i32 (...)* @dint to i32 (double, ...)*)(double %18)
%20 = sitofp i32 %19 to double
%21 = fdiv double %20, 1.000000e+01
br label %46
22: ; preds = %14
%23 = icmp eq i32 %6, 2
br i1 %23, label %24, label %30
24: ; preds = %22
%25 = load double, double* %5
%26 = tail call double @llvm.fmuladd.f64(double %25, double 1.000000e+02, double 5.000000e-01)
%27 = tail call i32 (double, ...) bitcast (i32 (...)* @dint to i32 (double, ...)*)(double %26)
%28 = sitofp i32 %27 to double
%29 = fdiv double %28, 1.000000e+02
br label %46
30: ; preds = %22
%31 = icmp ult i32 %6, 4
br i1 %31, label %32, label %38
32: ; preds = %30
%33 = load double, double* %5
%34 = tail call double @llvm.fmuladd.f64(double %33, double 1.000000e+03, double 5.000000e-01)
%35 = tail call i32 (double, ...) bitcast (i32 (...)* @dint to i32 (double, ...)*)(double %34)
%36 = sitofp i32 %35 to double
%37 = fdiv double %36, 1.000000e+03
br label %46
38: ; preds = %30
%39 = icmp eq i32 %6, 4
%40 = load double, double* %5
br i1 %39, label %41, label %48
41: ; preds = %38
%42 = tail call double @llvm.fmuladd.f64(double %40, double 1.000000e+04, double 5.000000e-01)
%43 = tail call i32 (double, ...) bitcast (i32 (...)* @dint to i32 (double, ...)*)(double %42)
%44 = sitofp i32 %43 to double
%45 = fdiv double %44, 1.000000e+04
br label %46
46: ; preds = %9, %24, %41, %32, %16
%47 = phi double [ %21, %16 ], [ %37, %32 ], [ %45, %41 ], [ %29, %24 ], [ %13, %9 ]
store double %47, double* %5
br label %48
48: ; preds = %46, %38
%49 = phi double [ %40, %38 ], [ %47, %46 ]
%50 = fcmp ogt double %49, 6.000000e+01
br i1 %50, label %51, label %55
51: ; preds = %48
%52 = fadd double %49, -6.000000e+01
store double %52, double* %5
%53 = load i32, i32* %4
%54 = add nsw i32 %53, 1
store i32 %54, i32* %4
br label %57
55: ; preds = %48
%56 = load i32, i32* %4
br label %57
57: ; preds = %55, %51
%58 = phi i32 [ %56, %55 ], [ %54, %51 ]
%59 = icmp sgt i32 %58, 60
br i1 %59, label %60, label %64
60: ; preds = %57
%61 = add nsw i32 %58, -60
store i32 %61, i32* %4
%62 = load i32, i32* %3
%63 = add nsw i32 %62, 1
store i32 %63, i32* %3
br label %64
64: ; preds = %60, %57
%65 = load i32, i32* %0
%66 = icmp eq i32 %65, 0
br i1 %66, label %67, label %73
67: ; preds = %64
%68 = load i32, i32* %1
%69 = icmp eq i32 %68, 0
br i1 %69, label %70, label %73
70: ; preds = %67
%71 = load i32, i32* %2
%72 = icmp eq i32 %71, 0
br i1 %72, label %136, label %73
73: ; preds = %70, %67, %64
%74 = load i32, i32* %3
%75 = icmp sgt i32 %74, 23
br i1 %75, label %76, label %81
76: ; preds = %73
%77 = add nsw i32 %74, -24
store i32 %77, i32* %3
%78 = load i32, i32* %2
%79 = add nsw i32 %78, 1
store i32 %79, i32* %2
%80 = load i32, i32* %0
br label %81
81: ; preds = %76, %73
%82 = phi i32 [ %80, %76 ], [ %65, %73 ]
%83 = load i32, i32* %1
%84 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @caldays to i32 (i32, i32, ...)*)(i32 %82, i32 %83)
%85 = load i32, i32* %2
%86 = icmp sgt i32 %85, %84
br i1 %86, label %87, label %92
87: ; preds = %81
%88 = sub i32 %85, %84
store i32 %88, i32* %2
%89 = load i32, i32* %1
%90 = add nsw i32 %89, 1
store i32 %90, i32* %1
%91 = load i32, i32* %2
br label %92
92: ; preds = %87, %81
%93 = phi i32 [ %91, %87 ], [ %85, %81 ]
%94 = icmp slt i32 %93, 1
br i1 %94, label %95, label %112
95: ; preds = %92
%96 = load i32, i32* %1
%97 = add nsw i32 %96, -1
store i32 %97, i32* %1
%98 = icmp slt i32 %96, 2
br i1 %98, label %101, label %99
99: ; preds = %95
%100 = load i32, i32* %0
br label %106
101: ; preds = %95
%102 = add nsw i32 %96, 11
store i32 %102, i32* %1
%103 = load i32, i32* %0
%104 = add nsw i32 %103, -1
store i32 %104, i32* %0
%105 = load i32, i32* %1
br label %106
106: ; preds = %99, %101
%107 = phi i32 [ %97, %99 ], [ %105, %101 ]
%108 = phi i32 [ %100, %99 ], [ %104, %101 ]
%109 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @caldays to i32 (i32, i32, ...)*)(i32 %108, i32 %107)
%110 = load i32, i32* %2
%111 = add i32 %109, %110
store i32 %111, i32* %2
br label %112
112: ; preds = %106, %92
%113 = load i32, i32* %1
%114 = icmp slt i32 %113, 1
br i1 %114, label %115, label %129
115: ; preds = %112
%116 = add nsw i32 %113, 12
store i32 %116, i32* %1
%117 = load i32, i32* %0
%118 = add nsw i32 %117, -1
store i32 %118, i32* %0
%119 = load i32, i32* %1
%120 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @caldays to i32 (i32, i32, ...)*)(i32 %118, i32 %119)
%121 = load i32, i32* %2
%122 = icmp sgt i32 %121, %120
br i1 %122, label %123, label %127
123: ; preds = %115
%124 = sub i32 %121, %120
store i32 %124, i32* %2
%125 = load i32, i32* %1
%126 = add nsw i32 %125, 1
store i32 %126, i32* %1
br label %129
127: ; preds = %115
%128 = load i32, i32* %1
br label %129
129: ; preds = %127, %123, %112
%130 = phi i32 [ %128, %127 ], [ %126, %123 ], [ %113, %112 ]
%131 = icmp sgt i32 %130, 12
br i1 %131, label %132, label %136
132: ; preds = %129
%133 = add nsw i32 %130, -12
store i32 %133, i32* %1
%134 = load i32, i32* %0
%135 = add nsw i32 %134, 1
store i32 %135, i32* %0
br label %136
136: ; preds = %129, %132, %70
ret void
}