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

/* Variables and functions */
int month_days(struct tm *);
void adjzone(register struct tm *t, long seconds) {
  int days = 0;
  int leap_second = t->tm_sec == 60;
  long sec = seconds + (t->tm_sec - leap_second);
  if (sec < 0) {
    if ((t->tm_min -= (59 - sec) / 60) < 0 &&
        (t->tm_hour -= (59 - t->tm_min) / 60) < 0) {
      days = -((23 - t->tm_hour) / 24);
      if ((t->tm_mday += days) <= 0) {
        if (--t->tm_mon < 0) {
          --t->tm_year;
          t->tm_mon = 11;
        }
        t->tm_mday += month_days(t);
      }
    }
  } else {
    if (60 <= (t->tm_min += sec / 60) &&
        (24 <= (t->tm_hour += t->tm_min / 60))) {
      days = t->tm_hour / 24;
      if (month_days(t) < (t->tm_mday += days)) {
        if (11 < ++t->tm_mon) {
          ++t->tm_year;
          t->tm_mon = 0;
        }
        t->tm_mday = 1;
      }
    }
  }
  if ((0 <= (t->tm_wday)))
    t->tm_wday =
        ((t->tm_wday + days) % (7) + (7) * ((t->tm_wday + days) % (7) < 0));
  t->tm_hour = ((t->tm_hour) % (24) + (24) * ((t->tm_hour) % (24) < 0));
  t->tm_min = ((t->tm_min) % (60) + (60) * ((t->tm_min) % (60) < 0));
  t->tm_sec = (int)((sec) % (60) + (60) * ((sec) % (60) < 0)) + leap_second;
}


