#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__ fb_hStrRadix2Longint(char *, int, int);
char *fb_hStrSkipChar(char *, int, int);
int /*<<< orphan*/ free(char *);
char *malloc(int);
double strtod(char *, int /*<<< orphan*/);
double fb_hStr2Double(char *src, int len) {
  char *p, *q, c;
  int radix;
  int i;
  int skip;
  double ret;
  p = fb_hStrSkipChar(src, len, 32);
  len -= (int)(p - src);
  if (len < 1)
    return 0.0;
  else if ((len >= 2) && (p[0] == '&')) {
    skip = 2;
    radix = 0;
    switch (p[1]) {
    case 'h':
    case 'H':
      radix = 16;
      break;
    case 'o':
    case 'O':
      radix = 8;
      break;
    case 'b':
    case 'B':
      radix = 2;
      break;
    default:
      radix = 8;
      skip = 1;
      break;
    }
    if (radix != 0)
      return (double)fb_hStrRadix2Longint(&p[skip], len - skip, radix);
  }
  q = malloc(len + 1);
  for (i = 0; i < len; i++) {
    c = p[i];
    if (c == 'd' || c == 'D')
      ++c;
    q[i] = c;
  }
  q[len] = '\0';
  ret = strtod(q, 0);
  free(q);
  return ret;
}


