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

/* Variables and functions */
void *INT_MIN;
int /*<<< orphan*/ check_mday(void *, void *, void *);
void *first_wday(void *, scalar_t__, int);
int /*<<< orphan*/ localtime_r(scalar_t__ *, struct tm *);
scalar_t__ mktime(struct tm *);
char *my_strptime(char const *, char const *, struct tm *);
int /*<<< orphan*/ time(scalar_t__ *);
int xgetdate_r(const char *string, struct tm *tp, const char *const *template) {
  const char *line;
  char *result = NULL;
  time_t timer;
  struct tm tm;
  int mday_ok = 0;
  line = NULL;
  while ((line = *template ++)) {
    tp->tm_year = tp->tm_mon = tp->tm_mday = tp->tm_wday = INT_MIN;
    tp->tm_hour = tp->tm_sec = tp->tm_min = INT_MIN;
    tp->tm_isdst = -1;
    tp->tm_gmtoff = 0;
    tp->tm_zone = NULL;
    result = my_strptime(string, line, tp);
    if (result && *result == '\0')
      break;
  }
  if (result == NULL || *result != '\0')
    return 7;
  time(&timer);
  localtime_r(&timer, &tm);
  if (tp->tm_wday >= 0 && tp->tm_wday <= 6 && tp->tm_year == INT_MIN &&
      tp->tm_mon == INT_MIN && tp->tm_mday == INT_MIN) {
    tp->tm_year = tm.tm_year;
    tp->tm_mon = tm.tm_mon;
    tp->tm_mday = tm.tm_mday + (tp->tm_wday - tm.tm_wday + 7) % 7;
    mday_ok = 1;
  }
  if (tp->tm_mon >= 0 && tp->tm_mon <= 11 && tp->tm_mday == INT_MIN) {
    if (tp->tm_year == INT_MIN)
      tp->tm_year = tm.tm_year + (((tp->tm_mon - tm.tm_mon) < 0) ? 1 : 0);
    tp->tm_mday = first_wday(tp->tm_year, tp->tm_mon, tp->tm_wday);
    mday_ok = 1;
  }
  if (tp->tm_hour == INT_MIN && tp->tm_min == INT_MIN &&
      tp->tm_sec == INT_MIN) {
    tp->tm_hour = tm.tm_hour;
    tp->tm_min = tm.tm_min;
    tp->tm_sec = tm.tm_sec;
  }
  if (tp->tm_hour >= 0 && tp->tm_hour <= 23 && tp->tm_year == INT_MIN &&
      tp->tm_mon == INT_MIN && tp->tm_mday == INT_MIN &&
      tp->tm_wday == INT_MIN) {
    tp->tm_year = tm.tm_year;
    tp->tm_mon = tm.tm_mon;
    tp->tm_mday = tm.tm_mday + ((tp->tm_hour - tm.tm_hour) < 0 ? 1 : 0);
    mday_ok = 1;
  }
  if (tp->tm_year == INT_MIN)
    tp->tm_year = tm.tm_year;
  if (tp->tm_hour == INT_MIN)
    tp->tm_hour = 0;
  if (tp->tm_min == INT_MIN)
    tp->tm_min = 0;
  if (tp->tm_sec == INT_MIN)
    tp->tm_sec = 0;
  if ((!mday_ok && !check_mday(1900 + tp->tm_year, tp->tm_mon, tp->tm_mday)) ||
      mktime(tp) == (time_t)-1)
    return 8;
  return 0;
}


