#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 {
  char tm_year;
  char tm_mon;
  char tm_mday;
  char tm_hour;
  char tm_min;
  char tm_sec;
  scalar_t__ tm_isdst;
};
typedef scalar_t__ int64_t;

/* Variables and functions */
int /*<<< orphan*/ isdigit(unsigned char);
scalar_t__ strtosint64(char const *);
scalar_t__ time(int /*<<< orphan*/ *);
scalar_t__ timegm(struct tm *);
int64_t strtimetosint64(const char *s) {
  if (s[0] == 'N') {
    if (s[1] != 'O' || s[2] != 'W' || (s[3] != '+' && s[3] != '-') ||
        !isdigit((unsigned char)(s[4])))
      return 0;
    s += 3;
    if (*s == '+')
      s++;
    return time(NULL) + strtosint64(s);
  }
  if ((s[0] != '1' && s[0] != '2') || !isdigit((unsigned char)(s[1])) ||
      !isdigit((unsigned char)(s[2])) || !isdigit((unsigned char)(s[3])) ||
      s[4] != '-' || !isdigit((unsigned char)(s[5])) ||
      !isdigit((unsigned char)(s[6])) || s[7] != '-' ||
      !isdigit((unsigned char)(s[8])) || !isdigit((unsigned char)(s[9])) ||
      s[10] != 'T' || !isdigit((unsigned char)(s[11])) ||
      !isdigit((unsigned char)(s[12])) || s[13] != ':' ||
      !isdigit((unsigned char)(s[14])) || !isdigit((unsigned char)(s[15])) ||
      s[16] != ':' || !isdigit((unsigned char)(s[17])) ||
      !isdigit((unsigned char)(s[18])) || s[19] != 'Z')
    return 0;
  {
    struct tm tm;
    tm.tm_isdst = 0;
    tm.tm_year = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 +
                 (s[3] - '0') - 1900;
    tm.tm_mon = (s[5] - '0') * 10 + s[6] - '0' - 1;
    tm.tm_mday = (s[8] - '0') * 10 + s[9] - '0';
    tm.tm_hour = (s[11] - '0') * 10 + s[12] - '0';
    tm.tm_min = (s[14] - '0') * 10 + s[15] - '0';
    tm.tm_sec = (s[17] - '0') * 10 + s[18] - '0';
    return timegm(&tm);
  }
}


