int read_mac(char *str, char *addr) {
  int i;
  for (i = 0; i < 6; i++) {
    if (!*str || !*(str + 1) || (i < 5 && *(str + 2) != ':'))
      return -1;
    *addr =
        ((*str) >= '0' && (*str) <= '9'   ? (*str) - '0'
         : (*str) >= 'a' && (*str) <= 'f' ? (*str) - 'a' + 10
         : (*str) >= 'A' && (*str) <= 'F' ? (*str) - 'A' + 10
                                          : 0)
            << 4 |
        ((*(str + 1)) >= '0' && (*(str + 1)) <= '9'   ? (*(str + 1)) - '0'
         : (*(str + 1)) >= 'a' && (*(str + 1)) <= 'f' ? (*(str + 1)) - 'a' + 10
         : (*(str + 1)) >= 'A' && (*(str + 1)) <= 'F' ? (*(str + 1)) - 'A' + 10
                                                      : 0);
    str += 2;
    if (i < 5)
      str++;
    addr++;
  }
  return 0;
}


x86 assembly (clang, -O0):
<read_mac>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x6,-0x1c(%rbp)
jge    1321 <read_mac+0x221>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     1153 <read_mac+0x53>
mov    -0x10(%rbp),%rax
cmpb   $0x0,0x1(%rax)
je     1153 <read_mac+0x53>
cmpl   $0x5,-0x1c(%rbp)
jge    115f <read_mac+0x5f>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x3a,%eax
je     115f <read_mac+0x5f>
movl   $0xffffffff,-0x4(%rbp)
jmp    1328 <read_mac+0x228>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     1191 <read_mac+0x91>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     1191 <read_mac+0x91>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
jmp    1211 <read_mac+0x111>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     11c6 <read_mac+0xc6>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jg     11c6 <read_mac+0xc6>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x24(%rbp)
jmp    120b <read_mac+0x10b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     11fb <read_mac+0xfb>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
jg     11fb <read_mac+0xfb>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x28(%rbp)
jmp    1205 <read_mac+0x105>
xor    %eax,%eax
mov    %eax,-0x28(%rbp)
jmp    1205 <read_mac+0x105>
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x30,%eax
jl     124f <read_mac+0x14f>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x39,%eax
jg     124f <read_mac+0x14f>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x30(%rbp)
jmp    12d5 <read_mac+0x1d5>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x61,%eax
jl     1287 <read_mac+0x187>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x66,%eax
jg     1287 <read_mac+0x187>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x34(%rbp)
jmp    12cf <read_mac+0x1cf>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x41,%eax
jl     12bf <read_mac+0x1bf>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x46,%eax
jg     12bf <read_mac+0x1bf>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x38(%rbp)
jmp    12c9 <read_mac+0x1c9>
xor    %eax,%eax
mov    %eax,-0x38(%rbp)
jmp    12c9 <read_mac+0x1c9>
mov    -0x38(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x30(%rbp),%ecx
or     %ecx,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x10(%rbp)
cmpl   $0x5,-0x1c(%rbp)
jge    1307 <read_mac+0x207>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1113 <read_mac+0x13>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<read_mac>:
mov    (%rdi),%dl
mov    $0xffffffff,%eax
test   %dl,%dl
je     141f <read_mac+0x31f>
mov    0x1(%rdi),%r9b
test   %r9b,%r9b
je     141f <read_mac+0x31f>
cmpb   $0x3a,0x2(%rdi)
jne    141f <read_mac+0x31f>
lea    -0x30(%rdx),%r8d
cmp    $0xa,%r8b
jb     1154 <read_mac+0x54>
lea    -0x61(%rdx),%ecx
cmp    $0x5,%cl
ja     1140 <read_mac+0x40>
add    $0xa9,%dl
mov    %edx,%r8d
jmp    1154 <read_mac+0x54>
lea    -0x41(%rdx),%ecx
add    $0xc9,%dl
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %dl,%r8d
cmovae %r10d,%r8d
shl    $0x4,%r8b
lea    -0x30(%r9),%edx
cmp    $0xa,%dl
jb     1189 <read_mac+0x89>
lea    -0x61(%r9),%ecx
cmp    $0x5,%cl
ja     1173 <read_mac+0x73>
add    $0xa9,%r9b
mov    %r9d,%edx
jmp    1189 <read_mac+0x89>
lea    -0x41(%r9),%ecx
add    $0xc9,%r9b
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %r9b,%edx
cmovae %r10d,%edx
or     %r8b,%dl
mov    %dl,(%rsi)
mov    0x3(%rdi),%dl
test   %dl,%dl
je     141f <read_mac+0x31f>
mov    0x4(%rdi),%r9b
test   %r9b,%r9b
je     141f <read_mac+0x31f>
cmpb   $0x3a,0x5(%rdi)
jne    141f <read_mac+0x31f>
lea    -0x30(%rdx),%r8d
cmp    $0xa,%r8b
jb     11de <read_mac+0xde>
lea    -0x61(%rdx),%ecx
cmp    $0x6,%cl
jae    11ca <read_mac+0xca>
add    $0xa9,%dl
mov    %edx,%r8d
jmp    11de <read_mac+0xde>
lea    -0x41(%rdx),%ecx
add    $0xc9,%dl
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %dl,%r8d
cmovae %r10d,%r8d
shl    $0x4,%r8b
lea    -0x30(%r9),%edx
cmp    $0xa,%dl
jb     1213 <read_mac+0x113>
lea    -0x61(%r9),%ecx
cmp    $0x6,%cl
jae    11fd <read_mac+0xfd>
add    $0xa9,%r9b
mov    %r9d,%edx
jmp    1213 <read_mac+0x113>
lea    -0x41(%r9),%ecx
add    $0xc9,%r9b
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %r9b,%edx
cmovae %r10d,%edx
or     %r8b,%dl
mov    %dl,0x1(%rsi)
mov    0x6(%rdi),%dl
test   %dl,%dl
je     141f <read_mac+0x31f>
mov    0x7(%rdi),%r9b
test   %r9b,%r9b
je     141f <read_mac+0x31f>
cmpb   $0x3a,0x8(%rdi)
jne    141f <read_mac+0x31f>
lea    -0x30(%rdx),%r8d
cmp    $0xa,%r8b
jb     1269 <read_mac+0x169>
lea    -0x61(%rdx),%ecx
cmp    $0x6,%cl
jae    1255 <read_mac+0x155>
add    $0xa9,%dl
mov    %edx,%r8d
jmp    1269 <read_mac+0x169>
lea    -0x41(%rdx),%ecx
add    $0xc9,%dl
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %dl,%r8d
cmovae %r10d,%r8d
shl    $0x4,%r8b
lea    -0x30(%r9),%edx
cmp    $0xa,%dl
jb     129e <read_mac+0x19e>
lea    -0x61(%r9),%ecx
cmp    $0x6,%cl
jae    1288 <read_mac+0x188>
add    $0xa9,%r9b
mov    %r9d,%edx
jmp    129e <read_mac+0x19e>
lea    -0x41(%r9),%ecx
add    $0xc9,%r9b
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %r9b,%edx
cmovae %r10d,%edx
or     %r8b,%dl
mov    %dl,0x2(%rsi)
mov    0x9(%rdi),%dl
test   %dl,%dl
je     141f <read_mac+0x31f>
mov    0xa(%rdi),%r9b
test   %r9b,%r9b
je     141f <read_mac+0x31f>
cmpb   $0x3a,0xb(%rdi)
jne    141f <read_mac+0x31f>
lea    -0x30(%rdx),%r8d
cmp    $0xa,%r8b
jb     12f4 <read_mac+0x1f4>
lea    -0x61(%rdx),%ecx
cmp    $0x6,%cl
jae    12e0 <read_mac+0x1e0>
add    $0xa9,%dl
mov    %edx,%r8d
jmp    12f4 <read_mac+0x1f4>
lea    -0x41(%rdx),%ecx
add    $0xc9,%dl
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %dl,%r8d
cmovae %r10d,%r8d
shl    $0x4,%r8b
lea    -0x30(%r9),%edx
cmp    $0xa,%dl
jb     1329 <read_mac+0x229>
lea    -0x61(%r9),%ecx
cmp    $0x6,%cl
jae    1313 <read_mac+0x213>
add    $0xa9,%r9b
mov    %r9d,%edx
jmp    1329 <read_mac+0x229>
lea    -0x41(%r9),%ecx
add    $0xc9,%r9b
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %r9b,%edx
cmovae %r10d,%edx
or     %r8b,%dl
mov    %dl,0x3(%rsi)
mov    0xc(%rdi),%dl
test   %dl,%dl
je     141f <read_mac+0x31f>
mov    0xd(%rdi),%r9b
test   %r9b,%r9b
je     141f <read_mac+0x31f>
cmpb   $0x3a,0xe(%rdi)
jne    141f <read_mac+0x31f>
lea    -0x30(%rdx),%r8d
cmp    $0xa,%r8b
jb     137f <read_mac+0x27f>
lea    -0x61(%rdx),%ecx
cmp    $0x6,%cl
jae    136b <read_mac+0x26b>
add    $0xa9,%dl
mov    %edx,%r8d
jmp    137f <read_mac+0x27f>
lea    -0x41(%rdx),%ecx
add    $0xc9,%dl
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %dl,%r8d
cmovae %r10d,%r8d
shl    $0x4,%r8b
lea    -0x30(%r9),%edx
cmp    $0xa,%dl
jb     13b4 <read_mac+0x2b4>
lea    -0x61(%r9),%ecx
cmp    $0x6,%cl
jae    139e <read_mac+0x29e>
add    $0xa9,%r9b
mov    %r9d,%edx
jmp    13b4 <read_mac+0x2b4>
lea    -0x41(%r9),%ecx
add    $0xc9,%r9b
xor    %r10d,%r10d
cmp    $0x6,%cl
movzbl %r9b,%edx
cmovae %r10d,%edx
or     %r8b,%dl
mov    %dl,0x4(%rsi)
mov    0xf(%rdi),%dl
test   %dl,%dl
je     141f <read_mac+0x31f>
mov    0x10(%rdi),%cl
test   %cl,%cl
je     141f <read_mac+0x31f>
lea    -0x30(%rdx),%eax
cmp    $0xa,%al
jb     13ed <read_mac+0x2ed>
lea    -0x61(%rdx),%eax
cmp    $0x6,%al
jae    13dd <read_mac+0x2dd>
add    $0xa9,%dl
mov    %edx,%eax
jmp    13ed <read_mac+0x2ed>
lea    -0x41(%rdx),%eax
add    $0xc9,%dl
xor    %edi,%edi
cmp    $0x6,%al
movzbl %dl,%eax
cmovae %edi,%eax
shl    $0x4,%al
lea    -0x30(%rcx),%edx
cmp    $0xa,%dl
jb     1418 <read_mac+0x318>
lea    -0x61(%rcx),%edx
cmp    $0x6,%dl
jae    1407 <read_mac+0x307>
add    $0xa9,%cl
mov    %ecx,%edx
jmp    1418 <read_mac+0x318>
lea    -0x41(%rcx),%edx
add    $0xc9,%cl
xor    %edi,%edi
cmp    $0x6,%dl
movzbl %cl,%edx
cmovae %edi,%edx
or     %al,%dl
mov    %dl,0x5(%rsi)
xor    %eax,%eax
ret

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

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