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

/* Forward declarations */

/* Type definitions */
struct tm {
  int tm_isdst;
  int tm_year;
  int tm_mon;
  int tm_mday;
  int tm_hour;
  int tm_min;
  int tm_sec;
};

/* Variables and functions */
int /*<<< orphan*/ memset(struct tm *, int /*<<< orphan*/, int);
scalar_t__ strcmp(char *, char *);
int strlen(char *);
int Decode_ecma119_format(struct tm *erg, char *text, int flag) {
  int i, l, num, utc = 1;
  memset(erg, 0, sizeof(*erg));
  erg->tm_isdst = -1;
  l = strlen(text);
  if (l == 19) {
    if (strcmp(text + 16, "LOC") != 0)
      return (0);
    utc = 0;
    l = 16;
  }
  if (l != 16)
    return (0);
  for (i = 0; i < l; i++)
    if (text[i] < '0' || text[i] > '9')
      return (0);
  num = 0;
  for (i = 0; i < 4; i++)
    num = num * 10 + text[i] - '0';
  if (num < 1970 || num > 3000)
    return (0);
  erg->tm_year = num - 1900;
  erg->tm_mon = 10 * (text[4] - '0') + text[5] - '0' - 1;
  if (erg->tm_mon > 12)
    return (0);
  erg->tm_mday = 10 * (text[6] - '0') + text[7] - '0';
  if (erg->tm_mday > 31)
    return (0);
  erg->tm_hour = 10 * (text[8] - '0') + text[9] - '0';
  if (erg->tm_hour > 23)
    return (0);
  erg->tm_min = 10 * (text[10] - '0') + text[11] - '0';
  if (erg->tm_min > 59)
    return (0);
  erg->tm_sec = 10 * (text[12] - '0') + text[13] - '0';
  if (erg->tm_sec > 59)
    return (0);
  return (1 + !utc);
}


