unsigned int parse_hex4(const char *str) {
  unsigned int h = 0;
  if (*str >= '0' && *str <= '9') {
    h += (*str) - '0';
  } else if (*str >= 'A' && *str <= 'F') {
    h += 10 + (*str) - 'A';
  } else if (*str >= 'a' && *str <= 'f') {
    h += 10 + (*str) - 'a';
  } else {
    return 0;
  }
  h = h << 4;
  str++;
  if (*str >= '0' && *str <= '9') {
    h += (*str) - '0';
  } else if (*str >= 'A' && *str <= 'F') {
    h += 10 + (*str) - 'A';
  } else if (*str >= 'a' && *str <= 'f') {
    h += 10 + (*str) - 'a';
  } else {
    return 0;
  }
  h = h << 4;
  str++;
  if (*str >= '0' && *str <= '9') {
    h += (*str) - '0';
  } else if (*str >= 'A' && *str <= 'F') {
    h += 10 + (*str) - 'A';
  } else if (*str >= 'a' && *str <= 'f') {
    h += 10 + (*str) - 'a';
  } else {
    return 0;
  }
  h = h << 4;
  str++;
  if (*str >= '0' && *str <= '9') {
    h += (*str) - '0';
  } else if (*str >= 'A' && *str <= 'F') {
    h += 10 + (*str) - 'A';
  } else if (*str >= 'a' && *str <= 'f') {
    h += 10 + (*str) - 'a';
  } else {
    return 0;
  }
  return h;
}


