#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 */
typedef int time_t;
struct tm {
  int tm_sec;
  int tm_min;
  int tm_hour;
  int tm_mday;
  int tm_mon;
  int tm_year;
  int tm_yday;
  scalar_t__ tm_isdst;
  int tm_wday;
};

/* Variables and functions */
int dmsize(int, int);
long dysize(int);
struct tm *gmtime(int *);
int jan1(int);
struct tm *localtime(int *);
scalar_t__ reduce(int *, int *, int);
time_t mktime(struct tm *t) {
  time_t a;
  int i, d;
  struct tm *ptm;
  if (!(reduce(&t->tm_sec, &t->tm_min, 60) &&
        reduce(&t->tm_min, &t->tm_hour, 60) &&
        reduce(&t->tm_hour, &t->tm_mday, 24) &&
        reduce(&t->tm_mon, &t->tm_year, 12)))
    return -1;
  while (t->tm_mday < 1) {
    if (--t->tm_mon == -1) {
      t->tm_mon = 11;
      t->tm_year--;
    }
    t->tm_mday += dmsize(t->tm_mon, t->tm_year);
  }
  while (t->tm_mday > dmsize(t->tm_mon, t->tm_year)) {
    t->tm_mday -= dmsize(t->tm_mon, t->tm_year);
    if (++t->tm_mon == 12) {
      t->tm_mon = 0;
      t->tm_year++;
    }
  }
  a = t->tm_sec + 60 * t->tm_min + 3600 * t->tm_hour;
  t->tm_yday = t->tm_mday - 1;
  for (i = 0; i < t->tm_mon; i++)
    t->tm_yday += dmsize(i, t->tm_year);
  a += t->tm_yday * 86400L;
  if (t->tm_year < 70) {
    for (i = t->tm_year; i < 70; i++)
      if ((a -= dysize(i) * 86400L) < 0)
        return -1;
  } else if (t->tm_year > 70) {
    for (i = 70; i < t->tm_year; i++)
      if ((a += dysize(i) * 86400L) < 0)
        return -1;
  }
  ptm = gmtime(&a);
  d = ptm->tm_hour;
  ptm = localtime(&a);
  d -= ptm->tm_hour;
  if (d < 0)
    d += 24;
  if (t->tm_isdst == 0 && ptm->tm_isdst)
    d--;
  if (t->tm_isdst > 0 && !ptm->tm_isdst)
    d++;
  a += d * 3600;
  t->tm_wday = (jan1(t->tm_year) + t->tm_yday) % 7;
  return a;
}