x86 assembly (clang, -O0):
<Decode_ecma119_format>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
mov    $0x1c,%edx
call   1040 <memset@plt>
mov    -0x10(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    -0x18(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x24(%rbp)
cmpl   $0x13,-0x24(%rbp)
jne    11b2 <Decode_ecma119_format+0x82>
mov    -0x18(%rbp),%rdi
add    $0x10,%rdi
lea    0xe77(%rip),%rsi
call   1050 <strcmp@plt>
cmp    $0x0,%rax
je     11a4 <Decode_ecma119_format+0x74>
movl   $0x0,-0x4(%rbp)
jmp    13db <Decode_ecma119_format+0x2ab>
movl   $0x0,-0x2c(%rbp)
movl   $0x10,-0x24(%rbp)
cmpl   $0x10,-0x24(%rbp)
je     11c8 <Decode_ecma119_format+0x98>
movl   $0x0,-0x4(%rbp)
jmp    13db <Decode_ecma119_format+0x2ab>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1224 <Decode_ecma119_format+0xf4>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1205 <Decode_ecma119_format+0xd5>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1211 <Decode_ecma119_format+0xe1>
movl   $0x0,-0x4(%rbp)
jmp    13db <Decode_ecma119_format+0x2ab>
jmp    1216 <Decode_ecma119_format+0xe6>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11cf <Decode_ecma119_format+0x9f>
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x20(%rbp)
cmpl   $0x4,-0x20(%rbp)
jge    1262 <Decode_ecma119_format+0x132>
imul   $0xa,-0x28(%rbp),%eax
mov    -0x18(%rbp),%rcx
movslq -0x20(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1232 <Decode_ecma119_format+0x102>
cmpl   $0x7b2,-0x28(%rbp)
jl     127c <Decode_ecma119_format+0x14c>
cmpl   $0xbb8,-0x28(%rbp)
jle    1288 <Decode_ecma119_format+0x158>
movl   $0x0,-0x4(%rbp)
jmp    13db <Decode_ecma119_format+0x2ab>
mov    -0x28(%rbp),%ecx
sub    $0x76c,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%ecx
mov    -0x18(%rbp),%rax
movsbl 0x5(%rax),%eax
add    %eax,%ecx
sub    $0x30,%ecx
sub    $0x1,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0xc,0x8(%rax)
jle    12d7 <Decode_ecma119_format+0x1a7>
movl   $0x0,-0x4(%rbp)
jmp    13db <Decode_ecma119_format+0x2ab>
mov    -0x18(%rbp),%rax
movsbl 0x6(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%ecx
mov    -0x18(%rbp),%rax
movsbl 0x7(%rax),%eax
add    %eax,%ecx
sub    $0x30,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0x1f,0xc(%rax)
jle    1313 <Decode_ecma119_format+0x1e3>
movl   $0x0,-0x4(%rbp)
jmp    13db <Decode_ecma119_format+0x2ab>
mov    -0x18(%rbp),%rax
movsbl 0x8(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%ecx
mov    -0x18(%rbp),%rax
movsbl 0x9(%rax),%eax
add    %eax,%ecx
sub    $0x30,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0x17,0x10(%rax)
jle    134f <Decode_ecma119_format+0x21f>
movl   $0x0,-0x4(%rbp)
jmp    13db <Decode_ecma119_format+0x2ab>
mov    -0x18(%rbp),%rax
movsbl 0xa(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%ecx
mov    -0x18(%rbp),%rax
movsbl 0xb(%rax),%eax
add    %eax,%ecx
sub    $0x30,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x14(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0x3b,0x14(%rax)
jle    138b <Decode_ecma119_format+0x25b>
movl   $0x0,-0x4(%rbp)
jmp    13db <Decode_ecma119_format+0x2ab>
mov    -0x18(%rbp),%rax
movsbl 0xc(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%ecx
mov    -0x18(%rbp),%rax
movsbl 0xd(%rax),%eax
add    %eax,%ecx
sub    $0x30,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x18(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0x3b,0x18(%rax)
jle    13c7 <Decode_ecma119_format+0x297>
movl   $0x0,-0x4(%rbp)
jmp    13db <Decode_ecma119_format+0x2ab>
cmpl   $0x0,-0x2c(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Decode_ecma119_format>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %rsi,%rbp
mov    %rdi,%rbx
xor    %r14d,%r14d
xor    %esi,%esi
mov    $0x1c,%edx
call   1040 <memset@plt>
movl   $0xffffffff,(%rbx)
mov    %rbp,%rdi
call   1030 <strlen@plt>
mov    %eax,%r15d
cmp    $0x13,%eax
jne    117d <Decode_ecma119_format+0x4d>
lea    0x10(%rbp),%rdi
lea    0xe93(%rip),%rsi
call   1050 <strcmp@plt>
test   %rax,%rax
jne    137e <Decode_ecma119_format+0x24e>
jmp    1187 <Decode_ecma119_format+0x57>
cmp    $0x10,%r15d
jne    137e <Decode_ecma119_format+0x24e>
movzbl 0x0(%rbp),%eax
lea    -0x3a(%rax),%ecx
cmp    $0xf6,%cl
jb     137e <Decode_ecma119_format+0x24e>
movzbl 0x1(%rbp),%ecx
lea    -0x3a(%rcx),%edx
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
movzbl 0x2(%rbp),%r8d
lea    -0x3a(%r8),%esi
cmp    $0xf6,%sil
jb     137e <Decode_ecma119_format+0x24e>
movzbl 0x3(%rbp),%esi
lea    -0x3a(%rsi),%edi
cmp    $0xf6,%dil
jb     137e <Decode_ecma119_format+0x24e>
mov    0x4(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0x5(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0x6(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0x7(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0x8(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0x9(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0xa(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0xb(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0xc(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0xd(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0xe(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
mov    0xf(%rbp),%dl
add    $0xc6,%dl
cmp    $0xf6,%dl
jb     137e <Decode_ecma119_format+0x24e>
lea    (%rax,%rax,4),%eax
lea    (%rcx,%rax,2),%eax
lea    (%rax,%rax,4),%eax
lea    (%r8,%rax,2),%eax
lea    (%rax,%rax,4),%eax
lea    (%rsi,%rax,2),%ecx
add    $0xffff23f7,%ecx
cmp    $0xfffffbf9,%ecx
jb     137e <Decode_ecma119_format+0x24e>
lea    (%rsi,%rax,2),%eax
add    $0xffff2fb0,%eax
add    $0xfffff894,%eax
mov    %eax,0x4(%rbx)
movsbl 0x4(%rbp),%eax
lea    (%rax,%rax,4),%eax
movsbl 0x5(%rbp),%ecx
lea    (%rcx,%rax,2),%edx
add    $0xfffffe20,%edx
lea    (%rcx,%rax,2),%eax
add    $0xfffffdef,%eax
mov    %eax,0x8(%rbx)
cmp    $0x3d,%edx
jg     137e <Decode_ecma119_format+0x24e>
movsbl 0x6(%rbp),%eax
lea    (%rax,%rax,4),%eax
movsbl 0x7(%rbp),%ecx
lea    (%rcx,%rax,2),%edx
add    $0xfffffe20,%edx
lea    (%rcx,%rax,2),%eax
add    $0xfffffdf0,%eax
mov    %eax,0xc(%rbx)
cmp    $0x4f,%edx
jg     137e <Decode_ecma119_format+0x24e>
movsbl 0x8(%rbp),%eax
lea    (%rax,%rax,4),%eax
movsbl 0x9(%rbp),%ecx
lea    (%rcx,%rax,2),%edx
add    $0xfffffe20,%edx
lea    (%rcx,%rax,2),%eax
add    $0xfffffdf0,%eax
mov    %eax,0x10(%rbx)
cmp    $0x47,%edx
jg     137e <Decode_ecma119_format+0x24e>
movsbl 0xa(%rbp),%eax
lea    (%rax,%rax,4),%eax
movsbl 0xb(%rbp),%ecx
lea    (%rcx,%rax,2),%edx
add    $0xfffffe20,%edx
lea    (%rcx,%rax,2),%eax
add    $0xfffffdf0,%eax
mov    %eax,0x14(%rbx)
cmp    $0x6b,%edx
jg     137e <Decode_ecma119_format+0x24e>
xor    %eax,%eax
cmp    $0x13,%r15d
sete   %al
movsbl 0xc(%rbp),%ecx
lea    (%rcx,%rcx,4),%ecx
movsbl 0xd(%rbp),%edx
lea    (%rdx,%rcx,2),%esi
add    $0xfffffe20,%esi
lea    (%rdx,%rcx,2),%ecx
add    $0xfffffdf0,%ecx
mov    %ecx,0x18(%rbx)
add    $0x1,%eax
xor    %r14d,%r14d
cmp    $0x6c,%esi
cmovl  %eax,%r14d
mov    %r14d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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