#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int x;
struct tm {
  int tm_sec;
  int tm_hour;
  int tm_min;
};
typedef int c;

/* Variables and functions */
int parsetime(char *ptime, struct tm *tm) {
  register char c;
  register int x;
  tm->tm_sec = 0;
  (c) = *(ptime)++;
  if ((c) < '0' || (c) > '9')
    return -1;
  (x) = (c) - '0';
  (c) = *(ptime)++;
  if ((c) >= '0' && (c) <= '9') {
    (x) = 10 * (x) + (c) - '0';
    (c) = *(ptime)++;
  }
  if ((c) != ':' && (c) != '\0' && !((c) == ' ' || (c) == '\n' || (c) == '\t'))
    return -1;
  *(&tm->tm_hour) = (x);
  if (c != ':')
    return -1;
  (c) = *(ptime)++;
  if ((c) < '0' || (c) > '9')
    return -1;
  (x) = (c) - '0';
  (c) = *(ptime)++;
  if ((c) >= '0' && (c) <= '9') {
    (x) = 10 * (x) + (c) - '0';
    (c) = *(ptime)++;
  }
  if ((c) != ':' && (c) != '\0' && !((c) == ' ' || (c) == '\n' || (c) == '\t'))
    return -1;
  *(&tm->tm_min) = (x);
  if (c != ':')
    return 0;
  (c) = *(ptime)++;
  if ((c) < '0' || (c) > '9')
    return -1;
  (x) = (c) - '0';
  (c) = *(ptime)++;
  if ((c) >= '0' && (c) <= '9') {
    (x) = 10 * (x) + (c) - '0';
    (c) = *(ptime)++;
  }
  if ((c) != ':' && (c) != '\0' && !((c) == ' ' || (c) == '\n' || (c) == '\t'))
    return -1;
  *(&tm->tm_sec) = (x);
  return (c == '\0' || ((c) == ' ' || (c) == '\n' || (c) == '\t') ? 0 : -1);
}


