#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 */
double atof(char *);
scalar_t__ atoi(char *);
int isnum(char *);
char *strchr(char *, char);
int strlen(char *);
char *strnsrch(char *, char *, int);
char *strsrch(char *, char *);
double str2dec(const char *in) {
  double dec;
  double deg, min, sec, sign;
  char *value, *c1, *c2;
  int lval;
  char *dchar;
  dec = 0.0;
  if (in == NULL) {
    return (dec);
  }
  if (in[0]) {
    value = (char *)in;
    while (*value == ' ') {
      value++;
    }
    if (*value == '-') {
      sign = -1.0;
      value++;
    } else if (*value == '+') {
      sign = 1.0;
      value++;
    } else {
      sign = 1.0;
    }
    lval = strlen(value);
    while (value[lval - 1] == ' ') {
      lval--;
    }
    if ((c1 = strsrch(value, ":")) == NULL) {
      c1 = strnsrch(value, " ", lval);
    }
    if (c1 != NULL) {
      *c1 = 0;
      deg = (double)atoi(value);
      *c1 = ':';
      value = c1 + 1;
      if ((c2 = strsrch(value, ":")) == NULL) {
        c2 = strsrch(value, " ");
      }
      if (c2 != NULL) {
        *c2 = 0;
        min = (double)atoi(value);
        *c2 = ':';
        value = c2 + 1;
        sec = atof(value);
      } else {
        sec = 0.0;
        if ((c1 = strsrch(value, ".")) != NULL) {
          min = atof(value);
        }
        if (strlen(value) > 0) {
          min = (double)atoi(value);
        }
      }
      dec = sign * (deg + (min / 60.0) + (sec / 3600.0));
    } else if (isnum(value) == 2) {
      if ((dchar = strchr(value, 'D'))) {
        *dchar = 'e';
      }
      if ((dchar = strchr(value, 'd'))) {
        *dchar = 'e';
      }
      if ((dchar = strchr(value, 'E'))) {
        *dchar = 'e';
      }
      dec = sign * atof(value);
    } else {
      dec = sign * (double)atoi(value);
    }
  }
  return (dec);
}


