#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 int /*<<< orphan*/ int64_t;

/* Variables and functions */
int /*<<< orphan*/ isdigit(unsigned char);
int /*<<< orphan*/ timegm(struct tm *);
int64_t pb__strtimetosint64(const char *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):
<pb__strtimetosint64>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x31,%eax
je     114c <pb__strtimetosint64+0x2c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x32,%eax
jne    12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0x2(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0x3(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x2d,%eax
jne    12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0x5(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0x6(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x2d,%eax
jne    12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0x8(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0x9(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movsbl 0xa(%rax),%eax
cmp    $0x54,%eax
jne    12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0xb(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0xc(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movsbl 0xd(%rax),%eax
cmp    $0x3a,%eax
jne    12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0xe(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0xf(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movsbl 0x10(%rax),%eax
cmp    $0x3a,%eax
jne    12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0x11(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movzbl 0x12(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12d0 <pb__strtimetosint64+0x1b0>
mov    -0x10(%rbp),%rax
movsbl 0x13(%rax),%eax
cmp    $0x5a,%eax
je     12dc <pb__strtimetosint64+0x1bc>
movl   $0x0,-0x4(%rbp)
jmp    13ce <pb__strtimetosint64+0x2ae>
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   1040 <timegm@plt>
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pb__strtimetosint64>:
push   %rbp
push   %rbx
sub    $0x18,%rsp
mov    (%rdi),%al
add    $0xcf,%al
xor    %ebp,%ebp
cmp    $0x1,%al
ja     12e8 <pb__strtimetosint64+0x1c8>
mov    %rdi,%rbx
movzbl 0x1(%rdi),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
movzbl 0x2(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
movzbl 0x3(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
cmpb   $0x2d,0x4(%rbx)
jne    12e8 <pb__strtimetosint64+0x1c8>
movzbl 0x5(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
movzbl 0x6(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
cmpb   $0x2d,0x7(%rbx)
jne    12e8 <pb__strtimetosint64+0x1c8>
movzbl 0x8(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
movzbl 0x9(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
cmpb   $0x54,0xa(%rbx)
jne    12e8 <pb__strtimetosint64+0x1c8>
movzbl 0xb(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
movzbl 0xc(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
cmpb   $0x3a,0xd(%rbx)
jne    12e8 <pb__strtimetosint64+0x1c8>
movzbl 0xe(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
movzbl 0xf(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
cmpb   $0x3a,0x10(%rbx)
jne    12e8 <pb__strtimetosint64+0x1c8>
movzbl 0x11(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
movzbl 0x12(%rbx),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12e8 <pb__strtimetosint64+0x1c8>
cmpb   $0x5a,0x13(%rbx)
jne    12e8 <pb__strtimetosint64+0x1c8>
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   1040 <timegm@plt>
mov    %eax,%ebp
mov    %ebp,%eax
add    $0x18,%rsp
pop    %rbx
pop    %rbp
ret

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

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