x86 assembly (clang, -O0):
<fb_hStr2Double>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    $0x20,%edx
call   1070 <fb_hStrSkipChar@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x1,-0x14(%rbp)
jge    11a0 <fb_hStr2Double+0x50>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1341 <fb_hStr2Double+0x1f1>
cmpl   $0x2,-0x14(%rbp)
jl     129f <fb_hStr2Double+0x14f>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x26,%eax
jne    129f <fb_hStr2Double+0x14f>
movl   $0x2,-0x38(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
mov    %eax,-0x44(%rbp)
sub    $0x42,%eax
je     124e <fb_hStr2Double+0xfe>
jmp    11e1 <fb_hStr2Double+0x91>
mov    -0x44(%rbp),%eax
sub    $0x48,%eax
je     1236 <fb_hStr2Double+0xe6>
jmp    11f2 <fb_hStr2Double+0xa2>
mov    -0x44(%rbp),%eax
sub    $0x4f,%eax
je     1242 <fb_hStr2Double+0xf2>
jmp    1203 <fb_hStr2Double+0xb3>
mov    -0x44(%rbp),%eax
sub    $0x62,%eax
je     124e <fb_hStr2Double+0xfe>
jmp    1214 <fb_hStr2Double+0xc4>
mov    -0x44(%rbp),%eax
sub    $0x68,%eax
je     1236 <fb_hStr2Double+0xe6>
jmp    1225 <fb_hStr2Double+0xd5>
mov    -0x44(%rbp),%eax
sub    $0x6f,%eax
je     1242 <fb_hStr2Double+0xf2>
jmp    125a <fb_hStr2Double+0x10a>
movl   $0x10,-0x30(%rbp)
jmp    1268 <fb_hStr2Double+0x118>
movl   $0x8,-0x30(%rbp)
jmp    1268 <fb_hStr2Double+0x118>
movl   $0x2,-0x30(%rbp)
jmp    1268 <fb_hStr2Double+0x118>
movl   $0x8,-0x30(%rbp)
movl   $0x1,-0x38(%rbp)
cmpl   $0x0,-0x30(%rbp)
je     129a <fb_hStr2Double+0x14a>
mov    -0x20(%rbp),%rdi
movslq -0x38(%rbp),%rax
add    %rax,%rdi
mov    -0x14(%rbp),%esi
sub    -0x38(%rbp),%esi
mov    -0x30(%rbp),%edx
call   1050 <fb_hStrRadix2Longint@plt>
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1341 <fb_hStr2Double+0x1f1>
jmp    129f <fb_hStr2Double+0x14f>
jmp    12a4 <fb_hStr2Double+0x154>
mov    -0x14(%rbp),%edi
add    $0x1,%edi
call   1060 <malloc@plt>
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1312 <fb_hStr2Double+0x1c2>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x29(%rbp)
movsbl -0x29(%rbp),%eax
cmp    $0x64,%eax
je     12ee <fb_hStr2Double+0x19e>
movsbl -0x29(%rbp),%eax
cmp    $0x44,%eax
jne    12f6 <fb_hStr2Double+0x1a6>
mov    -0x29(%rbp),%al
add    $0x1,%al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%dl
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12ba <fb_hStr2Double+0x16a>
mov    -0x28(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x28(%rbp),%rdi
xor    %esi,%esi
call   1040 <strtod@plt>
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fb_hStr2Double>:
push   %r15
push   %r14
push   %rbx
sub    $0x10,%rsp
mov    %esi,%ebx
mov    %rdi,%r14
mov    $0x20,%edx
call   1070 <fb_hStrSkipChar@plt>
mov    %rax,%r15
sub    %r15d,%r14d
add    %ebx,%r14d
test   %r14d,%r14d
jle    129f <fb_hStr2Double+0x14f>
cmp    $0x1,%r14d
je     11e4 <fb_hStr2Double+0x94>
cmpb   $0x26,(%r15)
jne    11e4 <fb_hStr2Double+0x94>
movsbl 0x1(%r15),%ecx
add    $0xffffffbe,%ecx
cmp    $0x2d,%ecx
ja     11d5 <fb_hStr2Double+0x85>
movabs $0x100000001,%rax
bt     %rcx,%rax
jb     1412 <fb_hStr2Double+0x2c2>
mov    $0x2,%eax
mov    $0x10,%edx
movabs $0x4000000040,%rsi
bt     %rcx,%rsi
jb     141c <fb_hStr2Double+0x2cc>
movabs $0x200000002000,%rdx
bt     %rcx,%rdx
jb     11da <fb_hStr2Double+0x8a>
mov    $0x1,%eax
mov    $0x8,%edx
jmp    141c <fb_hStr2Double+0x2cc>
lea    0x1(%r14),%edi
call   1060 <malloc@plt>
mov    %rax,%rbx
mov    %r14d,%esi
cmp    $0x8,%r14d
jb     1215 <fb_hStr2Double+0xc5>
lea    (%r15,%rsi,1),%rcx
cmp    %rcx,%rbx
jae    12a8 <fb_hStr2Double+0x158>
mov    %rbx,%rcx
add    %rsi,%rcx
cmp    %rcx,%r15
jae    12a8 <fb_hStr2Double+0x158>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
test   $0x1,%sil
je     123a <fb_hStr2Double+0xea>
mov    (%r15,%rcx,1),%dil
mov    %edi,%eax
and    $0xdf,%al
cmp    $0x44,%al
sete   %al
add    %dil,%al
mov    %al,(%rbx,%rcx,1)
or     $0x1,%rcx
add    %rsi,%rdx
je     1275 <fb_hStr2Double+0x125>
nop
movzbl (%r15,%rcx,1),%eax
mov    %eax,%edx
and    $0xdf,%dl
cmp    $0x44,%dl
sete   %dl
add    %al,%dl
mov    %dl,(%rbx,%rcx,1)
movzbl 0x1(%r15,%rcx,1),%eax
mov    %eax,%edx
and    $0xdf,%dl
cmp    $0x44,%dl
sete   %dl
add    %al,%dl
mov    %dl,0x1(%rbx,%rcx,1)
add    $0x2,%rcx
cmp    %rcx,%rsi
jne    1240 <fb_hStr2Double+0xf0>
movslq %r14d,%rax
movb   $0x0,(%rbx,%rax,1)
mov    %rbx,%rdi
xor    %esi,%esi
call   1040 <strtod@plt>
movq   %xmm0,0x8(%rsp)
mov    %rbx,%rdi
call   1030 <free@plt>
movsd  0x8(%rsp),%xmm0
jmp    1434 <fb_hStr2Double+0x2e4>
xorpd  %xmm0,%xmm0
jmp    1434 <fb_hStr2Double+0x2e4>
cmp    $0x20,%r14d
jae    12b5 <fb_hStr2Double+0x165>
xor    %ecx,%ecx
jmp    13c7 <fb_hStr2Double+0x277>
mov    %esi,%ecx
and    $0xffffffe0,%ecx
lea    -0x20(%rcx),%rdx
mov    %rdx,%rax
shr    $0x5,%rax
add    $0x1,%rax
test   %rdx,%rdx
je     143e <fb_hStr2Double+0x2ee>
mov    %rax,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %edx,%edx
movdqa 0xd1d(%rip),%xmm0
movdqa 0xd25(%rip),%xmm1
nopl   0x0(%rax,%rax,1)
movdqu (%r15,%rdx,1),%xmm2
movdqu 0x10(%r15,%rdx,1),%xmm3
movdqa %xmm2,%xmm4
pand   %xmm0,%xmm4
movdqa %xmm3,%xmm5
pand   %xmm0,%xmm5
pcmpeqb %xmm1,%xmm4
pcmpeqb %xmm1,%xmm5
psubb  %xmm4,%xmm2
psubb  %xmm5,%xmm3
movdqu %xmm2,(%rbx,%rdx,1)
movdqu %xmm3,0x10(%rbx,%rdx,1)
movdqu 0x20(%r15,%rdx,1),%xmm2
movdqu 0x30(%r15,%rdx,1),%xmm3
movdqa %xmm2,%xmm4
pand   %xmm0,%xmm4
movdqa %xmm3,%xmm5
pand   %xmm0,%xmm5
pcmpeqb %xmm1,%xmm4
pcmpeqb %xmm1,%xmm5
psubb  %xmm4,%xmm2
psubb  %xmm5,%xmm3
movdqu %xmm2,0x20(%rbx,%rdx,1)
movdqu %xmm3,0x30(%rbx,%rdx,1)
add    $0x40,%rdx
add    $0xfffffffffffffffe,%rdi
jne    12f0 <fb_hStr2Double+0x1a0>
test   $0x1,%al
je     13b4 <fb_hStr2Double+0x264>
movdqu (%r15,%rdx,1),%xmm0
movdqu 0x10(%r15,%rdx,1),%xmm1
movdqa 0xc7b(%rip),%xmm2
movdqa %xmm0,%xmm3
pand   %xmm2,%xmm3
pand   %xmm1,%xmm2
movdqa 0xc77(%rip),%xmm4
pcmpeqb %xmm4,%xmm3
pcmpeqb %xmm4,%xmm2
psubb  %xmm3,%xmm0
psubb  %xmm2,%xmm1
movdqu %xmm0,(%rbx,%rdx,1)
movdqu %xmm1,0x10(%rbx,%rdx,1)
cmp    %rsi,%rcx
je     1275 <fb_hStr2Double+0x125>
test   $0x18,%sil
je     1217 <fb_hStr2Double+0xc7>
mov    %rcx,%rdx
mov    %esi,%ecx
and    $0xfffffff8,%ecx
movdqa 0xc49(%rip),%xmm0
movdqa 0xc51(%rip),%xmm1
nop
movq   (%r15,%rdx,1),%xmm2
movdqa %xmm2,%xmm3
pand   %xmm0,%xmm3
pcmpeqb %xmm1,%xmm3
psubb  %xmm3,%xmm2
movq   %xmm2,(%rbx,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rcx
jne    13e0 <fb_hStr2Double+0x290>
cmp    %rsi,%rcx
je     1275 <fb_hStr2Double+0x125>
jmp    1217 <fb_hStr2Double+0xc7>
mov    $0x2,%edx
mov    $0x2,%eax
mov    %eax,%ecx
add    %rcx,%r15
sub    %eax,%r14d
mov    %r15,%rdi
mov    %r14d,%esi
call   1050 <fb_hStrRadix2Longint@plt>
cvtsi2sd %rax,%xmm0
add    $0x10,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret
xor    %edx,%edx
test   $0x1,%al
jne    1370 <fb_hStr2Double+0x220>
jmp    13b4 <fb_hStr2Double+0x264>

LLVM IR (-O0):
define double @fb_hStr2Double(i8* %0, i32 %1) {
%3 = alloca double
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca double
store i8* %0, i8** %4
store i32 %1, i32* %5
%13 = load i8*, i8** %4
%14 = load i32, i32* %5
%15 = call i8* @fb_hStrSkipChar(i8* %13, i32 %14, i32 32)
store i8* %15, i8** %6
%16 = load i8*, i8** %6
%17 = load i8*, i8** %4
%18 = ptrtoint i8* %16 to i64
%19 = ptrtoint i8* %17 to i64
%20 = sub i64 %18, %19
%21 = trunc i64 %20 to i32
%22 = load i32, i32* %5
%23 = sub nsw i32 %22, %21
store i32 %23, i32* %5
%24 = load i32, i32* %5
%25 = icmp slt i32 %24, 1
br i1 %25, label %26, label %27
26: ; preds = %2
store double 0.000000e+00, double* %3
br label %104
27: ; preds = %2
%28 = load i32, i32* %5
%29 = icmp sge i32 %28, 2
br i1 %29, label %30, label %60
30: ; preds = %27
%31 = load i8*, i8** %6
%32 = getelementptr inbounds i8, i8* %31, i64 0
%33 = load i8, i8* %32
%34 = sext i8 %33 to i32
%35 = icmp eq i32 %34, 38
br i1 %35, label %36, label %60
36: ; preds = %30
store i32 2, i32* %11
store i32 0, i32* %9
%37 = load i8*, i8** %6
%38 = getelementptr inbounds i8, i8* %37, i64 1
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
switch i32 %40, label %44 [
i32 104, label %41
i32 72, label %41
i32 111, label %42
i32 79, label %42
i32 98, label %43
i32 66, label %43
]
41: ; preds = %36, %36
store i32 16, i32* %9
br label %45
42: ; preds = %36, %36
store i32 8, i32* %9
br label %45
43: ; preds = %36, %36
store i32 2, i32* %9
br label %45
44: ; preds = %36
store i32 8, i32* %9
store i32 1, i32* %11
br label %45
45: ; preds = %44, %43, %42, %41
%46 = load i32, i32* %9
%47 = icmp ne i32 %46, 0
br i1 %47, label %48, label %59
48: ; preds = %45
%49 = load i8*, i8** %6
%50 = load i32, i32* %11
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i8, i8* %49, i64 %51
%53 = load i32, i32* %5
%54 = load i32, i32* %11
%55 = sub nsw i32 %53, %54
%56 = load i32, i32* %9
%57 = call i64 @fb_hStrRadix2Longint(i8* %52, i32 %55, i32 %56)
%58 = sitofp i64 %57 to double
store double %58, double* %3
br label %104
59: ; preds = %45
br label %60
60: ; preds = %59, %30, %27
br label %61
61: ; preds = %60
%62 = load i32, i32* %5
%63 = add nsw i32 %62, 1
%64 = call i8* @malloc(i32 %63)
store i8* %64, i8** %7
store i32 0, i32* %10
br label %65
65: ; preds = %91, %61
%66 = load i32, i32* %10
%67 = load i32, i32* %5
%68 = icmp slt i32 %66, %67
br i1 %68, label %69, label %94
69: ; preds = %65
%70 = load i8*, i8** %6
%71 = load i32, i32* %10
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i8, i8* %70, i64 %72
%74 = load i8, i8* %73
store i8 %74, i8* %8
%75 = load i8, i8* %8
%76 = sext i8 %75 to i32
%77 = icmp eq i32 %76, 100
br i1 %77, label %82, label %78
78: ; preds = %69
%79 = load i8, i8* %8
%80 = sext i8 %79 to i32
%81 = icmp eq i32 %80, 68
br i1 %81, label %82, label %85
82: ; preds = %78, %69
%83 = load i8, i8* %8
%84 = add i8 %83, 1
store i8 %84, i8* %8
br label %85
85: ; preds = %82, %78
%86 = load i8, i8* %8
%87 = load i8*, i8** %7
%88 = load i32, i32* %10
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds i8, i8* %87, i64 %89
store i8 %86, i8* %90
br label %91
91: ; preds = %85
%92 = load i32, i32* %10
%93 = add nsw i32 %92, 1
store i32 %93, i32* %10
br label %65
94: ; preds = %65
%95 = load i8*, i8** %7
%96 = load i32, i32* %5
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds i8, i8* %95, i64 %97
store i8 0, i8* %98
%99 = load i8*, i8** %7
%100 = call double @strtod(i8* %99, i32 0)
store double %100, double* %12
%101 = load i8*, i8** %7
%102 = call i32 @free(i8* %101)
%103 = load double, double* %12
store double %103, double* %3
br label %104
104: ; preds = %94, %48, %26
%105 = load double, double* %3
ret double %105
}

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