#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 */

/* Variables and functions */
scalar_t__ isdigit(char const);
scalar_t__ isspace(char const);
double strtod(const char *nptr, char **endptr) {
  unsigned short negative;
  double number;
  double fp_part;
  int exponent;
  unsigned short exp_negative;
  while (isspace(*nptr))
    nptr++;
  negative = 0;
  if (*nptr == '-') {
    negative = 1;
    nptr++;
  } else if (*nptr == '+')
    nptr++;
  number = 0;
  while (isdigit(*nptr)) {
    number = number * 10 + (*nptr - '0');
    nptr++;
  }
  if (*nptr == '.') {
    nptr++;
    fp_part = 0;
    while (isdigit(*nptr)) {
      fp_part = fp_part / 10.0 + (*nptr - '0') / 10.0;
      nptr++;
    }
    number += fp_part;
  }
  if (*nptr == 'e' || *nptr == 'E') {
    nptr++;
    exp_negative = 0;
    if (*nptr == '-') {
      exp_negative = 1;
      nptr++;
    } else if (*nptr == '+')
      nptr++;
    exponent = 0;
    while (isdigit(*nptr)) {
      exponent = exponent * 10 + (*nptr - '0');
      exponent++;
    }
  }
  while (exponent) {
    if (exp_negative)
      number /= 10;
    else
      number *= 10;
    exponent--;
  }
  return (negative ? -number : number);
}