x86 assembly (clang, -O0):
<parse_hex4>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     1144 <parse_hex4+0x44>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     1144 <parse_hex4+0x44>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    11ca <parse_hex4+0xca>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     117c <parse_hex4+0x7c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
jg     117c <parse_hex4+0x7c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
add    $0xa,%eax
sub    $0x41,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    11c5 <parse_hex4+0xc5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     11b4 <parse_hex4+0xb4>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jg     11b4 <parse_hex4+0xb4>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
add    $0xa,%eax
sub    $0x61,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    11c0 <parse_hex4+0xc0>
movl   $0x0,-0x4(%rbp)
jmp    1440 <parse_hex4+0x340>
jmp    11c5 <parse_hex4+0xc5>
jmp    11ca <parse_hex4+0xca>
mov    -0x14(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     1214 <parse_hex4+0x114>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     1214 <parse_hex4+0x114>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    129a <parse_hex4+0x19a>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     124c <parse_hex4+0x14c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
jg     124c <parse_hex4+0x14c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
add    $0xa,%eax
sub    $0x41,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1295 <parse_hex4+0x195>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     1284 <parse_hex4+0x184>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jg     1284 <parse_hex4+0x184>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
add    $0xa,%eax
sub    $0x61,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1290 <parse_hex4+0x190>
movl   $0x0,-0x4(%rbp)
jmp    1440 <parse_hex4+0x340>
jmp    1295 <parse_hex4+0x195>
jmp    129a <parse_hex4+0x19a>
mov    -0x14(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     12e4 <parse_hex4+0x1e4>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     12e4 <parse_hex4+0x1e4>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    136a <parse_hex4+0x26a>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     131c <parse_hex4+0x21c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
jg     131c <parse_hex4+0x21c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
add    $0xa,%eax
sub    $0x41,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1365 <parse_hex4+0x265>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     1354 <parse_hex4+0x254>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jg     1354 <parse_hex4+0x254>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
add    $0xa,%eax
sub    $0x61,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1360 <parse_hex4+0x260>
movl   $0x0,-0x4(%rbp)
jmp    1440 <parse_hex4+0x340>
jmp    1365 <parse_hex4+0x265>
jmp    136a <parse_hex4+0x26a>
mov    -0x14(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     13b4 <parse_hex4+0x2b4>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     13b4 <parse_hex4+0x2b4>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    143a <parse_hex4+0x33a>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     13ec <parse_hex4+0x2ec>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
jg     13ec <parse_hex4+0x2ec>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
add    $0xa,%eax
sub    $0x41,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1435 <parse_hex4+0x335>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     1424 <parse_hex4+0x324>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jg     1424 <parse_hex4+0x324>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
add    $0xa,%eax
sub    $0x61,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1430 <parse_hex4+0x330>
movl   $0x0,-0x4(%rbp)
jmp    1440 <parse_hex4+0x340>
jmp    1435 <parse_hex4+0x335>
jmp    143a <parse_hex4+0x33a>
mov    -0x14(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<parse_hex4>:
push   %rbx
movsbl (%rdi),%r8d
lea    -0x30(%r8),%eax
mov    $0xffffffd0,%edx
mov    $0xffffffd0,%r11d
cmp    $0xa,%al
jb     113b <parse_hex4+0x3b>
lea    -0x41(%r8),%eax
mov    $0xffffffc9,%r11d
cmp    $0x6,%al
jb     113b <parse_hex4+0x3b>
lea    -0x61(%r8),%ecx
xor    %eax,%eax
mov    $0xffffffa9,%r11d
cmp    $0x5,%cl
ja     11dd <parse_hex4+0xdd>
movsbl 0x1(%rdi),%r9d
lea    -0x30(%r9),%eax
cmp    $0xa,%al
jb     1165 <parse_hex4+0x65>
lea    -0x41(%r9),%eax
mov    $0xffffffc9,%edx
cmp    $0x6,%al
jb     1165 <parse_hex4+0x65>
lea    -0x61(%r9),%ecx
xor    %eax,%eax
mov    $0xffffffa9,%edx
cmp    $0x5,%cl
ja     11dd <parse_hex4+0xdd>
movsbl 0x2(%rdi),%r10d
lea    -0x30(%r10),%eax
mov    $0xffffffd0,%ecx
mov    $0xffffffd0,%esi
cmp    $0xa,%al
jb     1199 <parse_hex4+0x99>
lea    -0x41(%r10),%eax
mov    $0xffffffc9,%esi
cmp    $0x6,%al
jb     1199 <parse_hex4+0x99>
lea    -0x61(%r10),%ebx
xor    %eax,%eax
mov    $0xffffffa9,%esi
cmp    $0x5,%bl
ja     11dd <parse_hex4+0xdd>
movsbl 0x3(%rdi),%edi
lea    -0x30(%rdi),%eax
cmp    $0xa,%al
jb     11bf <parse_hex4+0xbf>
lea    -0x41(%rdi),%eax
mov    $0xffffffc9,%ecx
cmp    $0x6,%al
jb     11bf <parse_hex4+0xbf>
lea    -0x61(%rdi),%ebx
xor    %eax,%eax
mov    $0xffffffa9,%ecx
cmp    $0x5,%bl
ja     11dd <parse_hex4+0xdd>
add    %r8d,%r11d
shl    $0x4,%r11d
add    %r9d,%edx
add    %r11d,%edx
shl    $0x4,%edx
add    %r10d,%esi
add    %edx,%esi
shl    $0x4,%esi
add    %edi,%ecx
add    %esi,%ecx
mov    %ecx,%eax
pop    %rbx
ret

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

LLVM IR (-O2):
define i32 @parse_hex4(i8* nocapture %0) {
%2 = load i8, i8* %0
%3 = sext i8 %2 to i32
%4 = add i8 %2, -48
%5 = icmp ult i8 %4, 10
br i1 %5, label %12, label %6
6: ; preds = %1
%7 = add i8 %2, -65
%8 = icmp ult i8 %7, 6
br i1 %8, label %12, label %9
9: ; preds = %6
%10 = add i8 %2, -97
%11 = icmp ult i8 %10, 6
br i1 %11, label %12, label %63
12: ; preds = %9, %6, %1
%13 = phi i32 [ -48, %1 ], [ -55, %6 ], [ -87, %9 ]
%14 = add nsw i32 %13, %3
%15 = shl nsw i32 %14, 4
%16 = getelementptr inbounds i8, i8* %0, i64 1
%17 = load i8, i8* %16
%18 = sext i8 %17 to i32
%19 = add i8 %17, -48
%20 = icmp ult i8 %19, 10
br i1 %20, label %27, label %21
21: ; preds = %12
%22 = add i8 %17, -65
%23 = icmp ult i8 %22, 6
br i1 %23, label %27, label %24
24: ; preds = %21
%25 = add i8 %17, -97
%26 = icmp ult i8 %25, 6
br i1 %26, label %27, label %63
27: ; preds = %24, %21, %12
%28 = phi i32 [ -48, %12 ], [ -55, %21 ], [ -87, %24 ]
%29 = add nsw i32 %28, %18
%30 = add nsw i32 %29, %15
%31 = shl nsw i32 %30, 4
%32 = getelementptr inbounds i8, i8* %0, i64 2
%33 = load i8, i8* %32
%34 = sext i8 %33 to i32
%35 = add i8 %33, -48
%36 = icmp ult i8 %35, 10
br i1 %36, label %43, label %37
37: ; preds = %27
%38 = add i8 %33, -65
%39 = icmp ult i8 %38, 6
br i1 %39, label %43, label %40
40: ; preds = %37
%41 = add i8 %33, -97
%42 = icmp ult i8 %41, 6
br i1 %42, label %43, label %63
43: ; preds = %40, %37, %27
%44 = phi i32 [ -48, %27 ], [ -55, %37 ], [ -87, %40 ]
%45 = add nsw i32 %44, %34
%46 = add nsw i32 %45, %31
%47 = shl i32 %46, 4
%48 = getelementptr inbounds i8, i8* %0, i64 3
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
%51 = add i8 %49, -48
%52 = icmp ult i8 %51, 10
br i1 %52, label %59, label %53
53: ; preds = %43
%54 = add i8 %49, -65
%55 = icmp ult i8 %54, 6
br i1 %55, label %59, label %56
56: ; preds = %53
%57 = add i8 %49, -97
%58 = icmp ult i8 %57, 6
br i1 %58, label %59, label %63
59: ; preds = %56, %53, %43
%60 = phi i32 [ -48, %43 ], [ -55, %53 ], [ -87, %56 ]
%61 = add nsw i32 %60, %50
%62 = add i32 %61, %47
br label %63
63: ; preds = %56, %40, %24, %9, %59
%64 = phi i32 [ %62, %59 ], [ 0, %9 ], [ 0, %24 ], [ 0, %40 ], [ 0, %56 ]
ret i32 %64
}