x86 assembly (clang, -O0):
<parsetime>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     1144 <parsetime+0x44>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jle    1150 <parsetime+0x50>
movl   $0xffffffff,-0x4(%rbp)
jmp    146a <parsetime+0x36a>
movsbl -0x19(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     11ac <parsetime+0xac>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jg     11ac <parsetime+0xac>
imul   $0xa,-0x20(%rbp),%eax
movsbl -0x19(%rbp),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x3a,%eax
je     11f9 <parsetime+0xf9>
movsbl -0x19(%rbp),%eax
cmp    $0x0,%eax
je     11f9 <parsetime+0xf9>
movsbl -0x19(%rbp),%eax
cmp    $0x20,%eax
je     11f9 <parsetime+0xf9>
movsbl -0x19(%rbp),%eax
cmp    $0xa,%eax
je     11f9 <parsetime+0xf9>
movsbl -0x19(%rbp),%eax
cmp    $0x9,%eax
je     11f9 <parsetime+0xf9>
movl   $0xffffffff,-0x4(%rbp)
jmp    146a <parsetime+0x36a>
mov    -0x20(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x4(%rax)
movsbl -0x19(%rbp),%eax
cmp    $0x3a,%eax
je     121c <parsetime+0x11c>
movl   $0xffffffff,-0x4(%rbp)
jmp    146a <parsetime+0x36a>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     124a <parsetime+0x14a>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jle    1256 <parsetime+0x156>
movl   $0xffffffff,-0x4(%rbp)
jmp    146a <parsetime+0x36a>
movsbl -0x19(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     12b2 <parsetime+0x1b2>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jg     12b2 <parsetime+0x1b2>
imul   $0xa,-0x20(%rbp),%eax
movsbl -0x19(%rbp),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x3a,%eax
je     12ff <parsetime+0x1ff>
movsbl -0x19(%rbp),%eax
cmp    $0x0,%eax
je     12ff <parsetime+0x1ff>
movsbl -0x19(%rbp),%eax
cmp    $0x20,%eax
je     12ff <parsetime+0x1ff>
movsbl -0x19(%rbp),%eax
cmp    $0xa,%eax
je     12ff <parsetime+0x1ff>
movsbl -0x19(%rbp),%eax
cmp    $0x9,%eax
je     12ff <parsetime+0x1ff>
movl   $0xffffffff,-0x4(%rbp)
jmp    146a <parsetime+0x36a>
mov    -0x20(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x8(%rax)
movsbl -0x19(%rbp),%eax
cmp    $0x3a,%eax
je     1322 <parsetime+0x222>
movl   $0x0,-0x4(%rbp)
jmp    146a <parsetime+0x36a>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     1350 <parsetime+0x250>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jle    135c <parsetime+0x25c>
movl   $0xffffffff,-0x4(%rbp)
jmp    146a <parsetime+0x36a>
movsbl -0x19(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     13b8 <parsetime+0x2b8>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jg     13b8 <parsetime+0x2b8>
imul   $0xa,-0x20(%rbp),%eax
movsbl -0x19(%rbp),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x3a,%eax
je     1405 <parsetime+0x305>
movsbl -0x19(%rbp),%eax
cmp    $0x0,%eax
je     1405 <parsetime+0x305>
movsbl -0x19(%rbp),%eax
cmp    $0x20,%eax
je     1405 <parsetime+0x305>
movsbl -0x19(%rbp),%eax
cmp    $0xa,%eax
je     1405 <parsetime+0x305>
movsbl -0x19(%rbp),%eax
cmp    $0x9,%eax
je     1405 <parsetime+0x305>
movl   $0xffffffff,-0x4(%rbp)
jmp    146a <parsetime+0x36a>
mov    -0x20(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
movsbl -0x19(%rbp),%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x21(%rbp)
je     1457 <parsetime+0x357>
movsbl -0x19(%rbp),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x22(%rbp)
je     1451 <parsetime+0x351>
movsbl -0x19(%rbp),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x22(%rbp)
je     1451 <parsetime+0x351>
movsbl -0x19(%rbp),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x22(%rbp)
mov    -0x22(%rbp),%al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%dl
mov    $0xffffffff,%eax
xor    %ecx,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<parsetime>:
movl   $0x0,(%rsi)
movzbl (%rdi),%r8d
lea    -0x3a(%r8),%edx
mov    $0xffffffff,%eax
cmp    $0xf6,%dl
jb     1186 <parsetime+0x86>
add    $0xffffffd0,%r8d
mov    0x1(%rdi),%dl
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     113f <parsetime+0x3f>
movzbl %dl,%ecx
lea    (%r8,%r8,4),%edx
lea    (%rcx,%rdx,2),%r8d
add    $0xffffffd0,%r8d
mov    0x2(%rdi),%dl
add    $0x3,%rdi
jmp    1143 <parsetime+0x43>
add    $0x2,%rdi
cmp    $0x3a,%dl
setne  %r9b
test   %dl,%dl
setne  %cl
and    %r9b,%cl
cmp    $0x1,%cl
jne    1170 <parsetime+0x70>
cmp    $0x20,%dl
ja     1186 <parsetime+0x86>
movzbl %dl,%r9d
movabs $0x100000600,%rcx
bt     %r9,%rcx
jae    1186 <parsetime+0x86>
mov    %r8d,0x4(%rsi)
cmp    $0x3a,%dl
jne    1186 <parsetime+0x86>
movzbl (%rdi),%r8d
lea    -0x3a(%r8),%edx
cmp    $0xf6,%dl
jae    1187 <parsetime+0x87>
ret
add    $0xffffffd0,%r8d
mov    0x1(%rdi),%dl
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     11ae <parsetime+0xae>
movzbl %dl,%ecx
lea    (%r8,%r8,4),%edx
lea    (%rcx,%rdx,2),%r8d
add    $0xffffffd0,%r8d
mov    0x2(%rdi),%dl
add    $0x3,%rdi
jmp    11b2 <parsetime+0xb2>
add    $0x2,%rdi
cmp    $0x3a,%dl
setne  %r9b
test   %dl,%dl
setne  %cl
and    %r9b,%cl
cmp    $0x1,%cl
jne    11df <parsetime+0xdf>
cmp    $0x20,%dl
ja     1186 <parsetime+0x86>
movzbl %dl,%r9d
movabs $0x100000600,%rcx
bt     %r9,%rcx
jae    1186 <parsetime+0x86>
mov    %r8d,0x8(%rsi)
cmp    $0x3a,%dl
je     11eb <parsetime+0xeb>
xor    %eax,%eax
ret
movzbl (%rdi),%ecx
lea    -0x3a(%rcx),%edx
cmp    $0xf6,%dl
jb     1186 <parsetime+0x86>
add    $0xffffffd0,%ecx
mov    0x1(%rdi),%r8b
lea    -0x30(%r8),%edx
cmp    $0x9,%dl
ja     1217 <parsetime+0x117>
movzbl %r8b,%edx
lea    (%rcx,%rcx,4),%ecx
lea    (%rdx,%rcx,2),%ecx
add    $0xffffffd0,%ecx
mov    0x2(%rdi),%r8b
cmp    $0x3a,%r8b
ja     1186 <parsetime+0x86>
movzbl %r8b,%edi
movabs $0x400000100000601,%rdx
bt     %rdi,%rdx
jae    1186 <parsetime+0x86>
mov    %ecx,(%rsi)
cmp    $0x20,%r8b
ja     125a <parsetime+0x15a>
movabs $0x100000401,%rax
bt     %rdi,%rax
mov    $0x0,%eax
jb     1186 <parsetime+0x86>
xor    %eax,%eax
cmp    $0x9,%r8b
setne  %al
neg    %eax
ret

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

LLVM IR (-O2):
%struct.tm = type { i32, i32, i32 }
define i32 @parsetime(i8* nocapture %0, %struct.tm* nocapture writeonly %1) {
%3 = getelementptr inbounds %struct.tm, %struct.tm* %1, i64 0, i32 0
store i32 0, i32* %3
%4 = load i8, i8* %0
%5 = add i8 %4, -58
%6 = icmp ult i8 %5, -10
br i1 %6, label %88, label %7
7: ; preds = %2
%8 = getelementptr inbounds i8, i8* %0, i64 1
%9 = zext i8 %4 to i32
%10 = add nsw i32 %9, -48
%11 = getelementptr inbounds i8, i8* %0, i64 2
%12 = load i8, i8* %8
%13 = add i8 %12, -48
%14 = icmp ult i8 %13, 10
br i1 %14, label %15, label %22
15: ; preds = %7
%16 = zext i8 %12 to i32
%17 = mul nuw nsw i32 %10, 10
%18 = add nsw i32 %17, -48
%19 = add nsw i32 %18, %16
%20 = getelementptr inbounds i8, i8* %0, i64 3
%21 = load i8, i8* %11
br label %22
22: ; preds = %15, %7
%23 = phi i8* [ %20, %15 ], [ %11, %7 ]
%24 = phi i8 [ %21, %15 ], [ %12, %7 ]
%25 = phi i32 [ %19, %15 ], [ %10, %7 ]
%26 = icmp ne i8 %24, 58
%27 = icmp ne i8 %24, 0
%28 = and i1 %26, %27
%29 = freeze i1 %28
br i1 %29, label %30, label %31
30: ; preds = %22
switch i8 %24, label %88 [
i8 32, label %31
i8 10, label %31
i8 9, label %31
]
31: ; preds = %30, %30, %30, %22
%32 = getelementptr inbounds %struct.tm, %struct.tm* %1, i64 0, i32 1
store i32 %25, i32* %32
br i1 %26, label %88, label %33
33: ; preds = %31
%34 = load i8, i8* %23
%35 = add i8 %34, -58
%36 = icmp ult i8 %35, -10
br i1 %36, label %88, label %37
37: ; preds = %33
%38 = getelementptr inbounds i8, i8* %23, i64 1
%39 = zext i8 %34 to i32
%40 = add nsw i32 %39, -48
%41 = getelementptr inbounds i8, i8* %23, i64 2
%42 = load i8, i8* %38
%43 = add i8 %42, -48
%44 = icmp ult i8 %43, 10
br i1 %44, label %45, label %52
45: ; preds = %37
%46 = zext i8 %42 to i32
%47 = mul nuw nsw i32 %40, 10
%48 = add nsw i32 %47, -48
%49 = add nsw i32 %48, %46
%50 = getelementptr inbounds i8, i8* %23, i64 3
%51 = load i8, i8* %41
br label %52
52: ; preds = %45, %37
%53 = phi i8* [ %50, %45 ], [ %41, %37 ]
%54 = phi i8 [ %51, %45 ], [ %42, %37 ]
%55 = phi i32 [ %49, %45 ], [ %40, %37 ]
%56 = icmp ne i8 %54, 58
%57 = icmp ne i8 %54, 0
%58 = and i1 %56, %57
%59 = freeze i1 %58
br i1 %59, label %60, label %61
60: ; preds = %52
switch i8 %54, label %88 [
i8 32, label %61
i8 10, label %61
i8 9, label %61
]
61: ; preds = %60, %60, %60, %52
%62 = getelementptr inbounds %struct.tm, %struct.tm* %1, i64 0, i32 2
store i32 %55, i32* %62
br i1 %56, label %88, label %63
63: ; preds = %61
%64 = load i8, i8* %53
%65 = add i8 %64, -58
%66 = icmp ult i8 %65, -10
br i1 %66, label %88, label %67
67: ; preds = %63
%68 = getelementptr inbounds i8, i8* %53, i64 1
%69 = zext i8 %64 to i32
%70 = add nsw i32 %69, -48
%71 = load i8, i8* %68
%72 = add i8 %71, -48
%73 = icmp ult i8 %72, 10
br i1 %73, label %74, label %81
74: ; preds = %67
%75 = zext i8 %71 to i32
%76 = getelementptr inbounds i8, i8* %53, i64 2
%77 = mul nuw nsw i32 %70, 10
%78 = add nsw i32 %77, -48
%79 = add nsw i32 %78, %75
%80 = load i8, i8* %76
br label %81
81: ; preds = %74, %67
%82 = phi i8 [ %80, %74 ], [ %71, %67 ]
%83 = phi i32 [ %79, %74 ], [ %70, %67 ]
%84 = icmp ne i8 %82, 9
switch i8 %82, label %88 [
i8 58, label %85
i8 32, label %85
i8 10, label %85
i8 9, label %85
i8 0, label %85
]
85: ; preds = %81, %81, %81, %81, %81
store i32 %83, i32* %3
switch i8 %82, label %86 [
i8 0, label %88
i8 32, label %88
i8 10, label %88
]
86: ; preds = %85
%87 = sext i1 %84 to i32
br label %88
88: ; preds = %85, %85, %85, %86, %81, %63, %61, %60, %33, %31, %30, %2
%89 = phi i32 [ -1, %2 ], [ -1, %30 ], [ -1, %31 ], [ -1, %33 ], [ -1, %60 ], [ 0, %61 ], [ -1, %63 ], [ -1, %81 ], [ 0, %85 ], [ %87, %86 ], [ 0, %85 ], [ 0, %85 ]
ret i32 %89
}