#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 erfinv(double);
int /*<<< orphan*/ exit(int);
int /*<<< orphan*/ log(double);
int /*<<< orphan*/ printf(char *);
double sqrt(int /*<<< orphan*/);
double erfcinv(double x) {
  double oup, xinf, pi, t;
  xinf = 1.79e308;
  pi = 3.1415926535897932384626434;
  if (x > 2. || x < 0.) {
    printf("The Input takes values between 0.0 and 2.0");
    exit(1);
  }
  if (x >= 0.0625 && x < 2.0) {
    oup = erfinv(1.0 - x);
  } else if (x < 0.0625 && x >= 1.0e-100) {
    double p[6] = {0.1550470003116, 1.382719649631, 0.690969348887,
                   -1.128081391617, 0.680544246825, -0.16444156791};
    double q[3] = {0.155024849822, 1.385228141995, 1.000000000000};
    t = 1.0 / sqrt(-log(x));
    oup = (p[0] / t + p[1] + t * (p[2] + t * (p[3] + t * (p[4] + t * p[5])))) /
          (q[0] + t * (q[1] + t * (q[2])));
  } else if (x < 1.0e-100 && x > 1.0e-1000) {
    double p[4] = {0.00980456202915, 0.363667889171, 0.97302949837,
                   -0.5374947401};
    double q[3] = {0.00980451277802, 0.363699971544, 1.000000000000};
    t = 1.0 / sqrt(-log(x));
    oup = (p[0] / t + p[1] + t * (p[2] + t * p[3])) /
          (q[0] + t * (q[1] + t * (q[2])));
  } else if (x <= 1.0e-1000) {
    oup = xinf;
  } else if (x == 2.) {
    oup = -xinf;
  }
  return oup;
}


