float fastA2F(const char *p) {
  int frac = 0;
  float sign, value, scale;
  while (((*p) == ' ' || (*p) == '\t')) {
    p += 1;
  }
  sign = 1.0f;
  if (*p == '-') {
    sign = -1.0f;
    p += 1;
  } else if (*p == '+') {
    p += 1;
  }
  value = 0.0f;
  while (((*p) >= '0' && (*p) <= '9')) {
    value = value * 10.0f + (*p - '0');
    p += 1;
  }
  if (*p == '.') {
    float pow10 = 10.0f;
    p += 1;
    while (((*p) >= '0' && (*p) <= '9')) {
      value += (*p - '0') / pow10;
      pow10 *= 10.0f;
      p += 1;
    }
  }
  scale = 1.0f;
  if ((*p == 'e') || (*p == 'E')) {
    unsigned int expon;
    p += 1;
    frac = 0;
    if (*p == '-') {
      frac = 1;
      p += 1;
    } else if (*p == '+') {
      p += 1;
    }
    expon = 0;
    while (((*p) >= '0' && (*p) <= '9')) {
      expon = expon * 10 + (*p - '0');
      p += 1;
    }
    if (expon > 308)
      expon = 308;
    while (expon >= 8) {
      scale *= 1E8f;
      expon -= 8;
    }
    while (expon > 0) {
      scale *= 10.0f;
      expon -= 1;
    }
  }
  return sign * (frac ? (value / scale) : (value * scale));
}