x86 assembly (clang, -O0):
<adjzone>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x8(%rbp),%rax
cmpl   $0x3c,(%rax)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%rcx
mov    (%rcx),%ecx
sub    -0x18(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x20(%rbp)
jge    1238 <adjzone+0x128>
mov    $0x3b,%eax
sub    -0x20(%rbp),%rax
mov    $0x3c,%ecx
cqto
idiv   %rcx
mov    %rax,%rdx
mov    -0x8(%rbp),%rcx
movslq 0x4(%rcx),%rax
sub    %rdx,%rax
mov    %eax,0x4(%rcx)
cmp    $0x0,%eax
jge    1233 <adjzone+0x123>
mov    -0x8(%rbp),%rcx
mov    $0x3b,%eax
sub    0x4(%rcx),%eax
mov    $0x3c,%ecx
cltd
idiv   %ecx
mov    %eax,%edx
mov    -0x8(%rbp),%rcx
mov    0x8(%rcx),%eax
sub    %edx,%eax
mov    %eax,0x8(%rcx)
cmp    $0x0,%eax
jge    1233 <adjzone+0x123>
mov    -0x8(%rbp),%rcx
mov    $0x17,%eax
sub    0x8(%rcx),%eax
mov    $0x18,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%rcx
add    0xc(%rcx),%eax
mov    %eax,0xc(%rcx)
cmp    $0x0,%eax
jg     122e <adjzone+0x11e>
mov    -0x8(%rbp),%rcx
mov    0x10(%rcx),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,0x10(%rcx)
cmp    $0x0,%rax
jge    1219 <adjzone+0x109>
mov    -0x8(%rbp),%rax
mov    0x20(%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,0x20(%rax)
mov    -0x8(%rbp),%rax
movq   $0xb,0x10(%rax)
mov    -0x8(%rbp),%rdi
call   1030 <month_days@plt>
mov    %eax,%ecx
mov    -0x8(%rbp),%rax
add    0xc(%rax),%ecx
mov    %ecx,0xc(%rax)
jmp    1233 <adjzone+0x123>
jmp    1308 <adjzone+0x1f8>
mov    -0x20(%rbp),%rax
mov    $0x3c,%ecx
cqto
idiv   %rcx
mov    %rax,%rdx
mov    -0x8(%rbp),%rax
movslq 0x4(%rax),%rcx
add    %rdx,%rcx
mov    %ecx,0x4(%rax)
mov    $0x3c,%eax
cmp    %ecx,%eax
jg     1303 <adjzone+0x1f3>
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
mov    $0x3c,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x8(%rbp),%rax
add    0x8(%rax),%ecx
mov    %ecx,0x8(%rax)
mov    $0x18,%eax
cmp    %ecx,%eax
jg     1303 <adjzone+0x1f3>
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%eax
mov    $0x18,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <month_days@plt>
mov    -0x14(%rbp),%ecx
mov    -0x8(%rbp),%rdx
add    0xc(%rdx),%ecx
mov    %ecx,0xc(%rdx)
cmp    %ecx,%eax
jge    12fe <adjzone+0x1ee>
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rcx
add    $0x1,%rcx
mov    %rcx,0x10(%rax)
mov    $0xb,%eax
cmp    %rcx,%rax
jge    12f3 <adjzone+0x1e3>
mov    -0x8(%rbp),%rax
mov    0x20(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0x20(%rax)
mov    -0x8(%rbp),%rax
movq   $0x0,0x10(%rax)
mov    -0x8(%rbp),%rax
movl   $0x1,0xc(%rax)
jmp    1303 <adjzone+0x1f3>
jmp    1308 <adjzone+0x1f8>
mov    -0x8(%rbp),%rcx
xor    %eax,%eax
cmp    0x18(%rcx),%rax
jg     1371 <adjzone+0x261>
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    $0x7,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    $0x7,%ecx
cqto
idiv   %rcx
mov    %rdx,%rax
mov    -0x28(%rbp),%rdx
cmp    $0x0,%rax
setl   %al
and    $0x1,%al
movzbl %al,%eax
imul   $0x7,%eax,%eax
cltq
add    %rax,%rdx
mov    -0x8(%rbp),%rax
mov    %rdx,0x18(%rax)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%eax
mov    $0x18,%ecx
cltd
idiv   %ecx
mov    %edx,-0x38(%rbp)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%eax
mov    $0x18,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    -0x38(%rbp),%edx
cmp    $0x0,%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
imul   $0x18,%eax,%eax
add    %eax,%edx
mov    -0x8(%rbp),%rax
mov    %edx,0x8(%rax)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
mov    $0x3c,%ecx
cltd
idiv   %ecx
mov    %edx,-0x34(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
mov    $0x3c,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    -0x34(%rbp),%edx
cmp    $0x0,%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
imul   $0x3c,%eax,%eax
add    %eax,%edx
mov    -0x8(%rbp),%rax
mov    %edx,0x4(%rax)
mov    -0x20(%rbp),%rax
mov    $0x3c,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    $0x3c,%ecx
cqto
idiv   %rcx
mov    %rdx,%rax
mov    -0x30(%rbp),%rdx
cmp    $0x0,%rax
setl   %al
and    $0x1,%al
movzbl %al,%eax
imul   $0x3c,%eax,%eax
cltq
add    %rax,%rdx
mov    %edx,%ecx
add    -0x18(%rbp),%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<adjzone>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rdi,%rbx
mov    (%rdi),%eax
xor    %r12d,%r12d
cmp    $0x3c,%eax
sete   %r12b
sub    %r12d,%eax
movslq %eax,%r14
add    %rsi,%r14
movabs $0x8888888888888889,%r15
88 88 88
js     11ca <adjzone+0xba>
mov    %r14,%rax
mul    %r15
shr    $0x5,%rdx
add    0x4(%rbx),%edx
mov    %edx,0x4(%rbx)
xor    %ebp,%ebp
cmp    $0x3c,%edx
jl     124d <adjzone+0x13d>
mov    %edx,%ecx
mov    $0x88888889,%eax
imul   %rcx,%rax
shr    $0x25,%rax
add    0x8(%rbx),%eax
mov    %eax,0x8(%rbx)
cmp    $0x18,%eax
jl     124d <adjzone+0x13d>
mov    %eax,%eax
mov    $0xaaaaaaab,%ebp
imul   %rax,%rbp
shr    $0x24,%rbp
mov    %rbx,%rdi
call   1030 <month_days@plt>
mov    0xc(%rbx),%ecx
add    %ebp,%ecx
mov    %ecx,0xc(%rbx)
cmp    %ecx,%eax
jge    124d <adjzone+0x13d>
mov    0x10(%rbx),%rax
lea    0x1(%rax),%rcx
mov    %rcx,0x10(%rbx)
cmp    $0xb,%rax
jl     11be <adjzone+0xae>
addl   $0x1,0x20(%rbx)
movq   $0x0,0x10(%rbx)
movl   $0x1,0xc(%rbx)
jmp    124d <adjzone+0x13d>
mov    $0x3b,%eax
sub    %r14,%rax
mul    %r15
shr    $0x5,%rdx
mov    0x4(%rbx),%eax
xor    %ebp,%ebp
sub    %edx,%eax
mov    %eax,0x4(%rbx)
jns    124d <adjzone+0x13d>
mov    $0x3b,%ecx
sub    %eax,%ecx
mov    $0x88888889,%edx
imul   %rcx,%rdx
shr    $0x25,%rdx
mov    0x8(%rbx),%eax
sub    %edx,%eax
mov    %eax,0x8(%rbx)
jns    124d <adjzone+0x13d>
mov    $0x17,%ecx
sub    %eax,%ecx
mov    $0xaaaaaaab,%ebp
imul   %rcx,%rbp
shr    $0x24,%rbp
mov    0xc(%rbx),%eax
sub    %ebp,%eax
neg    %ebp
mov    %eax,0xc(%rbx)
test   %eax,%eax
jg     124d <adjzone+0x13d>
mov    0x10(%rbx),%rax
lea    -0x1(%rax),%rcx
mov    %rcx,0x10(%rbx)
test   %rax,%rax
jg     1242 <adjzone+0x132>
addl   $0xffffffff,0x20(%rbx)
movq   $0xb,0x10(%rbx)
mov    %rbx,%rdi
call   1030 <month_days@plt>
add    %eax,0xc(%rbx)
mov    0x18(%rbx),%rcx
test   %rcx,%rcx
js     1298 <adjzone+0x188>
movslq %ebp,%rax
add    %rax,%rcx
movabs $0x4924924924924925,%rdx
92 24 49
mov    %rcx,%rax
imul   %rdx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    %rdx
add    %rax,%rdx
lea    0x0(,%rdx,8),%rax
sub    %rax,%rdx
add    %rcx,%rdx
mov    %rdx,%rax
sar    $0x3f,%rax
and    $0x7,%eax
add    %rdx,%rax
mov    %rax,0x18(%rbx)
movslq 0x8(%rbx),%rax
imul   $0x2aaaaaab,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
shr    $0x22,%rcx
add    %edx,%ecx
shl    $0x3,%ecx
lea    (%rcx,%rcx,2),%ecx
sub    %ecx,%eax
mov    %eax,%ecx
sar    $0x1f,%ecx
and    $0x18,%ecx
add    %eax,%ecx
mov    %ecx,0x8(%rbx)
movslq 0x4(%rbx),%rax
imul   $0xffffffff88888889,%rax,%rcx
shr    $0x20,%rcx
add    %eax,%ecx
mov    %ecx,%edx
shr    $0x1f,%edx
sar    $0x5,%ecx
add    %edx,%ecx
imul   $0x3c,%ecx,%ecx
sub    %ecx,%eax
mov    %eax,%ecx
sar    $0x1f,%ecx
and    $0x3c,%ecx
add    %eax,%ecx
mov    %r14,%rax
imul   %r15
mov    %ecx,0x4(%rbx)
add    %r14,%rdx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x5,%rdx
add    %rax,%rdx
imul   $0x3c,%rdx,%rax
sub    %rax,%r14
mov    %r14,%rax
sar    $0x3f,%rax
and    $0x3c,%eax
add    %r14d,%eax
add    %r12d,%eax
mov    %eax,(%rbx)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

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