x86 assembly (clang, -O0):
<strtimetosint64>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x4e,%eax
jne    1214 <strtimetosint64+0xd4>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x4f,%eax
jne    11b6 <strtimetosint64+0x76>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x57,%eax
jne    11b6 <strtimetosint64+0x76>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x2b,%eax
je     11a0 <strtimetosint64+0x60>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x2d,%eax
jne    11b6 <strtimetosint64+0x76>
mov    -0x10(%rbp),%rax
movzbl 0x4(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
jne    11c3 <strtimetosint64+0x83>
movq   $0x0,-0x8(%rbp)
jmp    14b8 <strtimetosint64+0x378>
mov    -0x10(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    11eb <strtimetosint64+0xab>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
xor    %eax,%eax
mov    %eax,%edi
call   1050 <time@plt>
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strtosint64@plt>
mov    %rax,%rcx
mov    -0x28(%rbp),%rax
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
jmp    14b8 <strtimetosint64+0x378>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x31,%eax
je     1234 <strtimetosint64+0xf4>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x32,%eax
jne    13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0x2(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0x3(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x2d,%eax
jne    13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0x5(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0x6(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x2d,%eax
jne    13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0x8(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0x9(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movsbl 0xa(%rax),%eax
cmp    $0x54,%eax
jne    13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0xb(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0xc(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movsbl 0xd(%rax),%eax
cmp    $0x3a,%eax
jne    13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0xe(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0xf(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movsbl 0x10(%rax),%eax
cmp    $0x3a,%eax
jne    13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0x11(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movzbl 0x12(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13b8 <strtimetosint64+0x278>
mov    -0x10(%rbp),%rax
movsbl 0x13(%rax),%eax
cmp    $0x5a,%eax
je     13c5 <strtimetosint64+0x285>
movq   $0x0,-0x8(%rbp)
jmp    14b8 <strtimetosint64+0x378>
movq   $0x0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
imul   $0x3e8,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
sub    $0x30,%ecx
imul   $0x64,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
sub    $0x30,%ecx
imul   $0xa,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
sub    $0x76c,%eax
mov    %al,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
add    %ecx,%eax
sub    $0x30,%eax
sub    $0x1,%eax
mov    %al,-0x1f(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x9(%rcx),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %al,-0x1e(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0xb(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xc(%rcx),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %al,-0x1d(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0xe(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xf(%rcx),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %al,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0x11(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x12(%rcx),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %al,-0x1b(%rbp)
lea    -0x20(%rbp),%rdi
call   1060 <timegm@plt>
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<strtimetosint64>:
push   %r14
push   %rbx
sub    $0x18,%rsp
mov    %rdi,%rbx
mov    (%rdi),%al
lea    -0x31(%rax),%ecx
cmp    $0x2,%cl
jae    1309 <strtimetosint64+0x1c9>
movzbl 0x1(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
movzbl 0x2(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
movzbl 0x3(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
cmpb   $0x2d,0x4(%rbx)
jne    1357 <strtimetosint64+0x217>
movzbl 0x5(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
movzbl 0x6(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
cmpb   $0x2d,0x7(%rbx)
jne    1357 <strtimetosint64+0x217>
movzbl 0x8(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
movzbl 0x9(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
cmpb   $0x54,0xa(%rbx)
jne    1357 <strtimetosint64+0x217>
movzbl 0xb(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
movzbl 0xc(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
cmpb   $0x3a,0xd(%rbx)
jne    1357 <strtimetosint64+0x217>
movzbl 0xe(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
movzbl 0xf(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
cmpb   $0x3a,0x10(%rbx)
jne    1357 <strtimetosint64+0x217>
movzbl 0x11(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
movzbl 0x12(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
cmpb   $0x5a,0x13(%rbx)
jne    1357 <strtimetosint64+0x217>
movq   $0x0,0x10(%rsp)
movzbl (%rbx),%eax
shl    $0x3,%eax
lea    (%rax,%rax,2),%eax
neg    %eax
movzbl 0x1(%rbx),%ecx
imul   $0x64,%ecx,%ecx
movzbl 0x2(%rbx),%edx
add    %edx,%edx
lea    (%rdx,%rdx,4),%edx
add    %al,%cl
add    %dl,%cl
add    0x3(%rbx),%cl
add    $0x44,%cl
mov    %cl,0x8(%rsp)
movzbl 0x5(%rbx),%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
add    0x6(%rbx),%al
add    $0xef,%al
mov    %al,0x9(%rsp)
movzbl 0x8(%rbx),%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
add    0x9(%rbx),%al
add    $0xf0,%al
mov    %al,0xa(%rsp)
movzbl 0xb(%rbx),%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
add    0xc(%rbx),%al
add    $0xf0,%al
mov    %al,0xb(%rsp)
movzbl 0xe(%rbx),%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
add    0xf(%rbx),%al
add    $0xf0,%al
mov    %al,0xc(%rsp)
movzbl 0x11(%rbx),%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
add    0x12(%rbx),%al
add    $0xf0,%al
mov    %al,0xd(%rsp)
lea    0x8(%rsp),%rdi
call   1060 <timegm@plt>
jmp    1359 <strtimetosint64+0x219>
cmp    $0x4e,%al
jne    1357 <strtimetosint64+0x217>
cmpb   $0x4f,0x1(%rbx)
jne    1357 <strtimetosint64+0x217>
cmpb   $0x57,0x2(%rbx)
jne    1357 <strtimetosint64+0x217>
mov    0x3(%rbx),%al
cmp    $0x2d,%al
je     1324 <strtimetosint64+0x1e4>
cmp    $0x2b,%al
jne    1357 <strtimetosint64+0x217>
movzbl 0x4(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1357 <strtimetosint64+0x217>
lea    0x3(%rbx),%rax
add    $0x4,%rbx
cmpb   $0x2b,(%rax)
cmovne %rax,%rbx
xor    %edi,%edi
call   1050 <time@plt>
mov    %rax,%r14
mov    %rbx,%rdi
call   1040 <strtosint64@plt>
add    %r14,%rax
jmp    1359 <strtimetosint64+0x219>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r14
ret

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

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