x86 assembly (clang, -O0):
<fastA2F>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x21(%rbp)
je     1134 <fastA2F+0x34>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    1144 <fastA2F+0x44>
jmp    1155 <fastA2F+0x55>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    110f <fastA2F+0xf>
movss  0xea3(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1190 <fastA2F+0x90>
movss  0xe8a(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    11b1 <fastA2F+0xb1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    11ac <fastA2F+0xac>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    11b1 <fastA2F+0xb1>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x30,%ecx
mov    %al,-0x22(%rbp)
jl     11de <fastA2F+0xde>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
setle  %al
mov    %al,-0x22(%rbp)
mov    -0x22(%rbp),%al
test   $0x1,%al
jne    11ee <fastA2F+0xee>
jmp    1227 <fastA2F+0x127>
movss  -0x14(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
cvtsi2ss %eax,%xmm1
movss  0xdff(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x14(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    11b9 <fastA2F+0xb9>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    12ca <fastA2F+0x1ca>
movss  0xdc9(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x30,%ecx
mov    %al,-0x23(%rbp)
jl     1275 <fastA2F+0x175>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
setle  %al
mov    %al,-0x23(%rbp)
mov    -0x23(%rbp),%al
test   $0x1,%al
jne    1285 <fastA2F+0x185>
jmp    12c5 <fastA2F+0x1c5>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
cvtsi2ss %eax,%xmm0
divss  -0x1c(%rbp),%xmm0
addss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xd5e(%rip),%xmm0
mulss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1250 <fastA2F+0x150>
jmp    12ca <fastA2F+0x1ca>
movss  0xd2e(%rip),%xmm0
movss  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x65,%eax
je     12f7 <fastA2F+0x1f7>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x45,%eax
jne    142a <fastA2F+0x32a>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1332 <fastA2F+0x232>
movl   $0x1,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1353 <fastA2F+0x253>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    134e <fastA2F+0x24e>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1353 <fastA2F+0x253>
movl   $0x0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x30,%ecx
mov    %al,-0x24(%rbp)
jl     137f <fastA2F+0x27f>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
setle  %al
mov    %al,-0x24(%rbp)
mov    -0x24(%rbp),%al
test   $0x1,%al
jne    138f <fastA2F+0x28f>
jmp    13b3 <fastA2F+0x2b3>
imul   $0xa,-0x20(%rbp),%eax
mov    -0x8(%rbp),%rcx
movsbl (%rcx),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    135a <fastA2F+0x25a>
cmpl   $0x134,-0x20(%rbp)
jbe    13c7 <fastA2F+0x2c7>
movl   $0x134,-0x20(%rbp)
jmp    13cc <fastA2F+0x2cc>
cmpl   $0x8,-0x20(%rbp)
jb     13f6 <fastA2F+0x2f6>
movss  0xc2e(%rip),%xmm0
mulss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
mov    -0x20(%rbp),%eax
sub    $0x8,%eax
mov    %eax,-0x20(%rbp)
jmp    13cc <fastA2F+0x2cc>
jmp    13fb <fastA2F+0x2fb>
cmpl   $0x0,-0x20(%rbp)
jbe    1425 <fastA2F+0x325>
movss  0xbfb(%rip),%xmm0
mulss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    13fb <fastA2F+0x2fb>
jmp    142a <fastA2F+0x32a>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
cmpl   $0x0,-0xc(%rbp)
je     1452 <fastA2F+0x352>
movss  -0x14(%rbp),%xmm0
divss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    1461 <fastA2F+0x361>
movss  -0x14(%rbp),%xmm0
mulss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x28(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm1
mulss  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<fastA2F>:
lea    0xf09(%rip),%rax
nopw   0x0(%rax,%rax,1)
movzbl (%rdi),%ecx
add    $0xf7,%cl
cmp    $0x24,%cl
ja     1131 <fastA2F+0x31>
movzbl %cl,%ecx
movslq (%rax,%rcx,4),%rcx
add    %rax,%rcx
jmp    *%rcx
add    $0x1,%rdi
jmp    1110 <fastA2F+0x10>
add    $0x1,%rdi
movss  0xec7(%rip),%xmm0
jmp    1147 <fastA2F+0x47>
add    $0x1,%rdi
movss  0xebd(%rip),%xmm0
mov    (%rdi),%al
lea    -0x30(%rax),%ecx
xorps  %xmm1,%xmm1
cmp    $0x9,%cl
ja     1185 <fastA2F+0x85>
xorps  %xmm1,%xmm1
movss  0xea9(%rip),%xmm2
nop
movzbl %al,%eax
add    $0xffffffd0,%eax
xorps  %xmm3,%xmm3
cvtsi2ss %eax,%xmm3
mulss  %xmm2,%xmm1
addss  %xmm3,%xmm1
movzbl 0x1(%rdi),%eax
add    $0x1,%rdi
lea    -0x30(%rax),%ecx
cmp    $0xa,%cl
jb     1160 <fastA2F+0x60>
cmp    $0x2e,%al
jne    11d9 <fastA2F+0xd9>
mov    0x1(%rdi),%al
add    $0x1,%rdi
lea    -0x30(%rax),%ecx
cmp    $0x9,%cl
ja     11d9 <fastA2F+0xd9>
movss  0xe68(%rip),%xmm2
movaps %xmm2,%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl %al,%eax
add    $0xffffffd0,%eax
xorps  %xmm4,%xmm4
cvtsi2ss %eax,%xmm4
divss  %xmm3,%xmm4
addss  %xmm4,%xmm1
mulss  %xmm2,%xmm3
movzbl 0x1(%rdi),%eax
add    $0x1,%rdi
lea    -0x30(%rax),%ecx
cmp    $0xa,%cl
jb     11b0 <fastA2F+0xb0>
or     $0x20,%al
cmp    $0x65,%al
jne    11f6 <fastA2F+0xf6>
mov    0x1(%rdi),%cl
mov    $0x1,%al
cmp    $0x2b,%cl
je     1203 <fastA2F+0x103>
cmp    $0x2d,%cl
jne    1209 <fastA2F+0x109>
add    $0x2,%rdi
xor    %eax,%eax
jmp    120d <fastA2F+0x10d>
movss  0xe02(%rip),%xmm2
jmp    12f9 <fastA2F+0x1f9>
add    $0x2,%rdi
jmp    120d <fastA2F+0x10d>
add    $0x1,%rdi
mov    (%rdi),%dl
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     1282 <fastA2F+0x182>
add    $0x1,%rdi
xor    %ecx,%ecx
nopl   (%rax)
movzbl %dl,%edx
lea    (%rcx,%rcx,4),%ecx
lea    (%rdx,%rcx,2),%ecx
add    $0xffffffd0,%ecx
movzbl (%rdi),%edx
lea    -0x30(%rdx),%esi
add    $0x1,%rdi
cmp    $0xa,%sil
jb     1220 <fastA2F+0x120>
mov    $0x134,%edx
cmp    $0x133,%ecx
ja     1250 <fastA2F+0x150>
cmp    $0x8,%ecx
jb     128c <fastA2F+0x18c>
mov    %ecx,%edx
movss  0xda8(%rip),%xmm2
movss  0xdac(%rip),%xmm3
mov    %edx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mulss  %xmm3,%xmm2
add    $0xfffffff8,%ecx
cmp    $0x7,%ecx
ja     1270 <fastA2F+0x170>
test   %ecx,%ecx
jne    1298 <fastA2F+0x198>
jmp    12f5 <fastA2F+0x1f5>
movss  0xd76(%rip),%xmm2
jmp    12f5 <fastA2F+0x1f5>
movss  0xd6c(%rip),%xmm2
test   %ecx,%ecx
je     12f5 <fastA2F+0x1f5>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     12bd <fastA2F+0x1bd>
xor    %edi,%edi
movss  0xd5c(%rip),%xmm3
nopl   0x0(%rax)
mulss  %xmm3,%xmm2
add    $0x1,%edi
cmp    %edi,%esi
jne    12b0 <fastA2F+0x1b0>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     12f5 <fastA2F+0x1f5>
movss  0xd3e(%rip),%xmm3
nopw   0x0(%rax,%rax,1)
mulss  %xmm3,%xmm2
mulss  %xmm3,%xmm2
mulss  %xmm3,%xmm2
mulss  %xmm3,%xmm2
mulss  %xmm3,%xmm2
mulss  %xmm3,%xmm2
mulss  %xmm3,%xmm2
mulss  %xmm3,%xmm2
add    $0xfffffff8,%ecx
jne    12d0 <fastA2F+0x1d0>
test   %al,%al
je     1302 <fastA2F+0x202>
mulss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
ret
divss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
ret

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

LLVM IR (-O2):
define float @fastA2F(i8* nocapture %0) {
br label %2
2: ; preds = %5, %1
%3 = phi i8* [ %0, %1 ], [ %6, %5 ]
%4 = load i8, i8* %3
switch i8 %4, label %11 [
i8 32, label %5
i8 9, label %5
i8 45, label %7
i8 43, label %9
]
5: ; preds = %2, %2
%6 = getelementptr inbounds i8, i8* %3, i64 1
br label %2
7: ; preds = %2
%8 = getelementptr inbounds i8, i8* %3, i64 1
br label %11
9: ; preds = %2
%10 = getelementptr inbounds i8, i8* %3, i64 1
br label %11
11: ; preds = %2, %9, %7
%12 = phi i8* [ %8, %7 ], [ %10, %9 ], [ %3, %2 ]
%13 = phi float [ -1.000000e+00, %7 ], [ 1.000000e+00, %9 ], [ 1.000000e+00, %2 ]
%14 = load i8, i8* %12
%15 = add i8 %14, -48
%16 = icmp ult i8 %15, 10
br i1 %16, label %17, label %29
17: ; preds = %11, %17
%18 = phi i8 [ %26, %17 ], [ %14, %11 ]
%19 = phi float [ %24, %17 ], [ 0.000000e+00, %11 ]
%20 = phi i8* [ %25, %17 ], [ %12, %11 ]
%21 = zext i8 %18 to i32
%22 = add nsw i32 %21, -48
%23 = sitofp i32 %22 to float
%24 = tail call float @llvm.fmuladd.f32(float %19, float 1.000000e+01, float %23)
%25 = getelementptr inbounds i8, i8* %20, i64 1
%26 = load i8, i8* %25
%27 = add i8 %26, -48
%28 = icmp ult i8 %27, 10
br i1 %28, label %17, label %29
29: ; preds = %17, %11
%30 = phi i8* [ %12, %11 ], [ %25, %17 ]
%31 = phi float [ 0.000000e+00, %11 ], [ %24, %17 ]
%32 = phi i8 [ %14, %11 ], [ %26, %17 ]
%33 = icmp eq i8 %32, 46
br i1 %33, label %34, label %54
34: ; preds = %29
%35 = getelementptr inbounds i8, i8* %30, i64 1
%36 = load i8, i8* %35
%37 = add i8 %36, -48
%38 = icmp ult i8 %37, 10
br i1 %38, label %39, label %54
39: ; preds = %34, %39
%40 = phi i8 [ %51, %39 ], [ %36, %34 ]
%41 = phi i8* [ %50, %39 ], [ %35, %34 ]
%42 = phi float [ %49, %39 ], [ 1.000000e+01, %34 ]
%43 = phi float [ %48, %39 ], [ %31, %34 ]
%44 = zext i8 %40 to i32
%45 = add nsw i32 %44, -48
%46 = sitofp i32 %45 to float
%47 = fdiv float %46, %42
%48 = fadd float %43, %47
%49 = fmul float %42, 1.000000e+01
%50 = getelementptr inbounds i8, i8* %41, i64 1
%51 = load i8, i8* %50
%52 = add i8 %51, -48
%53 = icmp ult i8 %52, 10
br i1 %53, label %39, label %54
54: ; preds = %39, %29, %34
%55 = phi i8 [ %36, %34 ], [ %32, %29 ], [ %51, %39 ]
%56 = phi i8* [ %35, %34 ], [ %30, %29 ], [ %50, %39 ]
%57 = phi float [ %31, %34 ], [ %31, %29 ], [ %48, %39 ]
switch i8 %55, label %133 [
i8 101, label %58
i8 69, label %58
]
58: ; preds = %54, %54
%59 = getelementptr inbounds i8, i8* %56, i64 1
%60 = load i8, i8* %59
switch i8 %60, label %65 [
i8 45, label %61
i8 43, label %63
]
61: ; preds = %58
%62 = getelementptr inbounds i8, i8* %56, i64 2
br label %65
63: ; preds = %58
%64 = getelementptr inbounds i8, i8* %56, i64 2
br label %65
65: ; preds = %58, %63, %61
%66 = phi i8* [ %62, %61 ], [ %64, %63 ], [ %59, %58 ]
%67 = phi i1 [ false, %61 ], [ true, %63 ], [ true, %58 ]
%68 = load i8, i8* %66
%69 = add i8 %68, -48
%70 = icmp ult i8 %69, 10
br i1 %70, label %71, label %129
71: ; preds = %65, %71
%72 = phi i8 [ %80, %71 ], [ %68, %65 ]
%73 = phi i32 [ %78, %71 ], [ 0, %65 ]
%74 = phi i8* [ %79, %71 ], [ %66, %65 ]
%75 = zext i8 %72 to i32
%76 = mul i32 %73, 10
%77 = add i32 %76, -48
%78 = add i32 %77, %75
%79 = getelementptr inbounds i8, i8* %74, i64 1
%80 = load i8, i8* %79
%81 = add i8 %80, -48
%82 = icmp ult i8 %81, 10
br i1 %82, label %71, label %83
83: ; preds = %71
%84 = icmp ult i32 %78, 308
br i1 %84, label %85, label %87
85: ; preds = %83
%86 = icmp ugt i32 %78, 7
br i1 %86, label %87, label %89
87: ; preds = %83, %85
%88 = phi i32 [ 308, %83 ], [ %78, %85 ]
br label %110
89: ; preds = %110, %85
%90 = phi float [ 1.000000e+00, %85 ], [ %113, %110 ]
%91 = phi i32 [ %78, %85 ], [ %114, %110 ]
%92 = icmp eq i32 %91, 0
br i1 %92, label %129, label %93
93: ; preds = %89
%94 = add i32 %91, -1
%95 = and i32 %91, 7
%96 = icmp eq i32 %95, 0
br i1 %96, label %105, label %97
97: ; preds = %93, %97
%98 = phi i32 [ %102, %97 ], [ %91, %93 ]
%99 = phi float [ %101, %97 ], [ %90, %93 ]
%100 = phi i32 [ %103, %97 ], [ 0, %93 ]
%101 = fmul float %99, 1.000000e+01
%102 = add i32 %98, -1
%103 = add i32 %100, 1
%104 = icmp eq i32 %103, %95
br i1 %104, label %105, label %97
105: ; preds = %97, %93
%106 = phi float [ undef, %93 ], [ %101, %97 ]
%107 = phi i32 [ %91, %93 ], [ %102, %97 ]
%108 = phi float [ %90, %93 ], [ %101, %97 ]
%109 = icmp ult i32 %94, 7
br i1 %109, label %129, label %116
110: ; preds = %87, %110
%111 = phi i32 [ %114, %110 ], [ %88, %87 ]
%112 = phi float [ %113, %110 ], [ 1.000000e+00, %87 ]
%113 = fmul float %112, 1.000000e+08
%114 = add i32 %111, -8
%115 = icmp ugt i32 %114, 7
br i1 %115, label %110, label %89
116: ; preds = %105, %116
%117 = phi i32 [ %127, %116 ], [ %107, %105 ]
%118 = phi float [ %126, %116 ], [ %108, %105 ]
%119 = fmul float %118, 1.000000e+01
%120 = fmul float %119, 1.000000e+01
%121 = fmul float %120, 1.000000e+01
%122 = fmul float %121, 1.000000e+01
%123 = fmul float %122, 1.000000e+01
%124 = fmul float %123, 1.000000e+01
%125 = fmul float %124, 1.000000e+01
%126 = fmul float %125, 1.000000e+01
%127 = add i32 %117, -8
%128 = icmp eq i32 %127, 0
br i1 %128, label %129, label %116
129: ; preds = %105, %116, %65, %89
%130 = phi float [ %90, %89 ], [ 1.000000e+00, %65 ], [ %106, %105 ], [ %126, %116 ]
br i1 %67, label %133, label %131
131: ; preds = %129
%132 = fdiv float %57, %130
br label %136
133: ; preds = %54, %129
%134 = phi float [ %130, %129 ], [ 1.000000e+00, %54 ]
%135 = fmul float %57, %134
br label %136
136: ; preds = %133, %131
%137 = phi float [ %132, %131 ], [ %135, %133 ]
%138 = fmul float %13, %137
ret float %138
}