long getd(char **b, int lev) {
  long val = 0;
  int base = 16;
  char *c = *b;
  char wk;
  if (*c == '0') {
    if (*(++c) != 'x' && *c != 'X')
      base = 8;
    else
      c++;
  } else
    base = 10;
  for (val = 0; *c;) {
    if (*c == '+' || *c == '-') {
      if (lev)
        break;
      if (*c++ == '+')
        val += getd(&c, lev + 1);
      else
        val -= getd(&c, lev + 1);
    } else if (base == 16) {
      wk = *c++;
      if (wk >= 'a' && wk <= 'f')
        wk &= ~0x20;
      if (wk > 'F')
        break;
      if (wk > '9')
        wk -= 7;
      val = (val << 4) + wk - '0';
    } else if (*c - '0' > base)
      break;
    else
      val = (val * base) + *c++ - '0';
  }
  *b = c;
  return val;
}


x86 assembly (clang, -O0):
<getd>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0x10,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    1192 <getd+0x82>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
movsbl 0x1(%rax),%eax
cmp    $0x78,%eax
je     1181 <getd+0x71>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x58,%eax
je     1181 <getd+0x71>
movl   $0x8,-0x1c(%rbp)
jmp    118d <getd+0x7d>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1199 <getd+0x89>
movl   $0xa,-0x1c(%rbp)
movq   $0x0,-0x18(%rbp)
mov    -0x28(%rbp),%rax
cmpb   $0x0,(%rax)
je     130f <getd+0x1ff>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     11ce <getd+0xbe>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1236 <getd+0x126>
cmpl   $0x0,-0xc(%rbp)
je     11dd <getd+0xcd>
jmp    130f <getd+0x1ff>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    1214 <getd+0x104>
mov    -0xc(%rbp),%esi
add    $0x1,%esi
lea    -0x28(%rbp),%rdi
call   1030 <getd@plt>
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
jmp    1231 <getd+0x121>
mov    -0xc(%rbp),%esi
add    $0x1,%esi
lea    -0x28(%rbp),%rdi
call   1030 <getd@plt>
mov    %rax,%rcx
mov    -0x18(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x18(%rbp)
jmp    130a <getd+0x1fa>
cmpl   $0x10,-0x1c(%rbp)
jne    12be <getd+0x1ae>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x29(%rbp)
movsbl -0x29(%rbp),%eax
cmp    $0x61,%eax
jl     1278 <getd+0x168>
movsbl -0x29(%rbp),%eax
cmp    $0x66,%eax
jg     1278 <getd+0x168>
movsbl -0x29(%rbp),%eax
and    $0xffffffdf,%eax
mov    %al,-0x29(%rbp)
movsbl -0x29(%rbp),%eax
cmp    $0x46,%eax
jle    128a <getd+0x17a>
jmp    130f <getd+0x1ff>
movsbl -0x29(%rbp),%eax
cmp    $0x39,%eax
jle    12a1 <getd+0x191>
movsbl -0x29(%rbp),%eax
sub    $0x7,%eax
mov    %al,-0x29(%rbp)
mov    -0x18(%rbp),%rax
shl    $0x4,%rax
movsbq -0x29(%rbp),%rcx
add    %rcx,%rax
sub    $0x30,%rax
mov    %rax,-0x18(%rbp)
jmp    1305 <getd+0x1f5>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
cmp    -0x1c(%rbp),%eax
jle    12d6 <getd+0x1c6>
jmp    130f <getd+0x1ff>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
imul   %rcx,%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movsbq (%rcx),%rcx
add    %rcx,%rax
sub    $0x30,%rax
mov    %rax,-0x18(%rbp)
jmp    1305 <getd+0x1f5>
jmp    130a <getd+0x1fa>
jmp    11a1 <getd+0x91>
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getd>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    (%rdi),%rbx
mov    (%rbx),%bpl
cmp    $0x30,%bpl
jne    113d <getd+0x3d>
mov    0x1(%rbx),%bpl
mov    %ebp,%eax
or     $0x20,%al
cmp    $0x78,%al
jne    1145 <getd+0x45>
mov    0x2(%rbx),%bpl
add    $0x2,%rbx
mov    $0x10,%r9d
mov    $0x1,%r10b
test   %bpl,%bpl
jne    1157 <getd+0x57>
xor    %eax,%eax
jmp    13ba <getd+0x2ba>
mov    $0xa,%r9d
jmp    114f <getd+0x4f>
add    $0x1,%rbx
mov    $0x8,%r9d
xor    %r10d,%r10d
test   %bpl,%bpl
je     1136 <getd+0x36>
mov    %r9d,%r8d
xor    %r11d,%r11d
jmp    1179 <getd+0x79>
xor    %ebx,%ebx
sub    %rbx,%r11
mov    %rdx,%rbx
mov    %r11,%rax
mov    (%rbx),%bpl
mov    %rax,%r11
test   %bpl,%bpl
je     13ba <getd+0x2ba>
cmp    $0x2d,%bpl
je     1185 <getd+0x85>
cmp    $0x2b,%bpl
jne    11d0 <getd+0xd0>
test   %esi,%esi
jne    13b7 <getd+0x2b7>
lea    0x1(%rbx),%rdx
mov    0x1(%rbx),%cl
cmp    $0x2b,%bpl
jne    1210 <getd+0x110>
cmp    $0x30,%cl
jne    125f <getd+0x15f>
mov    0x2(%rbx),%cl
mov    %ecx,%eax
or     $0x20,%al
cmp    $0x78,%al
jne    12fa <getd+0x1fa>
mov    0x3(%rbx),%cl
add    $0x3,%rbx
mov    $0x10,%r14d
mov    $0x1,%r12b
jmp    1307 <getd+0x207>
nopw   0x0(%rax,%rax,1)
movsbl %bpl,%eax
test   %r10b,%r10b
je     123d <getd+0x13d>
add    $0x1,%rbx
lea    -0x61(%rbp),%ecx
and    $0xdf,%bpl
cmp    $0x6,%cl
movzbl %bpl,%ecx
cmovb  %ecx,%eax
cmp    $0x46,%al
jg     13b7 <getd+0x2b7>
lea    -0x7(%rax),%ecx
cmp    $0x3a,%al
movzbl %al,%eax
movzbl %cl,%ecx
cmovl  %eax,%ecx
shl    $0x4,%r11
movsbq %cl,%rax
jmp    1253 <getd+0x153>
xchg   %ax,%ax
cmp    $0x30,%cl
jne    12e8 <getd+0x1e8>
mov    0x2(%rbx),%cl
mov    %ecx,%eax
or     $0x20,%al
cmp    $0x78,%al
jne    131f <getd+0x21f>
mov    0x3(%rbx),%cl
add    $0x3,%rbx
mov    $0x10,%r15d
mov    $0x1,%r12b
jmp    132c <getd+0x22c>
lea    -0x30(%rax),%ecx
cmp    %r9d,%ecx
jg     13b7 <getd+0x2b7>
imul   %r8,%r11
add    $0x1,%rbx
cltq
add    %r11,%rax
add    $0xffffffffffffffd0,%rax
jmp    116a <getd+0x6a>
mov    $0xa,%r14d
xor    %r12d,%r12d
test   %cl,%cl
je     1312 <getd+0x212>
mov    %r14d,%r15d
xor    %eax,%eax
jmp    12a9 <getd+0x1a9>
nopw   0x0(%rax,%rax,1)
movsbl %cl,%ebx
add    $0xffffffd0,%ebx
cmp    %r14d,%ebx
jg     1314 <getd+0x214>
imul   %r15,%rax
add    $0x1,%rdx
movsbq %cl,%rcx
add    %rcx,%rax
add    $0xffffffffffffffd0,%rax
movzbl (%rdx),%ecx
test   %cl,%cl
je     1314 <getd+0x214>
cmp    $0x2b,%cl
je     1314 <getd+0x214>
cmp    $0x2d,%cl
je     1314 <getd+0x214>
test   %r12b,%r12b
je     1280 <getd+0x180>
add    $0x1,%rdx
lea    -0x61(%rcx),%ebx
movzbl %cl,%ebp
and    $0xdf,%cl
cmp    $0x6,%bl
movzbl %cl,%ecx
cmovae %ebp,%ecx
cmp    $0x46,%cl
jg     1314 <getd+0x214>
lea    -0x7(%rcx),%ebx
cmp    $0x3a,%cl
movzbl %cl,%ebp
movzbl %bl,%ecx
cmovl  %ebp,%ecx
shl    $0x4,%rax
jmp    1297 <getd+0x197>
mov    $0xa,%r15d
xor    %r12d,%r12d
test   %cl,%cl
jne    1337 <getd+0x237>
jmp    115f <getd+0x5f>
add    $0x2,%rbx
mov    $0x8,%r14d
xor    %r12d,%r12d
mov    %rbx,%rdx
test   %cl,%cl
jne    1270 <getd+0x170>
xor    %eax,%eax
add    %r11,%rax
mov    %rdx,%rbx
jmp    116a <getd+0x6a>
add    $0x2,%rbx
mov    $0x8,%r15d
xor    %r12d,%r12d
mov    %rbx,%rdx
test   %cl,%cl
je     115f <getd+0x5f>
mov    %r15d,%r14d
xor    %ebx,%ebx
jmp    136d <getd+0x26d>
xchg   %ax,%ax
movsbl %cl,%eax
add    $0xffffffd0,%eax
cmp    %r15d,%eax
jg     1161 <getd+0x61>
imul   %r14,%rbx
add    $0x1,%rdx
movsbq %cl,%rax
add    %rax,%rbx
add    $0xffffffffffffffd0,%rbx
movzbl (%rdx),%ecx
test   %cl,%cl
je     1161 <getd+0x61>
cmp    $0x2b,%cl
je     1161 <getd+0x61>
cmp    $0x2d,%cl
je     1161 <getd+0x61>
test   %r12b,%r12b
je     1340 <getd+0x240>
add    $0x1,%rdx
lea    -0x61(%rcx),%eax
movzbl %cl,%ebp
and    $0xdf,%cl
cmp    $0x6,%al
movzbl %cl,%ecx
cmovae %ebp,%ecx
cmp    $0x46,%cl
jg     1161 <getd+0x61>
lea    -0x7(%rcx),%eax
cmp    $0x3a,%cl
movzbl %cl,%ebp
movzbl %al,%ecx
cmovl  %ebp,%ecx
shl    $0x4,%rbx
jmp    1357 <getd+0x257>
mov    %r11,%rax
mov    %rbx,(%rdi)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

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