x86 assembly (clang, -O0):
<xgetdate_r>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
movq   $0x0,-0x30(%rbp)
movl   $0x0,-0x8c(%rbp)
movq   $0x0,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
cmp    $0x0,%rax
je     1259 <xgetdate_r+0xf9>
mov    0x2e30(%rip),%rax
mov    (%rax),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x18(%rax)
mov    -0x18(%rbp),%rax
mov    %rcx,0x10(%rax)
mov    -0x18(%rbp),%rax
mov    %rcx,0x8(%rax)
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    0x2e07(%rip),%rax
mov    (%rax),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x30(%rax)
mov    -0x18(%rbp),%rax
mov    %rcx,0x28(%rax)
mov    -0x18(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x18(%rbp),%rax
movl   $0xffffffff,0x38(%rax)
mov    -0x18(%rbp),%rax
movq   $0x0,0x48(%rax)
mov    -0x18(%rbp),%rax
movq   $0x0,0x40(%rax)
mov    -0x10(%rbp),%rdi
mov    -0x28(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1060 <my_strptime@plt>
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
je     1254 <xgetdate_r+0xf4>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1254 <xgetdate_r+0xf4>
jmp    1259 <xgetdate_r+0xf9>
jmp    1191 <xgetdate_r+0x31>
cmpq   $0x0,-0x30(%rbp)
je     1274 <xgetdate_r+0x114>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1280 <xgetdate_r+0x120>
movl   $0x7,-0x4(%rbp)
jmp    1635 <xgetdate_r+0x4d5>
lea    -0x38(%rbp),%rdi
call   1070 <time@plt>
lea    -0x38(%rbp),%rdi
lea    -0x88(%rbp),%rsi
call   1040 <localtime_r@plt>
mov    -0x18(%rbp),%rax
cmpq   $0x0,0x18(%rax)
jb     1352 <xgetdate_r+0x1f2>
mov    -0x18(%rbp),%rax
mov    $0x6,%ecx
cmp    %rcx,0x18(%rax)
ja     1352 <xgetdate_r+0x1f2>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    0x2d1f(%rip),%rcx
cmp    (%rcx),%rax
jne    1352 <xgetdate_r+0x1f2>
mov    -0x18(%rbp),%rax
mov    0x8(%rax),%rax
mov    0x2d07(%rip),%rcx
cmp    (%rcx),%rax
jne    1352 <xgetdate_r+0x1f2>
mov    -0x18(%rbp),%rax
mov    0x10(%rax),%rax
mov    0x2cef(%rip),%rcx
cmp    (%rcx),%rax
jne    1352 <xgetdate_r+0x1f2>
mov    -0x88(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x80(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x8(%rax)
mov    -0x78(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    0x18(%rax),%rax
mov    -0x70(%rbp),%rdx
sub    %rdx,%rax
add    $0x7,%rax
mov    $0x7,%esi
cqto
idiv   %rsi
add    %rdx,%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x10(%rax)
movl   $0x1,-0x8c(%rbp)
mov    -0x18(%rbp),%rax
cmpq   $0x0,0x8(%rax)
jb     1406 <xgetdate_r+0x2a6>
mov    -0x18(%rbp),%rax
mov    $0xb,%ecx
cmp    %rcx,0x8(%rax)
ja     1406 <xgetdate_r+0x2a6>
mov    -0x18(%rbp),%rax
mov    0x10(%rax),%rax
mov    0x2c65(%rip),%rcx
cmp    (%rcx),%rax
jne    1406 <xgetdate_r+0x2a6>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    0x2c4e(%rip),%rcx
cmp    (%rcx),%rax
jne    13d3 <xgetdate_r+0x273>
mov    -0x88(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    0x8(%rax),%rsi
mov    -0x80(%rbp),%rax
sub    %rax,%rsi
xor    %eax,%eax
mov    $0x1,%edx
cmp    $0x0,%rsi
cmovl  %edx,%eax
cltq
add    %rax,%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
mov    (%rax),%rdi
mov    -0x18(%rbp),%rax
mov    0x8(%rax),%rsi
mov    -0x18(%rbp),%rax
mov    0x18(%rax),%rax
mov    %eax,%edx
call   1050 <first_wday@plt>
mov    %rax,%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x10(%rax)
movl   $0x1,-0x8c(%rbp)
mov    -0x18(%rbp),%rax
mov    0x20(%rax),%rax
mov    0x2bd3(%rip),%rcx
cmp    (%rcx),%rax
jne    1472 <xgetdate_r+0x312>
mov    -0x18(%rbp),%rax
mov    0x30(%rax),%rax
mov    0x2bbb(%rip),%rcx
cmp    (%rcx),%rax
jne    1472 <xgetdate_r+0x312>
mov    -0x18(%rbp),%rax
mov    0x28(%rax),%rax
mov    0x2ba3(%rip),%rcx
cmp    (%rcx),%rax
jne    1472 <xgetdate_r+0x312>
mov    -0x68(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x58(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x30(%rax)
mov    -0x60(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x28(%rax)
mov    -0x18(%rbp),%rax
cmpq   $0x0,0x20(%rax)
jb     1545 <xgetdate_r+0x3e5>
mov    -0x18(%rbp),%rax
mov    $0x17,%ecx
cmp    %rcx,0x20(%rax)
ja     1545 <xgetdate_r+0x3e5>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    0x2b46(%rip),%rcx
cmp    (%rcx),%rax
jne    1545 <xgetdate_r+0x3e5>
mov    -0x18(%rbp),%rax
mov    0x8(%rax),%rax
mov    0x2b2e(%rip),%rcx
cmp    (%rcx),%rax
jne    1545 <xgetdate_r+0x3e5>
mov    -0x18(%rbp),%rax
mov    0x10(%rax),%rax
mov    0x2b16(%rip),%rcx
cmp    (%rcx),%rax
jne    1545 <xgetdate_r+0x3e5>
mov    -0x18(%rbp),%rax
mov    0x18(%rax),%rax
mov    0x2afe(%rip),%rcx
cmp    (%rcx),%rax
jne    1545 <xgetdate_r+0x3e5>
mov    -0x88(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x80(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x8(%rax)
mov    -0x78(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    0x20(%rax),%rsi
mov    -0x68(%rbp),%rax
sub    %rax,%rsi
xor    %eax,%eax
mov    $0x1,%edx
cmp    $0x0,%rsi
cmovl  %edx,%eax
cltq
add    %rax,%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,0x10(%rax)
movl   $0x1,-0x8c(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    0x2a95(%rip),%rcx
cmp    (%rcx),%rax
jne    156a <xgetdate_r+0x40a>
mov    -0x88(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
mov    0x20(%rax),%rax
mov    0x2a6f(%rip),%rcx
cmp    (%rcx),%rax
jne    158e <xgetdate_r+0x42e>
mov    -0x18(%rbp),%rax
movq   $0x0,0x20(%rax)
mov    -0x18(%rbp),%rax
mov    0x30(%rax),%rax
mov    0x2a4b(%rip),%rcx
cmp    (%rcx),%rax
jne    15b2 <xgetdate_r+0x452>
mov    -0x18(%rbp),%rax
movq   $0x0,0x30(%rax)
mov    -0x18(%rbp),%rax
mov    0x28(%rax),%rax
mov    0x2a27(%rip),%rcx
cmp    (%rcx),%rax
jne    15d6 <xgetdate_r+0x476>
mov    -0x18(%rbp),%rax
movq   $0x0,0x28(%rax)
cmpl   $0x0,-0x8c(%rbp)
jne    160f <xgetdate_r+0x4af>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdi
add    $0x76c,%rdi
mov    -0x18(%rbp),%rax
mov    0x8(%rax),%rsi
mov    -0x18(%rbp),%rax
mov    0x10(%rax),%rdx
call   1030 <check_mday@plt>
cmp    $0x0,%eax
je     1622 <xgetdate_r+0x4c2>
mov    -0x18(%rbp),%rdi
call   1080 <mktime@plt>
cmp    $0xffffffffffffffff,%rax
jne    162e <xgetdate_r+0x4ce>
movl   $0x8,-0x4(%rbp)
jmp    1635 <xgetdate_r+0x4d5>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<xgetdate_r>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %rsi,%rbx
mov    (%rdx),%rsi
mov    $0x7,%r14d
test   %rsi,%rsi
je     13ca <xgetdate_r+0x26a>
mov    %rdx,%rbp
mov    %rdi,%r15
lea    0x40(%rbx),%r13
add    $0x8,%rbp
mov    0x2e50(%rip),%r12
jmp    11ad <xgetdate_r+0x4d>
nopw   0x0(%rax,%rax,1)
mov    0x0(%rbp),%rsi
add    $0x8,%rbp
test   %rsi,%rsi
je     11f6 <xgetdate_r+0x96>
mov    (%r12),%rax
mov    %rax,0x18(%rbx)
mov    %rax,0x10(%rbx)
mov    %rax,0x8(%rbx)
mov    %rax,(%rbx)
mov    (%r12),%rax
mov    %rax,0x30(%rbx)
mov    %rax,0x28(%rbx)
mov    %rax,0x20(%rbx)
movl   $0xffffffff,0x38(%rbx)
xorps  %xmm0,%xmm0
movups %xmm0,0x0(%r13)
mov    %r15,%rdi
mov    %rbx,%rdx
call   1060 <my_strptime@plt>
test   %rax,%rax
je     11a0 <xgetdate_r+0x40>
cmpb   $0x0,(%rax)
jne    11a0 <xgetdate_r+0x40>
jmp    1208 <xgetdate_r+0xa8>
test   %rax,%rax
je     13ca <xgetdate_r+0x26a>
cmpb   $0x0,(%rax)
jne    13ca <xgetdate_r+0x26a>
lea    0x50(%rsp),%rbp
mov    %rbp,%rdi
call   1070 <time@plt>
mov    %rsp,%rsi
mov    %rbp,%rdi
call   1040 <localtime_r@plt>
mov    0x18(%rbx),%rcx
xor    %eax,%eax
cmp    $0x6,%rcx
ja     128f <xgetdate_r+0x12f>
mov    (%rbx),%rdx
cmp    (%r12),%rdx
jne    128f <xgetdate_r+0x12f>
cmp    %rdx,0x8(%rbx)
jne    128f <xgetdate_r+0x12f>
cmp    %rdx,0x10(%rbx)
jne    128f <xgetdate_r+0x12f>
movaps (%rsp),%xmm0
movups %xmm0,(%rbx)
mov    %rcx,%rsi
sub    0x18(%rsp),%rsi
lea    0x7(%rsi),%rax
movabs $0x4924924924924925,%rdx
92 24 49
imul   %rdx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    %rdx
add    %rax,%rdx
lea    0x0(,%rdx,8),%rax
sub    %rax,%rdx
lea    (%rsi,%rdx,1),%rax
add    $0x7,%rax
add    0x10(%rsp),%rax
mov    %rax,0x10(%rbx)
mov    $0x1,%eax
mov    0x8(%rbx),%rsi
cmp    $0xb,%rsi
ja     12ce <xgetdate_r+0x16e>
mov    0x10(%rbx),%rdx
cmp    (%r12),%rdx
jne    12ce <xgetdate_r+0x16e>
mov    (%rbx),%rdi
cmp    %rdx,%rdi
jne    12be <xgetdate_r+0x15e>
mov    %rsi,%rdi
sub    0x8(%rsp),%rdi
shr    $0x3f,%rdi
add    (%rsp),%rdi
mov    %rdi,(%rbx)
mov    %ecx,%edx
call   1050 <first_wday@plt>
mov    %rax,0x10(%rbx)
mov    $0x1,%eax
mov    0x20(%rbx),%rcx
mov    (%r12),%rdx
cmp    %rdx,%rcx
jne    12f9 <xgetdate_r+0x199>
cmp    %rcx,0x30(%rbx)
jne    12f9 <xgetdate_r+0x199>
cmp    %rcx,0x28(%rbx)
jne    12f9 <xgetdate_r+0x199>
mov    0x20(%rsp),%rcx
mov    %rcx,0x20(%rbx)
movups 0x28(%rsp),%xmm0
movups %xmm0,0x28(%rbx)
mov    (%rbx),%rdi
cmp    $0x17,%rcx
ja     1347 <xgetdate_r+0x1e7>
cmp    %rdx,%rdi
jne    1347 <xgetdate_r+0x1e7>
cmp    %rdx,0x8(%rbx)
jne    1363 <xgetdate_r+0x203>
cmp    %rdx,0x10(%rbx)
jne    1363 <xgetdate_r+0x203>
cmp    %rdx,0x18(%rbx)
jne    1363 <xgetdate_r+0x203>
mov    (%rsp),%rdi
mov    %rdi,(%rbx)
mov    0x8(%rsp),%rax
mov    %rax,0x8(%rbx)
mov    %rcx,%rax
sub    0x20(%rsp),%rax
shr    $0x3f,%rax
add    0x10(%rsp),%rax
mov    %rax,0x10(%rbx)
mov    (%r12),%rdx
mov    $0x1,%eax
cmp    %rdx,%rdi
je     1363 <xgetdate_r+0x203>
cmp    %rdx,%rcx
je     1373 <xgetdate_r+0x213>
cmp    %rdx,0x30(%rbx)
je     1381 <xgetdate_r+0x221>
cmp    %rdx,0x28(%rbx)
je     138f <xgetdate_r+0x22f>
test   %eax,%eax
jne    13b3 <xgetdate_r+0x253>
jmp    139b <xgetdate_r+0x23b>
mov    (%rsp),%rdi
mov    %rdi,(%rbx)
mov    (%r12),%rdx
cmp    %rdx,%rcx
jne    1351 <xgetdate_r+0x1f1>
movq   $0x0,0x20(%rbx)
cmp    %rdx,0x30(%rbx)
jne    1357 <xgetdate_r+0x1f7>
movq   $0x0,0x30(%rbx)
cmp    %rdx,0x28(%rbx)
jne    135d <xgetdate_r+0x1fd>
movq   $0x0,0x28(%rbx)
test   %eax,%eax
jne    13b3 <xgetdate_r+0x253>
add    $0x76c,%rdi
mov    0x8(%rbx),%rsi
mov    0x10(%rbx),%rdx
call   1030 <check_mday@plt>
test   %eax,%eax
je     13dc <xgetdate_r+0x27c>
mov    %rbx,%rdi
call   1080 <mktime@plt>
xor    %r14d,%r14d
cmp    $0xffffffffffffffff,%rax
sete   %r14b
shl    $0x3,%r14d
mov    %r14d,%eax
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x8,%r14d
jmp    13ca <xgetdate_r+0x26a>

LLVM IR (-O0):
%struct.tm = type { i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i32*, i64 }
@INT_MIN = global i8* null
define i32 @xgetdate_r(i8* %0, %struct.tm* %1, i8** %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca %struct.tm*
%7 = alloca i8**
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i64
%11 = alloca %struct.tm
%12 = alloca i32
store i8* %0, i8** %5
store %struct.tm* %1, %struct.tm** %6
store i8** %2, i8*** %7
store i8* null, i8** %9
store i32 0, i32* %12
store i8* null, i8** %8
br label %13
13: ; preds = %53, %3
%14 = load i8**, i8*** %7
%15 = getelementptr inbounds i8*, i8** %14, i32 1
store i8** %15, i8*** %7
%16 = load i8*, i8** %14
store i8* %16, i8** %8
%17 = icmp ne i8* %16, null
br i1 %17, label %18, label %54
18: ; preds = %13
%19 = load i8*, i8** @INT_MIN
%20 = load %struct.tm*, %struct.tm** %6
%21 = getelementptr inbounds %struct.tm, %struct.tm* %20, i32 0, i32 3
store i8* %19, i8** %21
%22 = load %struct.tm*, %struct.tm** %6
%23 = getelementptr inbounds %struct.tm, %struct.tm* %22, i32 0, i32 2
store i8* %19, i8** %23
%24 = load %struct.tm*, %struct.tm** %6
%25 = getelementptr inbounds %struct.tm, %struct.tm* %24, i32 0, i32 1
store i8* %19, i8** %25
%26 = load %struct.tm*, %struct.tm** %6
%27 = getelementptr inbounds %struct.tm, %struct.tm* %26, i32 0, i32 0
store i8* %19, i8** %27
%28 = load i8*, i8** @INT_MIN
%29 = load %struct.tm*, %struct.tm** %6
%30 = getelementptr inbounds %struct.tm, %struct.tm* %29, i32 0, i32 6
store i8* %28, i8** %30
%31 = load %struct.tm*, %struct.tm** %6
%32 = getelementptr inbounds %struct.tm, %struct.tm* %31, i32 0, i32 5
store i8* %28, i8** %32
%33 = load %struct.tm*, %struct.tm** %6
%34 = getelementptr inbounds %struct.tm, %struct.tm* %33, i32 0, i32 4
store i8* %28, i8** %34
%35 = load %struct.tm*, %struct.tm** %6
%36 = getelementptr inbounds %struct.tm, %struct.tm* %35, i32 0, i32 7
store i32 -1, i32* %36
%37 = load %struct.tm*, %struct.tm** %6
%38 = getelementptr inbounds %struct.tm, %struct.tm* %37, i32 0, i32 9
store i64 0, i64* %38
%39 = load %struct.tm*, %struct.tm** %6
%40 = getelementptr inbounds %struct.tm, %struct.tm* %39, i32 0, i32 8
store i32* null, i32** %40
%41 = load i8*, i8** %5
%42 = load i8*, i8** %8
%43 = load %struct.tm*, %struct.tm** %6
%44 = call i8* @my_strptime(i8* %41, i8* %42, %struct.tm* %43)
store i8* %44, i8** %9
%45 = load i8*, i8** %9
%46 = icmp ne i8* %45, null
br i1 %46, label %47, label %53
47: ; preds = %18
%48 = load i8*, i8** %9
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
%51 = icmp eq i32 %50, 0
br i1 %51, label %52, label %53
52: ; preds = %47
br label %54
53: ; preds = %47, %18
br label %13
54: ; preds = %52, %13
%55 = load i8*, i8** %9
%56 = icmp eq i8* %55, null
br i1 %56, label %62, label %57
57: ; preds = %54
%58 = load i8*, i8** %9
%59 = load i8, i8* %58
%60 = sext i8 %59 to i32
%61 = icmp ne i32 %60, 0
br i1 %61, label %62, label %63
62: ; preds = %57, %54
store i32 7, i32* %4
br label %323
63: ; preds = %57
%64 = call i32 @time(i64* %10)
%65 = call i32 @localtime_r(i64* %10, %struct.tm* %11)
%66 = load %struct.tm*, %struct.tm** %6
%67 = getelementptr inbounds %struct.tm, %struct.tm* %66, i32 0, i32 3
%68 = load i8*, i8** %67
%69 = icmp uge i8* %68, null
br i1 %69, label %70, label %117
70: ; preds = %63
%71 = load %struct.tm*, %struct.tm** %6
%72 = getelementptr inbounds %struct.tm, %struct.tm* %71, i32 0, i32 3
%73 = load i8*, i8** %72
%74 = icmp ule i8* %73, inttoptr (i64 6 to i8*)
br i1 %74, label %75, label %117
75: ; preds = %70
%76 = load %struct.tm*, %struct.tm** %6
%77 = getelementptr inbounds %struct.tm, %struct.tm* %76, i32 0, i32 0
%78 = load i8*, i8** %77
%79 = load i8*, i8** @INT_MIN
%80 = icmp eq i8* %78, %79
br i1 %80, label %81, label %117
81: ; preds = %75
%82 = load %struct.tm*, %struct.tm** %6
%83 = getelementptr inbounds %struct.tm, %struct.tm* %82, i32 0, i32 1
%84 = load i8*, i8** %83
%85 = load i8*, i8** @INT_MIN
%86 = icmp eq i8* %84, %85
br i1 %86, label %87, label %117
87: ; preds = %81
%88 = load %struct.tm*, %struct.tm** %6
%89 = getelementptr inbounds %struct.tm, %struct.tm* %88, i32 0, i32 2
%90 = load i8*, i8** %89
%91 = load i8*, i8** @INT_MIN
%92 = icmp eq i8* %90, %91
br i1 %92, label %93, label %117
93: ; preds = %87
%94 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 0
%95 = load i8*, i8** %94
%96 = load %struct.tm*, %struct.tm** %6
%97 = getelementptr inbounds %struct.tm, %struct.tm* %96, i32 0, i32 0
store i8* %95, i8** %97
%98 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 1
%99 = load i8*, i8** %98
%100 = load %struct.tm*, %struct.tm** %6
%101 = getelementptr inbounds %struct.tm, %struct.tm* %100, i32 0, i32 1
store i8* %99, i8** %101
%102 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 2
%103 = load i8*, i8** %102
%104 = load %struct.tm*, %struct.tm** %6
%105 = getelementptr inbounds %struct.tm, %struct.tm* %104, i32 0, i32 3
%106 = load i8*, i8** %105
%107 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 3
%108 = load i8*, i8** %107
%109 = ptrtoint i8* %106 to i64
%110 = ptrtoint i8* %108 to i64
%111 = sub i64 %109, %110
%112 = add nsw i64 %111, 7
%113 = srem i64 %112, 7
%114 = getelementptr i8, i8* %103, i64 %113
%115 = load %struct.tm*, %struct.tm** %6
%116 = getelementptr inbounds %struct.tm, %struct.tm* %115, i32 0, i32 2
store i8* %114, i8** %116
store i32 1, i32* %12
br label %117
117: ; preds = %93, %87, %81, %75, %70, %63
%118 = load %struct.tm*, %struct.tm** %6
%119 = getelementptr inbounds %struct.tm, %struct.tm* %118, i32 0, i32 1
%120 = load i8*, i8** %119
%121 = icmp uge i8* %120, null
br i1 %121, label %122, label %172
122: ; preds = %117
%123 = load %struct.tm*, %struct.tm** %6
%124 = getelementptr inbounds %struct.tm, %struct.tm* %123, i32 0, i32 1
%125 = load i8*, i8** %124
%126 = icmp ule i8* %125, inttoptr (i64 11 to i8*)
br i1 %126, label %127, label %172
127: ; preds = %122
%128 = load %struct.tm*, %struct.tm** %6
%129 = getelementptr inbounds %struct.tm, %struct.tm* %128, i32 0, i32 2
%130 = load i8*, i8** %129
%131 = load i8*, i8** @INT_MIN
%132 = icmp eq i8* %130, %131
br i1 %132, label %133, label %172
133: ; preds = %127
%134 = load %struct.tm*, %struct.tm** %6
%135 = getelementptr inbounds %struct.tm, %struct.tm* %134, i32 0, i32 0
%136 = load i8*, i8** %135
%137 = load i8*, i8** @INT_MIN
%138 = icmp eq i8* %136, %137
br i1 %138, label %139, label %157
139: ; preds = %133
%140 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 0
%141 = load i8*, i8** %140
%142 = load %struct.tm*, %struct.tm** %6
%143 = getelementptr inbounds %struct.tm, %struct.tm* %142, i32 0, i32 1
%144 = load i8*, i8** %143
%145 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 1
%146 = load i8*, i8** %145
%147 = ptrtoint i8* %144 to i64
%148 = ptrtoint i8* %146 to i64
%149 = sub i64 %147, %148
%150 = icmp slt i64 %149, 0
%151 = zext i1 %150 to i64
%152 = select i1 %150, i32 1, i32 0
%153 = sext i32 %152 to i64
%154 = getelementptr i8, i8* %141, i64 %153
%155 = load %struct.tm*, %struct.tm** %6
%156 = getelementptr inbounds %struct.tm, %struct.tm* %155, i32 0, i32 0
store i8* %154, i8** %156
br label %157
157: ; preds = %139, %133
%158 = load %struct.tm*, %struct.tm** %6
%159 = getelementptr inbounds %struct.tm, %struct.tm* %158, i32 0, i32 0
%160 = load i8*, i8** %159
%161 = load %struct.tm*, %struct.tm** %6
%162 = getelementptr inbounds %struct.tm, %struct.tm* %161, i32 0, i32 1
%163 = load i8*, i8** %162
%164 = ptrtoint i8* %163 to i64
%165 = load %struct.tm*, %struct.tm** %6
%166 = getelementptr inbounds %struct.tm, %struct.tm* %165, i32 0, i32 3
%167 = load i8*, i8** %166
%168 = ptrtoint i8* %167 to i32
%169 = call i8* @first_wday(i8* %160, i64 %164, i32 %168)
%170 = load %struct.tm*, %struct.tm** %6
%171 = getelementptr inbounds %struct.tm, %struct.tm* %170, i32 0, i32 2
store i8* %169, i8** %171
store i32 1, i32* %12
br label %172
172: ; preds = %157, %127, %122, %117
%173 = load %struct.tm*, %struct.tm** %6
%174 = getelementptr inbounds %struct.tm, %struct.tm* %173, i32 0, i32 4
%175 = load i8*, i8** %174
%176 = load i8*, i8** @INT_MIN
%177 = icmp eq i8* %175, %176
br i1 %177, label %178, label %203
178: ; preds = %172
%179 = load %struct.tm*, %struct.tm** %6
%180 = getelementptr inbounds %struct.tm, %struct.tm* %179, i32 0, i32 6
%181 = load i8*, i8** %180
%182 = load i8*, i8** @INT_MIN
%183 = icmp eq i8* %181, %182
br i1 %183, label %184, label %203
184: ; preds = %178
%185 = load %struct.tm*, %struct.tm** %6
%186 = getelementptr inbounds %struct.tm, %struct.tm* %185, i32 0, i32 5
%187 = load i8*, i8** %186
%188 = load i8*, i8** @INT_MIN
%189 = icmp eq i8* %187, %188
br i1 %189, label %190, label %203
190: ; preds = %184
%191 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 4
%192 = load i8*, i8** %191
%193 = load %struct.tm*, %struct.tm** %6
%194 = getelementptr inbounds %struct.tm, %struct.tm* %193, i32 0, i32 4
store i8* %192, i8** %194
%195 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 6
%196 = load i8*, i8** %195
%197 = load %struct.tm*, %struct.tm** %6
%198 = getelementptr inbounds %struct.tm, %struct.tm* %197, i32 0, i32 6
store i8* %196, i8** %198
%199 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 5
%200 = load i8*, i8** %199
%201 = load %struct.tm*, %struct.tm** %6
%202 = getelementptr inbounds %struct.tm, %struct.tm* %201, i32 0, i32 5
store i8* %200, i8** %202
br label %203
203: ; preds = %190, %184, %178, %172
%204 = load %struct.tm*, %struct.tm** %6
%205 = getelementptr inbounds %struct.tm, %struct.tm* %204, i32 0, i32 4
%206 = load i8*, i8** %205
%207 = icmp uge i8* %206, null
br i1 %207, label %208, label %263
208: ; preds = %203
%209 = load %struct.tm*, %struct.tm** %6
%210 = getelementptr inbounds %struct.tm, %struct.tm* %209, i32 0, i32 4
%211 = load i8*, i8** %210
%212 = icmp ule i8* %211, inttoptr (i64 23 to i8*)
br i1 %212, label %213, label %263
213: ; preds = %208
%214 = load %struct.tm*, %struct.tm** %6
%215 = getelementptr inbounds %struct.tm, %struct.tm* %214, i32 0, i32 0
%216 = load i8*, i8** %215
%217 = load i8*, i8** @INT_MIN
%218 = icmp eq i8* %216, %217
br i1 %218, label %219, label %263
219: ; preds = %213
%220 = load %struct.tm*, %struct.tm** %6
%221 = getelementptr inbounds %struct.tm, %struct.tm* %220, i32 0, i32 1
%222 = load i8*, i8** %221
%223 = load i8*, i8** @INT_MIN
%224 = icmp eq i8* %222, %223
br i1 %224, label %225, label %263
225: ; preds = %219
%226 = load %struct.tm*, %struct.tm** %6
%227 = getelementptr inbounds %struct.tm, %struct.tm* %226, i32 0, i32 2
%228 = load i8*, i8** %227
%229 = load i8*, i8** @INT_MIN
%230 = icmp eq i8* %228, %229
br i1 %230, label %231, label %263
231: ; preds = %225
%232 = load %struct.tm*, %struct.tm** %6
%233 = getelementptr inbounds %struct.tm, %struct.tm* %232, i32 0, i32 3
%234 = load i8*, i8** %233
%235 = load i8*, i8** @INT_MIN
%236 = icmp eq i8* %234, %235
br i1 %236, label %237, label %263
237: ; preds = %231
%238 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 0
%239 = load i8*, i8** %238
%240 = load %struct.tm*, %struct.tm** %6
%241 = getelementptr inbounds %struct.tm, %struct.tm* %240, i32 0, i32 0
store i8* %239, i8** %241
%242 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 1
%243 = load i8*, i8** %242
%244 = load %struct.tm*, %struct.tm** %6
%245 = getelementptr inbounds %struct.tm, %struct.tm* %244, i32 0, i32 1
store i8* %243, i8** %245
%246 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 2
%247 = load i8*, i8** %246
%248 = load %struct.tm*, %struct.tm** %6
%249 = getelementptr inbounds %struct.tm, %struct.tm* %248, i32 0, i32 4
%250 = load i8*, i8** %249
%251 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 4
%252 = load i8*, i8** %251
%253 = ptrtoint i8* %250 to i64
%254 = ptrtoint i8* %252 to i64
%255 = sub i64 %253, %254
%256 = icmp slt i64 %255, 0
%257 = zext i1 %256 to i64
%258 = select i1 %256, i32 1, i32 0
%259 = sext i32 %258 to i64
%260 = getelementptr i8, i8* %247, i64 %259
%261 = load %struct.tm*, %struct.tm** %6
%262 = getelementptr inbounds %struct.tm, %struct.tm* %261, i32 0, i32 2
store i8* %260, i8** %262
store i32 1, i32* %12
br label %263
263: ; preds = %237, %231, %225, %219, %213, %208, %203
%264 = load %struct.tm*, %struct.tm** %6
%265 = getelementptr inbounds %struct.tm, %struct.tm* %264, i32 0, i32 0
%266 = load i8*, i8** %265
%267 = load i8*, i8** @INT_MIN
%268 = icmp eq i8* %266, %267
br i1 %268, label %269, label %274
269: ; preds = %263
%270 = getelementptr inbounds %struct.tm, %struct.tm* %11, i32 0, i32 0
%271 = load i8*, i8** %270
%272 = load %struct.tm*, %struct.tm** %6
%273 = getelementptr inbounds %struct.tm, %struct.tm* %272, i32 0, i32 0
store i8* %271, i8** %273
br label %274
274: ; preds = %269, %263
%275 = load %struct.tm*, %struct.tm** %6
%276 = getelementptr inbounds %struct.tm, %struct.tm* %275, i32 0, i32 4
%277 = load i8*, i8** %276
%278 = load i8*, i8** @INT_MIN
%279 = icmp eq i8* %277, %278
br i1 %279, label %280, label %283
280: ; preds = %274
%281 = load %struct.tm*, %struct.tm** %6
%282 = getelementptr inbounds %struct.tm, %struct.tm* %281, i32 0, i32 4
store i8* null, i8** %282
br label %283
283: ; preds = %280, %274
%284 = load %struct.tm*, %struct.tm** %6
%285 = getelementptr inbounds %struct.tm, %struct.tm* %284, i32 0, i32 6
%286 = load i8*, i8** %285
%287 = load i8*, i8** @INT_MIN
%288 = icmp eq i8* %286, %287
br i1 %288, label %289, label %292
289: ; preds = %283
%290 = load %struct.tm*, %struct.tm** %6
%291 = getelementptr inbounds %struct.tm, %struct.tm* %290, i32 0, i32 6
store i8* null, i8** %291
br label %292
292: ; preds = %289, %283
%293 = load %struct.tm*, %struct.tm** %6
%294 = getelementptr inbounds %struct.tm, %struct.tm* %293, i32 0, i32 5
%295 = load i8*, i8** %294
%296 = load i8*, i8** @INT_MIN
%297 = icmp eq i8* %295, %296
br i1 %297, label %298, label %301
298: ; preds = %292
%299 = load %struct.tm*, %struct.tm** %6
%300 = getelementptr inbounds %struct.tm, %struct.tm* %299, i32 0, i32 5
store i8* null, i8** %300
br label %301
301: ; preds = %298, %292
%302 = load i32, i32* %12
%303 = icmp ne i32 %302, 0
br i1 %303, label %317, label %304
304: ; preds = %301
%305 = load %struct.tm*, %struct.tm** %6
%306 = getelementptr inbounds %struct.tm, %struct.tm* %305, i32 0, i32 0
%307 = load i8*, i8** %306
%308 = getelementptr i8, i8* %307, i64 1900
%309 = load %struct.tm*, %struct.tm** %6
%310 = getelementptr inbounds %struct.tm, %struct.tm* %309, i32 0, i32 1
%311 = load i8*, i8** %310
%312 = load %struct.tm*, %struct.tm** %6
%313 = getelementptr inbounds %struct.tm, %struct.tm* %312, i32 0, i32 2
%314 = load i8*, i8** %313
%315 = call i32 @check_mday(i8* %308, i8* %311, i8* %314)
%316 = icmp ne i32 %315, 0
br i1 %316, label %317, label %321
317: ; preds = %304, %301
%318 = load %struct.tm*, %struct.tm** %6
%319 = call i64 @mktime(%struct.tm* %318)
%320 = icmp eq i64 %319, -1
br i1 %320, label %321, label %322
321: ; preds = %317, %304
store i32 8, i32* %4
br label %323
322: ; preds = %317
store i32 0, i32* %4
br label %323
323: ; preds = %322, %321, %62
%324 = load i32, i32* %4
ret i32 %324
}

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