x86 assembly (clang, -O0):
<strtod>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
je     1157 <strtod+0x37>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1130 <strtod+0x10>
movw   $0x0,-0x12(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1184 <strtod+0x64>
movw   $0x1,-0x12(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    11a5 <strtod+0x85>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    11a0 <strtod+0x80>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    11a5 <strtod+0x85>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     11fc <strtod+0xdc>
movsd  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
cvtsi2sd %eax,%xmm1
movsd  0xe22(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    11ad <strtod+0x8d>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    128a <strtod+0x16a>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     127b <strtod+0x15b>
movsd  -0x28(%rbp),%xmm0
movsd  0xdbd(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
cvtsi2sd %eax,%xmm1
movsd  0xda3(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1220 <strtod+0x100>
movsd  -0x28(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x65,%eax
je     12aa <strtod+0x18a>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x45,%eax
jne    1347 <strtod+0x227>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
movw   $0x0,-0x2e(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    12e3 <strtod+0x1c3>
movw   $0x1,-0x2e(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1304 <strtod+0x1e4>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    12ff <strtod+0x1df>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1304 <strtod+0x1e4>
movl   $0x0,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1342 <strtod+0x222>
imul   $0xa,-0x2c(%rbp),%eax
mov    -0x8(%rbp),%rcx
movsbl (%rcx),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    130b <strtod+0x1eb>
jmp    1347 <strtod+0x227>
jmp    134c <strtod+0x22c>
cmpl   $0x0,-0x2c(%rbp)
je     139c <strtod+0x27c>
cmpw   $0x0,-0x2e(%rbp)
je     137c <strtod+0x25c>
movsd  -0x20(%rbp),%xmm0
movsd  0xc92(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    138e <strtod+0x26e>
movsd  0xc7c(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    134c <strtod+0x22c>
movzwl -0x12(%rbp),%eax
cmp    $0x0,%eax
je     13cf <strtod+0x2af>
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    13d9 <strtod+0x2b9>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<strtod>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x28,%rsp
mov    %rdi,%rbx
nopl   (%rax)
movsbl (%rbx),%edi
call   1040 <isspace@plt>
add    $0x1,%rbx
test   %rax,%rax
jne    1130 <strtod+0x10>
mov    -0x1(%rbx),%al
cmp    $0x2b,%al
je     1155 <strtod+0x35>
cmp    $0x2d,%al
jne    1151 <strtod+0x31>
xor    %r14d,%r14d
jmp    1158 <strtod+0x38>
add    $0xffffffffffffffff,%rbx
mov    $0x1,%r14b
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
xorpd  %xmm0,%xmm0
test   %rax,%rax
je     11a5 <strtod+0x85>
nopl   0x0(%rax)
movsbl (%rbx),%eax
add    $0xffffffd0,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0xe7b(%rip),%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,(%rsp)
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1030 <isdigit@plt>
movapd (%rsp),%xmm0
test   %rax,%rax
jne    1170 <strtod+0x50>
mov    (%rbx),%al
cmp    $0x2e,%al
jne    121e <strtod+0xfe>
movapd %xmm0,(%rsp)
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1030 <isdigit@plt>
xorpd  %xmm1,%xmm1
test   %rax,%rax
je     1213 <strtod+0xf3>
cs nopw 0x0(%rax,%rax,1)
movsbl (%rbx),%eax
add    $0xffffffd0,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
unpcklpd %xmm0,%xmm1
divpd  0xe27(%rip),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
addpd  %xmm0,%xmm1
movapd %xmm1,0x10(%rsp)
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1030 <isdigit@plt>
movapd 0x10(%rsp),%xmm1
test   %rax,%rax
jne    11d0 <strtod+0xb0>
movapd (%rsp),%xmm0
addsd  %xmm1,%xmm0
mov    (%rbx),%al
or     $0x20,%al
cmp    $0x65,%al
jne    123f <strtod+0x11f>
mov    0x1(%rbx),%al
cmp    $0x2b,%al
movapd %xmm0,(%rsp)
je     1241 <strtod+0x121>
cmp    $0x2d,%al
jne    1247 <strtod+0x127>
add    $0x2,%rbx
mov    $0x1,%r15w
jmp    124e <strtod+0x12e>
jmp    1280 <strtod+0x160>
add    $0x2,%rbx
jmp    124b <strtod+0x12b>
add    $0x1,%rbx
xor    %r15d,%r15d
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     129f <strtod+0x17f>
xor    %ebp,%ebp
nopl   (%rax)
lea    0x0(%rbp,%rbp,4),%eax
movsbl (%rbx),%edi
lea    (%rdi,%rax,2),%ebp
add    $0xffffffd1,%ebp
call   1030 <isdigit@plt>
test   %rax,%rax
jne    1260 <strtod+0x140>
test   %ebp,%ebp
movapd (%rsp),%xmm0
je     12f3 <strtod+0x1d3>
test   $0x1,%bpl
jne    128f <strtod+0x16f>
mov    %ebp,%eax
cmp    $0x1,%ebp
jne    12b6 <strtod+0x196>
jmp    12f3 <strtod+0x1d3>
test   %r15w,%r15w
je     12a6 <strtod+0x186>
divsd  0xd63(%rip),%xmm0
jmp    12ae <strtod+0x18e>
movapd (%rsp),%xmm0
jmp    12f3 <strtod+0x1d3>
mulsd  0xd52(%rip),%xmm0
lea    -0x1(%rbp),%eax
cmp    $0x1,%ebp
je     12f3 <strtod+0x1d3>
movsd  0xd42(%rip),%xmm1
jmp    12c9 <strtod+0x1a9>
mulsd  %xmm1,%xmm0
add    $0xfffffffe,%eax
je     12f3 <strtod+0x1d3>
test   %r15w,%r15w
je     12e0 <strtod+0x1c0>
divsd  %xmm1,%xmm0
test   %r15w,%r15w
jne    12ea <strtod+0x1ca>
jmp    12c0 <strtod+0x1a0>
nopl   0x0(%rax,%rax,1)
mulsd  %xmm1,%xmm0
test   %r15w,%r15w
je     12c0 <strtod+0x1a0>
divsd  %xmm1,%xmm0
add    $0xfffffffe,%eax
jne    12c9 <strtod+0x1a9>
test   %r14b,%r14b
jne    1300 <strtod+0x1e0>
xorpd  0xd20(%rip),%xmm0
add    $0x28,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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