x86 assembly (clang, -O0):
<str2dec>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    119e <str2dec+0x2e>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14de <str2dec+0x36e>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     14d4 <str2dec+0x364>
mov    -0x10(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    11d4 <str2dec+0x64>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    11b3 <str2dec+0x43>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1202 <str2dec+0x92>
movsd  0xe1c(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    1242 <str2dec+0xd2>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    1230 <str2dec+0xc0>
movsd  0xde6(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    123d <str2dec+0xcd>
movsd  0xdc8(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    1242 <str2dec+0xd2>
mov    -0x40(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x54(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    1276 <str2dec+0x106>
mov    -0x54(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x54(%rbp)
jmp    124e <str2dec+0xde>
mov    -0x40(%rbp),%rdi
lea    0xd9f(%rip),%rsi
call   1040 <strsrch@plt>
mov    %rax,-0x48(%rbp)
cmp    $0x0,%rax
jne    12ab <str2dec+0x13b>
mov    -0x40(%rbp),%rdi
mov    -0x54(%rbp),%edx
lea    0xd80(%rip),%rsi
call   1090 <strnsrch@plt>
mov    %rax,-0x48(%rbp)
cmpq   $0x0,-0x48(%rbp)
je     1400 <str2dec+0x290>
mov    -0x48(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x40(%rbp),%rdi
call   1080 <atoi@plt>
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x48(%rbp),%rax
movb   $0x3a,(%rax)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rdi
lea    0xd32(%rip),%rsi
call   1040 <strsrch@plt>
mov    %rax,-0x50(%rbp)
cmp    $0x0,%rax
jne    1315 <str2dec+0x1a5>
mov    -0x40(%rbp),%rdi
lea    0xd16(%rip),%rsi
call   1040 <strsrch@plt>
mov    %rax,-0x50(%rbp)
cmpq   $0x0,-0x50(%rbp)
je     1360 <str2dec+0x1f0>
mov    -0x50(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x40(%rbp),%rdi
call   1080 <atoi@plt>
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x50(%rbp),%rax
movb   $0x3a,(%rax)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rdi
call   1030 <atof@plt>
movsd  %xmm0,-0x30(%rbp)
jmp    13be <str2dec+0x24e>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x40(%rbp),%rdi
lea    0xcb1(%rip),%rsi
call   1040 <strsrch@plt>
mov    %rax,-0x48(%rbp)
cmp    $0x0,%rax
je     1394 <str2dec+0x224>
mov    -0x40(%rbp),%rdi
call   1030 <atof@plt>
movsd  %xmm0,-0x28(%rbp)
mov    -0x40(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x0,%eax
jle    13b9 <str2dec+0x249>
mov    -0x40(%rbp),%rdi
call   1080 <atoi@plt>
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    13be <str2dec+0x24e>
movsd  -0x38(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
movsd  0xc43(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  0xc26(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    14cf <str2dec+0x35f>
mov    -0x40(%rbp),%rdi
call   1070 <isnum@plt>
cmp    $0x2,%eax
jne    14a4 <str2dec+0x334>
mov    -0x40(%rbp),%rdi
mov    $0x44,%esi
call   1060 <strchr@plt>
mov    %rax,-0x60(%rbp)
cmp    $0x0,%rax
je     1435 <str2dec+0x2c5>
mov    -0x60(%rbp),%rax
movb   $0x65,(%rax)
mov    -0x40(%rbp),%rdi
mov    $0x64,%esi
call   1060 <strchr@plt>
mov    %rax,-0x60(%rbp)
cmp    $0x0,%rax
je     1458 <str2dec+0x2e8>
mov    -0x60(%rbp),%rax
movb   $0x65,(%rax)
mov    -0x40(%rbp),%rdi
mov    $0x45,%esi
call   1060 <strchr@plt>
mov    %rax,-0x60(%rbp)
cmp    $0x0,%rax
je     147b <str2dec+0x30b>
mov    -0x60(%rbp),%rax
movb   $0x65,(%rax)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x40(%rbp),%rdi
call   1030 <atof@plt>
movaps %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    14ca <str2dec+0x35a>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x40(%rbp),%rdi
call   1080 <atoi@plt>
movsd  -0x70(%rbp),%xmm0
cvtsi2sd %rax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    14cf <str2dec+0x35f>
jmp    14d4 <str2dec+0x364>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<str2dec>:
push   %rbp
push   %r14
push   %rbx
sub    $0x20,%rsp
xorpd  %xmm0,%xmm0
test   %rdi,%rdi
je     12d9 <str2dec+0x169>
mov    %rdi,%rbx
mov    (%rdi),%al
test   %al,%al
jne    11a3 <str2dec+0x33>
jmp    12d9 <str2dec+0x169>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rbx),%eax
add    $0x1,%rbx
cmp    $0x20,%al
je     11a0 <str2dec+0x30>
cmp    $0x2b,%al
je     11c1 <str2dec+0x51>
cmp    $0x2d,%al
jne    11bd <str2dec+0x4d>
movsd  0xe4d(%rip),%xmm0
jmp    11c9 <str2dec+0x59>
add    $0xffffffffffffffff,%rbx
movsd  0xe37(%rip),%xmm0
movsd  %xmm0,(%rsp)
mov    %rbx,%rdi
call   1050 <strlen@plt>
cltq
lea    0x1(%rax),%ebp
add    %rbx,%rax
add    $0xffffffffffffffff,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0xffffffff,%ebp
cmpb   $0x20,(%rax)
lea    -0x1(%rax),%rax
je     11f0 <str2dec+0x80>
lea    0xe1d(%rip),%rsi
mov    %rbx,%rdi
call   1040 <strsrch@plt>
mov    %rax,%r14
test   %rax,%rax
jne    1230 <str2dec+0xc0>
lea    0xe08(%rip),%rsi
mov    %rbx,%rdi
mov    %ebp,%edx
call   1090 <strnsrch@plt>
mov    %rax,%r14
test   %rax,%rax
je     12e2 <str2dec+0x172>
movb   $0x0,(%r14)
mov    %rbx,%rdi
call   1080 <atoi@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,0x8(%rsp)
movb   $0x3a,(%r14)
add    $0x1,%r14
lea    0xdc7(%rip),%rsi
mov    %r14,%rdi
call   1040 <strsrch@plt>
mov    %rax,%rbx
test   %rax,%rax
jne    1284 <str2dec+0x114>
lea    0xdb2(%rip),%rsi
mov    %r14,%rdi
call   1040 <strsrch@plt>
mov    %rax,%rbx
test   %rax,%rax
je     1338 <str2dec+0x1c8>
movb   $0x0,(%rbx)
mov    %r14,%rdi
call   1080 <atoi@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movapd %xmm0,0x10(%rsp)
movb   $0x3a,(%rbx)
add    $0x1,%rbx
mov    %rbx,%rdi
call   1030 <atof@plt>
movapd 0x10(%rsp),%xmm2
unpcklpd %xmm0,%xmm2
movsd  (%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
divpd  0xd47(%rip),%xmm2
addsd  %xmm2,%xmm1
unpckhpd %xmm2,%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm0
add    $0x20,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret
mov    %rbx,%rdi
call   1070 <isnum@plt>
cmp    $0x2,%eax
jne    135c <str2dec+0x1ec>
mov    %rbx,%rdi
mov    $0x44,%esi
call   1060 <strchr@plt>
test   %rax,%rax
je     1304 <str2dec+0x194>
movb   $0x65,(%rax)
mov    %rbx,%rdi
mov    $0x64,%esi
call   1060 <strchr@plt>
test   %rax,%rax
je     1319 <str2dec+0x1a9>
movb   $0x65,(%rax)
mov    %rbx,%rdi
mov    $0x45,%esi
call   1060 <strchr@plt>
test   %rax,%rax
je     132e <str2dec+0x1be>
movb   $0x65,(%rax)
mov    %rbx,%rdi
call   1030 <atof@plt>
jmp    136c <str2dec+0x1fc>
lea    0xce5(%rip),%rsi
mov    %r14,%rdi
call   1040 <strsrch@plt>
test   %rax,%rax
je     137e <str2dec+0x20e>
mov    %r14,%rdi
call   1030 <atof@plt>
movapd %xmm0,0x10(%rsp)
jmp    137e <str2dec+0x20e>
mov    %rbx,%rdi
call   1080 <atoi@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  (%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
jmp    12d9 <str2dec+0x169>
mov    %r14,%rdi
call   1050 <strlen@plt>
test   %eax,%eax
jle    13a3 <str2dec+0x233>
mov    %r14,%rdi
call   1080 <atoi@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movq   %xmm0,%xmm2
jmp    12b6 <str2dec+0x146>
movq   0x10(%rsp),%xmm2
jmp    12b6 <str2dec+0x146>

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

LLVM IR (-O2):
@.str = [2 x i8] c":\00"
@.str.1 = [2 x i8] c" \00"
@.str.2 = [2 x i8] c".\00"
define double @str2dec(i8* %0) {
%2 = icmp eq i8* %0, null
br i1 %2, label %96, label %3
3: ; preds = %1
%4 = load i8, i8* %0
%5 = icmp eq i8 %4, 0
br i1 %5, label %96, label %6
6: ; preds = %3, %9
%7 = phi i8 [ %11, %9 ], [ %4, %3 ]
%8 = phi i8* [ %10, %9 ], [ %0, %3 ]
switch i8 %7, label %16 [
i8 32, label %9
i8 45, label %12
i8 43, label %14
]
9: ; preds = %6
%10 = getelementptr inbounds i8, i8* %8, i64 1
%11 = load i8, i8* %10
br label %6
12: ; preds = %6
%13 = getelementptr inbounds i8, i8* %8, i64 1
br label %16
14: ; preds = %6
%15 = getelementptr inbounds i8, i8* %8, i64 1
br label %16
16: ; preds = %6, %14, %12
%17 = phi double [ -1.000000e+00, %12 ], [ 1.000000e+00, %14 ], [ 1.000000e+00, %6 ]
%18 = phi i8* [ %13, %12 ], [ %15, %14 ], [ %8, %6 ]
%19 = tail call i32 @strlen(i8* %18)
%20 = sext i32 %19 to i64
br label %21
21: ; preds = %21, %16
%22 = phi i64 [ %23, %21 ], [ %20, %16 ]
%23 = add i64 %22, -1
%24 = getelementptr inbounds i8, i8* %18, i64 %23
%25 = load i8, i8* %24
%26 = icmp eq i8 %25, 32
br i1 %26, label %21, label %27
27: ; preds = %21
%28 = tail call i8* @strsrch(i8* %18, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%29 = icmp eq i8* %28, null
br i1 %29, label %30, label %34
30: ; preds = %27
%31 = trunc i64 %22 to i32
%32 = tail call i8* @strnsrch(i8* %18, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i32 %31)
%33 = icmp eq i8* %32, null
br i1 %33, label %74, label %34
34: ; preds = %27, %30
%35 = phi i8* [ %32, %30 ], [ %28, %27 ]
store i8 0, i8* %35
%36 = tail call i64 @atoi(i8* %18)
%37 = sitofp i64 %36 to double
store i8 58, i8* %35
%38 = getelementptr inbounds i8, i8* %35, i64 1
%39 = tail call i8* @strsrch(i8* %38, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%40 = icmp eq i8* %39, null
br i1 %40, label %41, label %44
41: ; preds = %34
%42 = tail call i8* @strsrch(i8* %38, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%43 = icmp eq i8* %42, null
br i1 %43, label %52, label %44
44: ; preds = %34, %41
%45 = phi i8* [ %42, %41 ], [ %39, %34 ]
store i8 0, i8* %45
%46 = tail call i64 @atoi(i8* %38)
%47 = sitofp i64 %46 to double
store i8 58, i8* %45
%48 = getelementptr inbounds i8, i8* %45, i64 1
%49 = tail call double @atof(i8* %48)
%50 = insertelement <2 x double> poison, double %47, i64 0
%51 = insertelement <2 x double> %50, double %49, i64 1
br label %66
52: ; preds = %41
%53 = tail call i8* @strsrch(i8* %38, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%54 = icmp eq i8* %53, null
br i1 %54, label %57, label %55
55: ; preds = %52
%56 = tail call double @atof(i8* %38)
br label %57
57: ; preds = %55, %52
%58 = phi double [ %56, %55 ], [ undef, %52 ]
%59 = tail call i32 @strlen(i8* %38)
%60 = icmp sgt i32 %59, 0
%61 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %58, i64 0
br i1 %60, label %62, label %66
62: ; preds = %57
%63 = tail call i64 @atoi(i8* %38)
%64 = sitofp i64 %63 to double
%65 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %64, i64 0
br label %66
66: ; preds = %57, %62, %44
%67 = phi <2 x double> [ %51, %44 ], [ %65, %62 ], [ %61, %57 ]
%68 = fdiv <2 x double> %67, <double 6.000000e+01, double 3.600000e+03>
%69 = extractelement <2 x double> %68, i64 0
%70 = fadd double %69, %37
%71 = extractelement <2 x double> %68, i64 1
%72 = fadd double %70, %71
%73 = fmul double %17, %72
br label %96
74: ; preds = %30
%75 = tail call i32 @isnum(i8* %18)
%76 = icmp eq i32 %75, 2
br i1 %76, label %77, label %92
77: ; preds = %74
%78 = tail call i8* @strchr(i8* %18, i8 signext 68)
%79 = icmp eq i8* %78, null
br i1 %79, label %81, label %80
80: ; preds = %77
store i8 101, i8* %78
br label %81
81: ; preds = %80, %77
%82 = tail call i8* @strchr(i8* %18, i8 signext 100)
%83 = icmp eq i8* %82, null
br i1 %83, label %85, label %84
84: ; preds = %81
store i8 101, i8* %82
br label %85
85: ; preds = %84, %81
%86 = tail call i8* @strchr(i8* %18, i8 signext 69)
%87 = icmp eq i8* %86, null
br i1 %87, label %89, label %88
88: ; preds = %85
store i8 101, i8* %86
br label %89
89: ; preds = %88, %85
%90 = tail call double @atof(i8* %18)
%91 = fmul double %17, %90
br label %96
92: ; preds = %74
%93 = tail call i64 @atoi(i8* %18)
%94 = sitofp i64 %93 to double
%95 = fmul double %17, %94
br label %96
96: ; preds = %3, %89, %92, %66, %1
%97 = phi double [ 0.000000e+00, %1 ], [ %73, %66 ], [ %91, %89 ], [ %95, %92 ], [ 0.000000e+00, %3 ]
ret double %97
}