x86 assembly (clang, -O0):
<mktime>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    $0x4,%rsi
mov    $0x3c,%edx
call   1050 <reduce@plt>
cmp    $0x0,%rax
je     11f8 <mktime+0x98>
mov    -0x10(%rbp),%rdi
add    $0x4,%rdi
mov    -0x10(%rbp),%rsi
add    $0x8,%rsi
mov    $0x3c,%edx
call   1050 <reduce@plt>
cmp    $0x0,%rax
je     11f8 <mktime+0x98>
mov    -0x10(%rbp),%rdi
add    $0x8,%rdi
mov    -0x10(%rbp),%rsi
add    $0xc,%rsi
mov    $0x18,%edx
call   1050 <reduce@plt>
cmp    $0x0,%rax
je     11f8 <mktime+0x98>
mov    -0x10(%rbp),%rdi
add    $0x10,%rdi
mov    -0x10(%rbp),%rsi
add    $0x14,%rsi
mov    $0xc,%edx
call   1050 <reduce@plt>
cmp    $0x0,%rax
jne    1204 <mktime+0xa4>
movl   $0xffffffff,-0x4(%rbp)
jmp    1517 <mktime+0x3b7>
jmp    1209 <mktime+0xa9>
mov    -0x10(%rbp),%rax
cmpl   $0x1,0xc(%rax)
jge    1269 <mktime+0x109>
mov    -0x10(%rbp),%rcx
mov    0x10(%rcx),%eax
add    $0xffffffff,%eax
mov    %eax,0x10(%rcx)
cmp    $0xffffffff,%eax
jne    1245 <mktime+0xe5>
mov    -0x10(%rbp),%rax
movl   $0xb,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,0x14(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%edi
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%esi
call   1060 <dmsize@plt>
mov    %eax,%ecx
mov    -0x10(%rbp),%rax
add    0xc(%rax),%ecx
mov    %ecx,0xc(%rax)
jmp    1209 <mktime+0xa9>
jmp    126e <mktime+0x10e>
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%edi
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%esi
call   1060 <dmsize@plt>
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
cmp    %ecx,%eax
jle    12ec <mktime+0x18c>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%edi
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%esi
call   1060 <dmsize@plt>
mov    %eax,%edx
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%ecx
sub    %edx,%ecx
mov    %ecx,0xc(%rax)
mov    -0x10(%rbp),%rcx
mov    0x10(%rcx),%eax
add    $0x1,%eax
mov    %eax,0x10(%rcx)
cmp    $0xc,%eax
jne    12e7 <mktime+0x187>
mov    -0x10(%rbp),%rax
movl   $0x0,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0x14(%rax)
jmp    126e <mktime+0x10e>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   $0x3c,0x4(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
imul   $0xe10,0x8(%rcx),%ecx
add    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%ecx
sub    $0x1,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x18(%rax)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    0x10(%rcx),%eax
jge    135d <mktime+0x1fd>
mov    -0x18(%rbp),%edi
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%esi
call   1060 <dmsize@plt>
mov    %eax,%ecx
mov    -0x10(%rbp),%rax
add    0x18(%rax),%ecx
mov    %ecx,0x18(%rax)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1324 <mktime+0x1c4>
mov    -0x10(%rbp),%rax
movslq 0x18(%rax),%rax
imul   $0x15180,%rax,%rcx
movslq -0x14(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x46,0x14(%rax)
jge    13de <mktime+0x27e>
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x46,-0x18(%rbp)
jge    13d9 <mktime+0x279>
mov    -0x18(%rbp),%edi
call   1070 <dysize@plt>
imul   $0x15180,%rax,%rcx
movslq -0x14(%rbp),%rax
sub    %rcx,%rax
mov    %eax,-0x14(%rbp)
cmp    $0x0,%eax
jge    13c6 <mktime+0x266>
movl   $0xffffffff,-0x4(%rbp)
jmp    1517 <mktime+0x3b7>
jmp    13cb <mktime+0x26b>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    138e <mktime+0x22e>
jmp    144e <mktime+0x2ee>
mov    -0x10(%rbp),%rax
cmpl   $0x46,0x14(%rax)
jle    1449 <mktime+0x2e9>
movl   $0x46,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    0x14(%rcx),%eax
jge    1444 <mktime+0x2e4>
mov    -0x18(%rbp),%edi
call   1070 <dysize@plt>
imul   $0x15180,%rax,%rcx
movslq -0x14(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x14(%rbp)
cmp    $0x0,%eax
jge    1431 <mktime+0x2d1>
movl   $0xffffffff,-0x4(%rbp)
jmp    1517 <mktime+0x3b7>
jmp    1436 <mktime+0x2d6>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    13f3 <mktime+0x293>
jmp    1449 <mktime+0x2e9>
jmp    144e <mktime+0x2ee>
lea    -0x14(%rbp),%rdi
call   1080 <gmtime@plt>
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x1c(%rbp)
lea    -0x14(%rbp),%rdi
call   1030 <localtime@plt>
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jge    1494 <mktime+0x334>
mov    -0x1c(%rbp),%eax
add    $0x18,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
cmpq   $0x0,0x20(%rax)
jne    14bb <mktime+0x35b>
mov    -0x28(%rbp),%rax
cmpq   $0x0,0x20(%rax)
je     14bb <mktime+0x35b>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
cmpq   $0x0,0x20(%rax)
jle    14e2 <mktime+0x382>
mov    -0x28(%rbp),%rax
cmpq   $0x0,0x20(%rax)
jne    14e2 <mktime+0x382>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
imul   $0xe10,-0x1c(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%edi
call   1040 <jan1@plt>
mov    -0x10(%rbp),%rcx
add    0x18(%rcx),%eax
mov    $0x7,%ecx
cltd
idiv   %ecx
mov    -0x10(%rbp),%rax
mov    %edx,0x28(%rax)
mov    -0x14(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<mktime>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%r12
lea    0x4(%rdi),%rbx
mov    %rbx,%rsi
mov    $0x3c,%edx
call   1050 <reduce@plt>
mov    $0xffffffff,%r14d
test   %rax,%rax
je     13c0 <mktime+0x260>
lea    0x8(%r12),%rbp
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    $0x3c,%edx
call   1050 <reduce@plt>
test   %rax,%rax
je     13c0 <mktime+0x260>
lea    0xc(%r12),%r13
mov    %rbp,%rdi
mov    %r13,%rsi
mov    $0x18,%edx
call   1050 <reduce@plt>
test   %rax,%rax
je     13c0 <mktime+0x260>
lea    0x10(%r12),%rbx
lea    0x14(%r12),%r15
mov    %rbx,%rdi
mov    %r15,%rsi
mov    $0xc,%edx
call   1050 <reduce@plt>
test   %rax,%rax
je     13c0 <mktime+0x260>
mov    0x0(%r13),%ebp
test   %ebp,%ebp
jle    1265 <mktime+0x105>
mov    (%rbx),%edi
nopw   0x0(%rax,%rax,1)
mov    (%r15),%esi
call   1060 <dmsize@plt>
cmp    %eax,%ebp
jle    1273 <mktime+0x113>
mov    (%rbx),%edi
mov    (%r15),%esi
call   1060 <dmsize@plt>
mov    0x0(%r13),%ebp
sub    %eax,%ebp
mov    %ebp,0x0(%r13)
mov    (%rbx),%edi
add    $0x1,%edi
mov    %edi,(%rbx)
cmp    $0xc,%edi
jne    1200 <mktime+0xa0>
movl   $0x0,(%rbx)
mov    (%r15),%esi
add    $0x1,%esi
mov    %esi,(%r15)
xor    %edi,%edi
jmp    1203 <mktime+0xa3>
nop
movl   $0xb,(%rbx)
mov    (%r15),%esi
add    $0xffffffff,%esi
mov    %esi,(%r15)
mov    $0xb,%edi
call   1060 <dmsize@plt>
mov    %eax,%ebp
add    0x0(%r13),%ebp
mov    %ebp,0x0(%r13)
jg     11f5 <mktime+0x95>
mov    (%rbx),%edi
sub    $0x1,%edi
mov    %edi,(%rbx)
jb     1240 <mktime+0xe0>
mov    (%r15),%esi
jmp    1254 <mktime+0xf4>
imul   $0x3c,0x4(%r12),%eax
add    (%r12),%eax
imul   $0xe10,0x8(%r12),%ebp
add    %eax,%ebp
mov    0xc(%r12),%eax
add    $0xffffffff,%eax
mov    %eax,0x18(%r12)
cmpl   $0x0,0x10(%r12)
jle    12c0 <mktime+0x160>
xor    %ebx,%ebx
nop
mov    0x14(%r12),%esi
mov    %ebx,%edi
call   1060 <dmsize@plt>
add    0x18(%r12),%eax
mov    %eax,0x18(%r12)
add    $0x1,%ebx
cmp    0x10(%r12),%ebx
jl     12a0 <mktime+0x140>
imul   $0x15180,%eax,%eax
add    %ebp,%eax
mov    %eax,0x4(%rsp)
mov    (%r15),%ebx
cmp    $0x45,%ebx
jg     1301 <mktime+0x1a1>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %eax,%ebp
mov    %ebx,%edi
call   1070 <dysize@plt>
imul   $0xfffeae80,%eax,%eax
add    %ebp,%eax
js     13c0 <mktime+0x260>
add    $0x1,%ebx
cmp    $0x46,%ebx
jne    12e0 <mktime+0x180>
jmp    132f <mktime+0x1cf>
cmp    $0x46,%ebx
je     1333 <mktime+0x1d3>
mov    $0x46,%ebx
nopl   0x0(%rax,%rax,1)
mov    %eax,%ebp
mov    %ebx,%edi
call   1070 <dysize@plt>
imul   $0x15180,%eax,%eax
add    %ebp,%eax
js     13d2 <mktime+0x272>
add    $0x1,%ebx
cmp    (%r15),%ebx
jl     1310 <mktime+0x1b0>
mov    %eax,0x4(%rsp)
lea    0x4(%rsp),%rbx
mov    %rbx,%rdi
call   1080 <gmtime@plt>
mov    0x8(%rax),%ebp
mov    %rbx,%rdi
call   1030 <localtime@plt>
mov    0x8(%rax),%ecx
mov    %ebp,%edx
sub    %ecx,%edx
neg    %ecx
test   %edx,%edx
lea    0x18(%rbp,%rcx,1),%ecx
cmovns %edx,%ecx
cmpq   $0x0,0x20(%r12)
je     1371 <mktime+0x211>
jle    1379 <mktime+0x219>
cmpq   $0x1,0x20(%rax)
adc    $0x0,%ecx
jmp    1379 <mktime+0x219>
cmpq   $0x1,0x20(%rax)
adc    $0xffffffff,%ecx
imul   $0xe10,%ecx,%eax
add    %eax,0x4(%rsp)
mov    0x14(%r12),%edi
call   1040 <jan1@plt>
add    0x18(%r12),%eax
cltq
imul   $0xffffffff92492493,%rax,%rcx
shr    $0x20,%rcx
add    %eax,%ecx
mov    %ecx,%edx
shr    $0x1f,%edx
sar    $0x2,%ecx
add    %edx,%ecx
lea    0x0(,%rcx,8),%edx
sub    %edx,%ecx
add    %eax,%ecx
mov    %ecx,0x28(%r12)
mov    0x4(%rsp),%r14d
mov    %r14d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %eax,0x4(%rsp)
jmp    13c0 <mktime+0x260>

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

LLVM IR (-O2):
%struct.tm = type { i32, i32, i32, i32, i32, i32, i32, i64, i32 }
define i32 @mktime(%struct.tm* %0) {
%2 = alloca i32
%3 = bitcast i32* %2 to i8*
%4 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 0
%5 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 1
%6 = tail call i64 @reduce(i32* %4, i32* %5, i32 60)
%7 = icmp eq i64 %6, 0
br i1 %7, label %161, label %8
8: ; preds = %1
%9 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 2
%10 = tail call i64 @reduce(i32* %5, i32* %9, i32 60)
%11 = icmp eq i64 %10, 0
br i1 %11, label %161, label %12
12: ; preds = %8
%13 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 3
%14 = tail call i64 @reduce(i32* %9, i32* %13, i32 24)
%15 = icmp eq i64 %14, 0
br i1 %15, label %161, label %16
16: ; preds = %12
%17 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 4
%18 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 5
%19 = tail call i64 @reduce(i32* %17, i32* %18, i32 12)
%20 = icmp eq i64 %19, 0
br i1 %20, label %161, label %21
21: ; preds = %16
%22 = load i32, i32* %13
%23 = icmp slt i32 %22, 1
br i1 %23, label %30, label %24
24: ; preds = %39, %21
%25 = phi i32 [ %22, %21 ], [ %44, %39 ]
%26 = load i32, i32* %17
%27 = load i32, i32* %18
%28 = tail call i32 @dmsize(i32 %26, i32 %27)
%29 = icmp sgt i32 %25, %28
br i1 %29, label %46, label %65
30: ; preds = %21, %39
%31 = load i32, i32* %17
%32 = add nsw i32 %31, -1
store i32 %32, i32* %17
%33 = icmp eq i32 %31, 0
br i1 %33, label %36, label %34
34: ; preds = %30
%35 = load i32, i32* %18
br label %39
36: ; preds = %30
store i32 11, i32* %17
%37 = load i32, i32* %18
%38 = add nsw i32 %37, -1
store i32 %38, i32* %18
br label %39
39: ; preds = %34, %36
%40 = phi i32 [ %38, %36 ], [ %35, %34 ]
%41 = phi i32 [ 11, %36 ], [ %32, %34 ]
%42 = tail call i32 @dmsize(i32 %41, i32 %40)
%43 = load i32, i32* %13
%44 = add nsw i32 %43, %42
store i32 %44, i32* %13
%45 = icmp slt i32 %44, 1
br i1 %45, label %30, label %24
46: ; preds = %24, %60
%47 = load i32, i32* %17
%48 = load i32, i32* %18
%49 = tail call i32 @dmsize(i32 %47, i32 %48)
%50 = load i32, i32* %13
%51 = sub nsw i32 %50, %49
store i32 %51, i32* %13
%52 = load i32, i32* %17
%53 = add nsw i32 %52, 1
store i32 %53, i32* %17
%54 = icmp eq i32 %53, 12
br i1 %54, label %57, label %55
55: ; preds = %46
%56 = load i32, i32* %18
br label %60
57: ; preds = %46
store i32 0, i32* %17
%58 = load i32, i32* %18
%59 = add nsw i32 %58, 1
store i32 %59, i32* %18
br label %60
60: ; preds = %55, %57
%61 = phi i32 [ %59, %57 ], [ %56, %55 ]
%62 = phi i32 [ 0, %57 ], [ %53, %55 ]
%63 = tail call i32 @dmsize(i32 %62, i32 %61)
%64 = icmp sgt i32 %51, %63
br i1 %64, label %46, label %65
65: ; preds = %60, %24
%66 = load i32, i32* %4
%67 = load i32, i32* %5
%68 = mul nsw i32 %67, 60
%69 = add nsw i32 %68, %66
%70 = load i32, i32* %9
%71 = mul nsw i32 %70, 3600
%72 = add nsw i32 %69, %71
%73 = load i32, i32* %13
%74 = add nsw i32 %73, -1
%75 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 6
store i32 %74, i32* %75
%76 = load i32, i32* %17
%77 = icmp sgt i32 %76, 0
br i1 %77, label %78, label %87
78: ; preds = %65, %78
%79 = phi i32 [ %84, %78 ], [ 0, %65 ]
%80 = load i32, i32* %18
%81 = tail call i32 @dmsize(i32 %79, i32 %80)
%82 = load i32, i32* %75
%83 = add nsw i32 %82, %81
store i32 %83, i32* %75
%84 = add nuw nsw i32 %79, 1
%85 = load i32, i32* %17
%86 = icmp slt i32 %84, %85
br i1 %86, label %78, label %87
87: ; preds = %78, %65
%88 = phi i32 [ %74, %65 ], [ %83, %78 ]
%89 = mul i32 %88, 86400
%90 = add i32 %89, %72
store i32 %90, i32* %2
%91 = load i32, i32* %18
%92 = icmp slt i32 %91, 70
br i1 %92, label %96, label %104
93: ; preds = %96
%94 = add i32 %97, 1
%95 = icmp eq i32 %94, 70
br i1 %95, label %118, label %96
96: ; preds = %87, %93
%97 = phi i32 [ %94, %93 ], [ %91, %87 ]
%98 = phi i32 [ %102, %93 ], [ %90, %87 ]
%99 = tail call i64 @dysize(i32 %97)
%100 = trunc i64 %99 to i32
%101 = mul i32 %100, -86400
%102 = add i32 %101, %98
%103 = icmp slt i32 %102, 0
br i1 %103, label %161, label %93
104: ; preds = %87
%105 = icmp eq i32 %91, 70
br i1 %105, label %120, label %109
106: ; preds = %109
%107 = load i32, i32* %18
%108 = icmp slt i32 %117, %107
br i1 %108, label %109, label %119
109: ; preds = %104, %106
%110 = phi i32 [ %117, %106 ], [ 70, %104 ]
%111 = phi i32 [ %115, %106 ], [ %90, %104 ]
%112 = tail call i64 @dysize(i32 %110)
%113 = trunc i64 %112 to i32
%114 = mul i32 %113, 86400
%115 = add i32 %114, %111
%116 = icmp slt i32 %115, 0
%117 = add nuw nsw i32 %110, 1
br i1 %116, label %160, label %106
118: ; preds = %93
store i32 %102, i32* %2
br label %120
119: ; preds = %106
store i32 %115, i32* %2
br label %120
120: ; preds = %119, %118, %104
%121 = call %struct.tm* @gmtime(i32* %2)
%122 = getelementptr inbounds %struct.tm, %struct.tm* %121, i64 0, i32 2
%123 = load i32, i32* %122
%124 = call %struct.tm* @localtime(i32* %2)
%125 = getelementptr inbounds %struct.tm, %struct.tm* %124, i64 0, i32 2
%126 = load i32, i32* %125
%127 = sub nsw i32 %123, %126
%128 = icmp slt i32 %127, 0
%129 = add nsw i32 %127, 24
%130 = select i1 %128, i32 %129, i32 %127
%131 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 7
%132 = load i64, i64* %131
%133 = icmp eq i64 %132, 0
br i1 %133, label %134, label %140
134: ; preds = %120
%135 = getelementptr inbounds %struct.tm, %struct.tm* %124, i64 0, i32 7
%136 = load i64, i64* %135
%137 = icmp ne i64 %136, 0
%138 = sext i1 %137 to i32
%139 = add nsw i32 %130, %138
br label %148
140: ; preds = %120
%141 = icmp sgt i64 %132, 0
br i1 %141, label %142, label %148
142: ; preds = %140
%143 = getelementptr inbounds %struct.tm, %struct.tm* %124, i64 0, i32 7
%144 = load i64, i64* %143
%145 = icmp eq i64 %144, 0
%146 = zext i1 %145 to i32
%147 = add nsw i32 %130, %146
br label %148
148: ; preds = %134, %142, %140
%149 = phi i32 [ %130, %140 ], [ %147, %142 ], [ %139, %134 ]
%150 = mul nsw i32 %149, 3600
%151 = load i32, i32* %2
%152 = add nsw i32 %151, %150
store i32 %152, i32* %2
%153 = load i32, i32* %18
%154 = call i32 @jan1(i32 %153)
%155 = load i32, i32* %75
%156 = add nsw i32 %155, %154
%157 = srem i32 %156, 7
%158 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 8
store i32 %157, i32* %158
%159 = load i32, i32* %2
br label %161
160: ; preds = %109
store i32 %115, i32* %2
br label %161
161: ; preds = %96, %160, %1, %8, %12, %16, %148
%162 = phi i32 [ %159, %148 ], [ -1, %16 ], [ -1, %12 ], [ -1, %8 ], [ -1, %1 ], [ -1, %160 ], [ -1, %96 ]
ret i32 %162
}