x86 assembly (clang, -O0):
<erfcinv>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  0xe98(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe83(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0xe69(%rip),%xmm1
ucomisd %xmm1,%xmm0
ja     11af <erfcinv+0x4f>
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    11c5 <erfcinv+0x65>
lea    0xeaa(%rip),%rdi
call   1040 <printf@plt>
mov    $0x1,%edi
call   1080 <exit@plt>
movsd  -0x8(%rbp),%xmm0
movsd  0xe46(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     120b <erfcinv+0xab>
movsd  0xe1c(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    120b <erfcinv+0xab>
movsd  0xe31(%rip),%xmm0
subsd  -0x8(%rbp),%xmm0
call   1030 <erfinv@plt>
movsd  %xmm0,-0x10(%rbp)
jmp    1507 <erfcinv+0x3a7>
movsd  0xe05(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    136b <erfcinv+0x20b>
movsd  -0x8(%rbp),%xmm0
movsd  0xdf5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     136b <erfcinv+0x20b>
lea    -0x60(%rbp),%rdi
xor    %esi,%esi
mov    $0x30,%edx
call   1050 <memset@plt>
movsd  0xe0b(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xdf6(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xde1(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xdcc(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xdb7(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xda2(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    0xdf6(%rip),%rax
mov    %rax,-0x80(%rbp)
mov    0xdf3(%rip),%rax
mov    %rax,-0x78(%rbp)
mov    0xdf0(%rip),%rax
mov    %rax,-0x70(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1060 <log@plt>
xor    %edi,%edi
sub    %eax,%edi
call   1070 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0xd56(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x60(%rbp),%xmm1
divsd  -0x28(%rbp),%xmm1
addsd  -0x58(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm3
movsd  -0x28(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm5
movsd  -0x28(%rbp),%xmm4
movsd  -0x40(%rbp),%xmm7
movsd  -0x28(%rbp),%xmm6
movsd  -0x38(%rbp),%xmm8
mulsd  %xmm8,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm4
movsd  -0x28(%rbp),%xmm3
movsd  -0x70(%rbp),%xmm5
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    1502 <erfcinv+0x3a2>
movsd  0xcad(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    1498 <erfcinv+0x338>
movsd  -0x8(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1498 <erfcinv+0x338>
mov    0xd39(%rip),%rax
mov    %rax,-0xa0(%rbp)
mov    0xd33(%rip),%rax
mov    %rax,-0x98(%rbp)
mov    0xd2d(%rip),%rax
mov    %rax,-0x90(%rbp)
mov    0xd27(%rip),%rax
mov    %rax,-0x88(%rbp)
mov    0xce1(%rip),%rax
mov    %rax,-0xc0(%rbp)
mov    0xcdb(%rip),%rax
mov    %rax,-0xb8(%rbp)
mov    0xcd5(%rip),%rax
mov    %rax,-0xb0(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1060 <log@plt>
xor    %edi,%edi
sub    %eax,%edi
call   1070 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0xc18(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0xa0(%rbp),%xmm1
ff
divsd  -0x28(%rbp),%xmm1
addsd  -0x98(%rbp),%xmm1
ff
movsd  -0x28(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm3
ff
movsd  -0x28(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm4
ff
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xc0(%rbp),%xmm2
ff
movsd  -0x28(%rbp),%xmm1
movsd  -0xb8(%rbp),%xmm4
ff
movsd  -0x28(%rbp),%xmm3
movsd  -0xb0(%rbp),%xmm5
ff
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    14fd <erfcinv+0x39d>
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jb     14b5 <erfcinv+0x355>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    14f8 <erfcinv+0x398>
movsd  -0x8(%rbp),%xmm0
movsd  0xb3e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    14f3 <erfcinv+0x393>
jp     14f3 <erfcinv+0x393>
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    14f8 <erfcinv+0x398>
jmp    14fd <erfcinv+0x39d>
jmp    1502 <erfcinv+0x3a2>
jmp    1507 <erfcinv+0x3a7>
movsd  -0x10(%rbp),%xmm0
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<erfcinv>:
push   %rax
ucomisd 0xea7(%rip),%xmm0
ja     12d1 <erfcinv+0x181>
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
ja     12d1 <erfcinv+0x181>
ucomisd 0xe93(%rip),%xmm0
jb     119b <erfcinv+0x4b>
movsd  0xe81(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    119b <erfcinv+0x4b>
movsd  0xe9b(%rip),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
pop    %rax
jmp    1030 <erfinv@plt>
movsd  0xe65(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    1233 <erfcinv+0xe3>
ucomisd 0xe5b(%rip),%xmm0
jb     1233 <erfcinv+0xe3>
call   1050 <log@plt>
neg    %eax
mov    %eax,%edi
call   1060 <sqrt@plt>
movsd  0xe5b(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0xe87(%rip),%xmm2
divsd  %xmm1,%xmm2
addsd  0xe83(%rip),%xmm2
movsd  0xe83(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe7f(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe7b(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe77(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
movsd  0xe6f(%rip),%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm1,%xmm2
addsd  0xe67(%rip),%xmm2
jmp    12ad <erfcinv+0x15d>
movsd  0xdd5(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    12b3 <erfcinv+0x163>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12b3 <erfcinv+0x163>
call   1050 <log@plt>
neg    %eax
mov    %eax,%edi
call   1060 <sqrt@plt>
movsd  0xdc7(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0xdc3(%rip),%xmm2
divsd  %xmm1,%xmm2
addsd  0xdbf(%rip),%xmm2
movsd  0xdbf(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdbb(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
movsd  0xdb3(%rip),%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm1,%xmm2
addsd  0xdab(%rip),%xmm2
divsd  %xmm2,%xmm0
pop    %rax
ret
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jae    12c7 <erfcinv+0x177>
movsd  0xd5b(%rip),%xmm0
pop    %rax
ret
movsd  0xd49(%rip),%xmm0
pop    %rax
ret
lea    0xdc8(%rip),%rdi
call   1040 <printf@plt>
mov    $0x1,%edi
call   1070 <exit@plt>

LLVM IR (-O0):
@.str = [43 x i8] c"The Input takes values between 0.0 and 2.0\00"
@__const.erfcinv.q = [3 x double] [double 0x3FC3D7DAB206C232, double 0x3FF629E4FBF5E0BF, double 1.000000e+00]
@__const.erfcinv.p = [4 x double] [double 0x3F84146A0A22696D, double 0x3FD74655AEA6112A, double 0x3FEF230EC2315BA1, double 0xBFE133282B500C73]
@__const.erfcinv.q.1 = [3 x double] [double 0x3F8414636DE0E412, double 0x3FD746DC3ED59B6A, double 1.000000e+00]
define double @erfcinv(double %0) {
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca [6 x double]
%8 = alloca [3 x double]
%9 = alloca [4 x double]
%10 = alloca [3 x double]
store double %0, double* %2
store double 1.790000e+308, double* %4
store double 0x400921FB54442D18, double* %5
%11 = load double, double* %2
%12 = fcmp ogt double %11, 2.000000e+00
br i1 %12, label %16, label %13
13: ; preds = %1
%14 = load double, double* %2
%15 = fcmp olt double %14, 0.000000e+00
br i1 %15, label %16, label %19
16: ; preds = %13, %1
%17 = call i32 @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str, i64 0, i64 0))
%18 = call i32 @exit(i32 1)
unreachable
19: ; preds = %13
%20 = load double, double* %2
%21 = fcmp oge double %20, 6.250000e-02
br i1 %21, label %22, label %29
22: ; preds = %19
%23 = load double, double* %2
%24 = fcmp olt double %23, 2.000000e+00
br i1 %24, label %25, label %29
25: ; preds = %22
%26 = load double, double* %2
%27 = fsub double 1.000000e+00, %26
%28 = call double @erfinv(double %27)
store double %28, double* %3
br label %139
29: ; preds = %22, %19
%30 = load double, double* %2
%31 = fcmp olt double %30, 6.250000e-02
br i1 %31, label %32, label %84
32: ; preds = %29
%33 = load double, double* %2
%34 = fcmp oge double %33, 1.000000e-100
br i1 %34, label %35, label %84
35: ; preds = %32
%36 = bitcast [6 x double]* %7 to i8*
%37 = bitcast i8* %36 to [6 x double]*
%38 = getelementptr inbounds [6 x double], [6 x double]* %37, i32 0, i32 0
store double 0x3FC3D89481D73257, double* %38
%39 = getelementptr inbounds [6 x double], [6 x double]* %37, i32 0, i32 1
store double 0x3FF61F9EA3AB3A42, double* %39
%40 = getelementptr inbounds [6 x double], [6 x double]* %37, i32 0, i32 2
store double 0x3FE61C6BC080422F, double* %40
%41 = getelementptr inbounds [6 x double], [6 x double]* %37, i32 0, i32 3
store double 0xBFF20C9F12C389F8, double* %41
%42 = getelementptr inbounds [6 x double], [6 x double]* %37, i32 0, i32 4
store double 0x3FE5C704BA7304BA, double* %42
%43 = getelementptr inbounds [6 x double], [6 x double]* %37, i32 0, i32 5
store double 0xBFC50C6BDA236181, double* %43
%44 = bitcast [3 x double]* %8 to i8*
%45 = load double, double* %2
%46 = call i32 @log(double %45)
%47 = sub nsw i32 0, %46
%48 = call double @sqrt(i32 %47)
%49 = fdiv double 1.000000e+00, %48
store double %49, double* %6
%50 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 0
%51 = load double, double* %50
%52 = load double, double* %6
%53 = fdiv double %51, %52
%54 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 1
%55 = load double, double* %54
%56 = fadd double %53, %55
%57 = load double, double* %6
%58 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 2
%59 = load double, double* %58
%60 = load double, double* %6
%61 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 3
%62 = load double, double* %61
%63 = load double, double* %6
%64 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 4
%65 = load double, double* %64
%66 = load double, double* %6
%67 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 5
%68 = load double, double* %67
%69 = call double @llvm.fmuladd.f64(double %66, double %68, double %65)
%70 = call double @llvm.fmuladd.f64(double %63, double %69, double %62)
%71 = call double @llvm.fmuladd.f64(double %60, double %70, double %59)
%72 = call double @llvm.fmuladd.f64(double %57, double %71, double %56)
%73 = getelementptr inbounds [3 x double], [3 x double]* %8, i64 0, i64 0
%74 = load double, double* %73
%75 = load double, double* %6
%76 = getelementptr inbounds [3 x double], [3 x double]* %8, i64 0, i64 1
%77 = load double, double* %76
%78 = load double, double* %6
%79 = getelementptr inbounds [3 x double], [3 x double]* %8, i64 0, i64 2
%80 = load double, double* %79
%81 = call double @llvm.fmuladd.f64(double %78, double %80, double %77)
%82 = call double @llvm.fmuladd.f64(double %75, double %81, double %74)
%83 = fdiv double %72, %82
store double %83, double* %3
br label %138
84: ; preds = %32, %29
%85 = load double, double* %2
%86 = fcmp olt double %85, 1.000000e-100
br i1 %86, label %87, label %124
87: ; preds = %84
%88 = load double, double* %2
%89 = fcmp ogt double %88, 0.000000e+00
br i1 %89, label %90, label %124
90: ; preds = %87
%91 = bitcast [4 x double]* %9 to i8*
%92 = bitcast [3 x double]* %10 to i8*
%93 = load double, double* %2
%94 = call i32 @log(double %93)
%95 = sub nsw i32 0, %94
%96 = call double @sqrt(i32 %95)
%97 = fdiv double 1.000000e+00, %96
store double %97, double* %6
%98 = getelementptr inbounds [4 x double], [4 x double]* %9, i64 0, i64 0
%99 = load double, double* %98
%100 = load double, double* %6
%101 = fdiv double %99, %100
%102 = getelementptr inbounds [4 x double], [4 x double]* %9, i64 0, i64 1
%103 = load double, double* %102
%104 = fadd double %101, %103
%105 = load double, double* %6
%106 = getelementptr inbounds [4 x double], [4 x double]* %9, i64 0, i64 2
%107 = load double, double* %106
%108 = load double, double* %6
%109 = getelementptr inbounds [4 x double], [4 x double]* %9, i64 0, i64 3
%110 = load double, double* %109
%111 = call double @llvm.fmuladd.f64(double %108, double %110, double %107)
%112 = call double @llvm.fmuladd.f64(double %105, double %111, double %104)
%113 = getelementptr inbounds [3 x double], [3 x double]* %10, i64 0, i64 0
%114 = load double, double* %113
%115 = load double, double* %6
%116 = getelementptr inbounds [3 x double], [3 x double]* %10, i64 0, i64 1
%117 = load double, double* %116
%118 = load double, double* %6
%119 = getelementptr inbounds [3 x double], [3 x double]* %10, i64 0, i64 2
%120 = load double, double* %119
%121 = call double @llvm.fmuladd.f64(double %118, double %120, double %117)
%122 = call double @llvm.fmuladd.f64(double %115, double %121, double %114)
%123 = fdiv double %112, %122
store double %123, double* %3
br label %137
124: ; preds = %87, %84
%125 = load double, double* %2
%126 = fcmp ole double %125, 0.000000e+00
br i1 %126, label %127, label %129
127: ; preds = %124
%128 = load double, double* %4
store double %128, double* %3
br label %136
129: ; preds = %124
%130 = load double, double* %2
%131 = fcmp oeq double %130, 2.000000e+00
br i1 %131, label %132, label %135
132: ; preds = %129
%133 = load double, double* %4
%134 = fneg double %133
store double %134, double* %3
br label %135
135: ; preds = %132, %129
br label %136
136: ; preds = %135, %127
br label %137
137: ; preds = %136, %90
br label %138
138: ; preds = %137, %35
br label %139
139: ; preds = %138, %25
%140 = load double, double* %3
ret double %140
}

LLVM IR (-O2):
@.str = [43 x i8] c"The Input takes values between 0.0 and 2.0\00"
define double @erfcinv(double %0) {
%2 = fcmp ogt double %0, 2.000000e+00
%3 = fcmp olt double %0, 0.000000e+00
%4 = or i1 %2, %3
br i1 %4, label %5, label %8
5: ; preds = %1
%6 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @.str, i64 0, i64 0))
%7 = tail call i32 @exit(i32 1)
unreachable
8: ; preds = %1
%9 = fcmp oge double %0, 6.250000e-02
%10 = fcmp olt double %0, 2.000000e+00
%11 = and i1 %9, %10
br i1 %11, label %12, label %15
12: ; preds = %8
%13 = fsub double 1.000000e+00, %0
%14 = tail call double @erfinv(double %13)
br label %52
15: ; preds = %8
%16 = fcmp olt double %0, 6.250000e-02
%17 = fcmp oge double %0, 1.000000e-100
%18 = and i1 %16, %17
br i1 %18, label %19, label %33
19: ; preds = %15
%20 = tail call i32 @log(double %0)
%21 = sub nsw i32 0, %20
%22 = tail call double @sqrt(i32 %21)
%23 = fdiv double 1.000000e+00, %22
%24 = fdiv double 0x3FC3D89481D73257, %23
%25 = fadd double %24, 0x3FF61F9EA3AB3A42
%26 = tail call double @llvm.fmuladd.f64(double %23, double 0xBFC50C6BDA236181, double 0x3FE5C704BA7304BA)
%27 = tail call double @llvm.fmuladd.f64(double %23, double %26, double 0xBFF20C9F12C389F8)
%28 = tail call double @llvm.fmuladd.f64(double %23, double %27, double 0x3FE61C6BC080422F)
%29 = tail call double @llvm.fmuladd.f64(double %23, double %28, double %25)
%30 = fadd double %23, 0x3FF629E4FBF5E0BF
%31 = tail call double @llvm.fmuladd.f64(double %23, double %30, double 0x3FC3D7DAB206C232)
%32 = fdiv double %29, %31
br label %52
33: ; preds = %15
%34 = fcmp olt double %0, 1.000000e-100
%35 = fcmp ogt double %0, 0.000000e+00
%36 = and i1 %34, %35
br i1 %36, label %37, label %49
37: ; preds = %33
%38 = tail call i32 @log(double %0)
%39 = sub nsw i32 0, %38
%40 = tail call double @sqrt(i32 %39)
%41 = fdiv double 1.000000e+00, %40
%42 = fdiv double 0x3F84146A0A22696D, %41
%43 = fadd double %42, 0x3FD74655AEA6112A
%44 = tail call double @llvm.fmuladd.f64(double %41, double 0xBFE133282B500C73, double 0x3FEF230EC2315BA1)
%45 = tail call double @llvm.fmuladd.f64(double %41, double %44, double %43)
%46 = fadd double %41, 0x3FD746DC3ED59B6A
%47 = tail call double @llvm.fmuladd.f64(double %41, double %46, double 0x3F8414636DE0E412)
%48 = fdiv double %45, %47
br label %52
49: ; preds = %33
%50 = fcmp ugt double %0, 0.000000e+00
br i1 %50, label %51, label %52
51: ; preds = %49
br label %52
52: ; preds = %51, %49, %19, %37, %12
%53 = phi double [ %14, %12 ], [ %32, %19 ], [ %48, %37 ], [ 1.790000e+308, %49 ], [ -1.790000e+308, %51 ]
ret double %53
}