#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 DBL_MAX;
int /*<<< orphan*/ assert(int);
double fabs(double);
int /*<<< orphan*/ log(double);
double sqrt(int /*<<< orphan*/);
double unitqtlP(double prob) {
  double p, x;
  assert((prob >= 0) && (prob <= 1));
  if (prob >= 1.0)
    return DBL_MAX;
  if (prob <= 0.0)
    return -DBL_MAX;
  p = prob - 0.5;
  if (fabs(p) <= 0.425) {
    x = 0.180625 - p * p;
    x = (((((((2509.0809287301226727 * x + 33430.575583588128105) * x +
              67265.770927008700853) *
                 x +
             45921.953931549871457) *
                x +
            13731.693765509461125) *
               x +
           1971.5909503065514427) *
              x +
          133.14166789178437745) *
             x +
         3.387132872796366608) /
        (((((((5226.495278852854561 * x + 28729.085735721942674) * x +
              39307.89580009271061) *
                 x +
             21213.794301586595867) *
                x +
            5394.1960214247511077) *
               x +
           687.1870074920579083) *
              x +
          42.313330701600911252) *
             x +
         1.0);
    return p * x;
  }
  p = (prob > 0.5) ? 1 - prob : prob;
  x = sqrt(-log(p));
  if (x <= 5) {
    x -= 1.6;
    x = (((((((7.7454501427834140764e-4 * x + 0.0227238449892691845833) * x +
              0.24178072517745061177) *
                 x +
             1.27045825245236838258) *
                x +
            3.64784832476320460504) *
               x +
           5.7694972214606914055) *
              x +
          4.6303378461565452959) *
             x +
         1.42343711074968357734) /
        (((((((1.05075007164441684324e-9 * x + 5.475938084995344946e-4) * x +
              0.0151986665636164571966) *
                 x +
             0.14810397642748007459) *
                x +
            0.68976733498510000455) *
               x +
           1.6763848301838038494) *
              x +
          2.05319162663775882187) *
             x +
         1.0);
  } else {
    x -= 5;
    x = (((((((2.01033439929228813265e-7 * x + 2.71155556874348757815e-5) * x +
              0.0012426609473880784386) *
                 x +
             0.026532189526576123093) *
                x +
            0.29656057182850489123) *
               x +
           1.7848265399172913358) *
              x +
          5.4637849111641143699) *
             x +
         6.6579046435011037772) /
        (((((((2.04426310338993978564e-15 * x + 1.4215117583164458887e-7) * x +
              1.8463183175100546818e-5) *
                 x +
             7.868691311456132591e-4) *
                x +
            0.0148753612908506148525) *
               x +
           0.13692988092273580531) *
              x +
          0.59983220655588793769) *
             x +
         1.0);
  }
  return (prob < 0.5) ? -x : x;
}


x86 assembly (clang, -O0):
<unitqtlP>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x21(%rbp)
jb     1167 <unitqtlP+0x37>
movsd  0xea4(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
setae  %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <assert@plt>
movsd  -0x10(%rbp),%xmm0
movsd  0xe7f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11a0 <unitqtlP+0x70>
mov    0x2e4e(%rip),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1704 <unitqtlP+0x5d4>
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     11da <unitqtlP+0xaa>
mov    0x2e2b(%rip),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1704 <unitqtlP+0x5d4>
movsd  -0x10(%rbp),%xmm0
movsd  0xe29(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm1
movaps 0xfa4(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xe00(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     139b <unitqtlP+0x26b>
movsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xf51(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  0xf2b(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf27(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf02(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xee5(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xec8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xeab(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe8e(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe71(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  0xe50(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe4c(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe27(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe0a(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xded(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xdd0(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xdb3(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc86(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x18(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1704 <unitqtlP+0x5d4>
movsd  -0x10(%rbp),%xmm0
movsd  0xc68(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    13c9 <unitqtlP+0x299>
movsd  0xc46(%rip),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    13d3 <unitqtlP+0x2a3>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1040 <log@plt>
xor    %edi,%edi
sub    %eax,%edi
call   1050 <sqrt@plt>
movsd  %xmm0,-0x20(%rbp)
movsd  0xc1b(%rip),%xmm0
ucomisd -0x20(%rbp),%xmm0
jb     1562 <unitqtlP+0x432>
movsd  -0x20(%rbp),%xmm0
movsd  0xcfb(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  0xcd5(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcd1(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcac(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc8f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc72(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc55(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc38(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc1b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  0xbfa(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xbf6(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xbd1(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xbb4(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb97(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb7a(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb5d(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xab0(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    16b7 <unitqtlP+0x587>
movsd  -0x20(%rbp),%xmm0
movsd  0xaa9(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  0xb03(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xaff(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xada(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xabd(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xaa0(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa83(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa66(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa49(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  0xa28(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xa24(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x9ff(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x9e2(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x9c5(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x9a8(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x98b(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x956(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0x951(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    16f0 <unitqtlP+0x5c0>
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    16fa <unitqtlP+0x5ca>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<unitqtlP>:
sub    $0x18,%rsp
movapd %xmm0,(%rsp)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setae  %al
movsd  0xeb4(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %cl
and    %al,%cl
movzbl %cl,%edi
call   1030 <assert@plt>
movsd  0xe9b(%rip),%xmm5
movapd (%rsp),%xmm4
ucomisd %xmm5,%xmm4
jae    1256 <unitqtlP+0x126>
xorpd  %xmm0,%xmm0
ucomisd %xmm4,%xmm0
jae    1266 <unitqtlP+0x136>
movsd  0xe7e(%rip),%xmm3
addsd  %xmm4,%xmm3
movapd 0xeca(%rip),%xmm1
andpd  %xmm3,%xmm1
movsd  0xe6e(%rip),%xmm2
ucomisd %xmm1,%xmm2
jae    127d <unitqtlP+0x14d>
subsd  %xmm4,%xmm5
movsd  0xe68(%rip),%xmm0
cmpltsd %xmm4,%xmm0
andpd  %xmm0,%xmm5
andnpd %xmm4,%xmm0
orpd   %xmm5,%xmm0
call   1040 <log@plt>
neg    %eax
mov    %eax,%edi
call   1050 <sqrt@plt>
movsd  0xe49(%rip),%xmm1
ucomisd %xmm0,%xmm1
jae    1306 <unitqtlP+0x1d6>
addsd  0xe47(%rip),%xmm0
unpcklpd %xmm0,%xmm0
movapd 0xf73(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf77(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf7b(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf7f(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf83(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf87(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf8b(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf8f(%rip),%xmm1
jmp    136e <unitqtlP+0x23e>
mov    0x2d83(%rip),%rax
movsd  (%rax),%xmm0
add    $0x18,%rsp
ret
mov    0x2d73(%rip),%rax
movsd  (%rax),%xmm0
xorps  0xdd8(%rip),%xmm0
add    $0x18,%rsp
ret
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
movsd  0xd8b(%rip),%xmm2
subsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm2
movapd 0xdd3(%rip),%xmm0
mulpd  %xmm2,%xmm0
addpd  0xdd7(%rip),%xmm0
mulpd  %xmm2,%xmm0
addpd  0xddb(%rip),%xmm0
mulpd  %xmm2,%xmm0
addpd  0xddf(%rip),%xmm0
mulpd  %xmm2,%xmm0
addpd  0xde3(%rip),%xmm0
mulpd  %xmm2,%xmm0
addpd  0xde7(%rip),%xmm0
mulpd  %xmm2,%xmm0
addpd  0xdeb(%rip),%xmm0
mulpd  %xmm2,%xmm0
addpd  0xdef(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
divsd  %xmm1,%xmm0
mulsd  %xmm3,%xmm0
add    $0x18,%rsp
ret
addsd  0xd22(%rip),%xmm0
unpcklpd %xmm0,%xmm0
movapd 0xdd6(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdda(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdde(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xde2(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xde6(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdea(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdee(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdf2(%rip),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
divsd  %xmm0,%xmm1
movapd 0xcce(%rip),%xmm2
movapd (%rsp),%xmm0
cmpltsd 0xc90(%rip),%xmm0
xorpd  %xmm1,%xmm2
andpd  %xmm0,%xmm2
andnpd %xmm1,%xmm0
orpd   %xmm2,%xmm0
add    $0x18,%rsp
ret

LLVM IR (-O0):
@DBL_MAX = global double 0.000000e+00
define double @unitqtlP(double %0) {
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
store double %0, double* %3
%6 = load double, double* %3
%7 = fcmp oge double %6, 0.000000e+00
br i1 %7, label %8, label %11
8: ; preds = %1
%9 = load double, double* %3
%10 = fcmp ole double %9, 1.000000e+00
br label %11
11: ; preds = %8, %1
%12 = phi i1 [ false, %1 ], [ %10, %8 ]
%13 = zext i1 %12 to i32
%14 = call i32 @assert(i32 %13)
%15 = load double, double* %3
%16 = fcmp oge double %15, 1.000000e+00
br i1 %16, label %17, label %19
17: ; preds = %11
%18 = load double, double* @DBL_MAX
store double %18, double* %2
br label %158
19: ; preds = %11
%20 = load double, double* %3
%21 = fcmp ole double %20, 0.000000e+00
br i1 %21, label %22, label %25
22: ; preds = %19
%23 = load double, double* @DBL_MAX
%24 = fneg double %23
store double %24, double* %2
br label %158
25: ; preds = %19
%26 = load double, double* %3
%27 = fsub double %26, 5.000000e-01
store double %27, double* %4
%28 = load double, double* %4
%29 = call double @llvm.fabs.f64(double %28)
%30 = fcmp ole double %29, 4.250000e-01
br i1 %30, label %31, label %68
31: ; preds = %25
%32 = load double, double* %4
%33 = load double, double* %4
%34 = fneg double %32
%35 = call double @llvm.fmuladd.f64(double %34, double %33, double 1.806250e-01)
store double %35, double* %5
%36 = load double, double* %5
%37 = call double @llvm.fmuladd.f64(double 0x40A39A296F7D925E, double %36, double 0x40E052D26B2E45E4)
%38 = load double, double* %5
%39 = call double @llvm.fmuladd.f64(double %37, double %38, double 0x40F06C1C55B78F20)
%40 = load double, double* %5
%41 = call double @llvm.fmuladd.f64(double %39, double %40, double 0x40E66C3E869B752A)
%42 = load double, double* %5
%43 = call double @llvm.fmuladd.f64(double %41, double %42, double 0x40CAD1D8CD4EE71D)
%44 = load double, double* %5
%45 = call double @llvm.fmuladd.f64(double %43, double %44, double 0x409ECE5D2213C0CC)
%46 = load double, double* %5
%47 = call double @llvm.fmuladd.f64(double %45, double %46, double 0x4060A4888B1A436E)
%48 = load double, double* %5
%49 = call double @llvm.fmuladd.f64(double %47, double %48, double 0x400B18D91E9EEF75)
%50 = load double, double* %5
%51 = call double @llvm.fmuladd.f64(double 0x40B46A7ECA984B69, double %50, double 0x40DC0E457CB1AE76)
%52 = load double, double* %5
%53 = call double @llvm.fmuladd.f64(double %51, double %52, double 0x40E3317CAA64F4BE)
%54 = load double, double* %5
%55 = call double @llvm.fmuladd.f64(double %53, double %54, double 0x40D4B772D5D65266)
%56 = load double, double* %5
%57 = call double @llvm.fmuladd.f64(double %55, double %56, double 0x40B512322E75C89F)
%58 = load double, double* %5
%59 = call double @llvm.fmuladd.f64(double %57, double %58, double 0x4085797EFDC8B3F7)
%60 = load double, double* %5
%61 = call double @llvm.fmuladd.f64(double %59, double %60, double 0x4045281B386E1AB5)
%62 = load double, double* %5
%63 = call double @llvm.fmuladd.f64(double %61, double %62, double 1.000000e+00)
%64 = fdiv double %49, %63
store double %64, double* %5
%65 = load double, double* %4
%66 = load double, double* %5
%67 = fmul double %65, %66
store double %67, double* %2
br label %158
68: ; preds = %25
%69 = load double, double* %3
%70 = fcmp ogt double %69, 5.000000e-01
br i1 %70, label %71, label %74
71: ; preds = %68
%72 = load double, double* %3
%73 = fsub double 1.000000e+00, %72
br label %76
74: ; preds = %68
%75 = load double, double* %3
br label %76
76: ; preds = %74, %71
%77 = phi double [ %73, %71 ], [ %75, %74 ]
store double %77, double* %4
%78 = load double, double* %4
%79 = call i32 @log(double %78)
%80 = sub nsw i32 0, %79
%81 = call double @sqrt(i32 %80)
store double %81, double* %5
%82 = load double, double* %5
%83 = fcmp ole double %82, 5.000000e+00
br i1 %83, label %84, label %116
84: ; preds = %76
%85 = load double, double* %5
%86 = fsub double %85, 1.600000e+00
store double %86, double* %5
%87 = load double, double* %5
%88 = call double @llvm.fmuladd.f64(double 0x3F49615AC0B7ACE9, double %87, double 0x3F9744EB6C45EC67)
%89 = load double, double* %5
%90 = call double @llvm.fmuladd.f64(double %88, double %89, double 0x3FCEF2ABB9B85C37)
%91 = load double, double* %5
%92 = call double @llvm.fmuladd.f64(double %90, double %91, double 0x3FF453CC085375B2)
%93 = load double, double* %5
%94 = call double @llvm.fmuladd.f64(double %92, double %93, double 0x400D2ECB1A3D02C4)
%95 = load double, double* %5
%96 = call double @llvm.fmuladd.f64(double %94, double %95, double 0x401713F71462256A)
%97 = load double, double* %5
%98 = call double @llvm.fmuladd.f64(double %96, double %97, double 0x4012857748CAB19B)
%99 = load double, double* %5
%100 = call double @llvm.fmuladd.f64(double %98, double %99, double 0x3FF6C665FDE9526A)
%101 = load double, double* %5
%102 = call double @llvm.fmuladd.f64(double 0x3E120D3F686439E4, double %101, double 0x3F41F18CBFDF2728)
%103 = load double, double* %5
%104 = call double @llvm.fmuladd.f64(double %102, double %103, double 0x3F8F207A7EAB17BF)
%105 = load double, double* %5
%106 = call double @llvm.fmuladd.f64(double %104, double %105, double 0x3FC2F5123394F040)
%107 = load double, double* %5
%108 = call double @llvm.fmuladd.f64(double %106, double %107, double 0x3FE61292F23385C9)
%109 = load double, double* %5
%110 = call double @llvm.fmuladd.f64(double %108, double %109, double 0x3FFAD278E6526633)
%111 = load double, double* %5
%112 = call double @llvm.fmuladd.f64(double %110, double %111, double 0x40006CEFBB46A449)
%113 = load double, double* %5
%114 = call double @llvm.fmuladd.f64(double %112, double %113, double 1.000000e+00)
%115 = fdiv double %100, %114
store double %115, double* %5
br label %148
116: ; preds = %76
%117 = load double, double* %5
%118 = fsub double %117, 5.000000e+00
store double %118, double* %5
%119 = load double, double* %5
%120 = call double @llvm.fmuladd.f64(double 0x3E8AFB74D693BF93, double %119, double 0x3EFC6EC6CC59E02A)
%121 = load double, double* %5
%122 = call double @llvm.fmuladd.f64(double %120, double %121, double 0x3F545C1908425345)
%123 = load double, double* %5
%124 = call double @llvm.fmuladd.f64(double %122, double %123, double 0x3F9B2B41193B4EE7)
%125 = load double, double* %5
%126 = call double @llvm.fmuladd.f64(double %124, double %125, double 0x3FD2FAD9315255CF)
%127 = load double, double* %5
%128 = call double @llvm.fmuladd.f64(double %126, double %127, double 0x3FFC8EA6461FA445)
%129 = load double, double* %5
%130 = call double @llvm.fmuladd.f64(double %128, double %129, double 0x4015DAEA6E875003)
%131 = load double, double* %5
%132 = call double @llvm.fmuladd.f64(double %130, double %131, double 0x401AA1B1C13EE526)
%133 = load double, double* %5
%134 = call double @llvm.fmuladd.f64(double 0x3CE269BFF1F8C190, double %133, double 0x3E831446F740B9E0)
%135 = load double, double* %5
%136 = call double @llvm.fmuladd.f64(double %134, double %135, double 0x3EF35C2C496374BF)
%137 = load double, double* %5
%138 = call double @llvm.fmuladd.f64(double %136, double %137, double 0x3F49C8BC979DC5D7)
%139 = load double, double* %5
%140 = call double @llvm.fmuladd.f64(double %138, double %139, double 0x3F8E76F93215462A)
%141 = load double, double* %5
%142 = call double @llvm.fmuladd.f64(double %140, double %141, double 0x3FC186EB183443FB)
%143 = load double, double* %5
%144 = call double @llvm.fmuladd.f64(double %142, double %143, double 0x3FE331D34FC7D77F)
%145 = load double, double* %5
%146 = call double @llvm.fmuladd.f64(double %144, double %145, double 1.000000e+00)
%147 = fdiv double %132, %146
store double %147, double* %5
br label %148
148: ; preds = %116, %84
%149 = load double, double* %3
%150 = fcmp olt double %149, 5.000000e-01
br i1 %150, label %151, label %154
151: ; preds = %148
%152 = load double, double* %5
%153 = fneg double %152
br label %156
154: ; preds = %148
%155 = load double, double* %5
br label %156
156: ; preds = %154, %151
%157 = phi double [ %153, %151 ], [ %155, %154 ]
store double %157, double* %2
br label %158
158: ; preds = %156, %31, %22, %17
%159 = load double, double* %2
ret double %159
}

LLVM IR (-O2):
@DBL_MAX = global double 0.000000e+00
define double @unitqtlP(double %0) {
%2 = fcmp oge double %0, 0.000000e+00
%3 = fcmp ole double %0, 1.000000e+00
%4 = and i1 %2, %3
%5 = zext i1 %4 to i32
%6 = tail call i32 @assert(i32 %5)
%7 = fcmp ult double %0, 1.000000e+00
br i1 %7, label %10, label %8
8: ; preds = %1
%9 = load double, double* @DBL_MAX
br label %76
10: ; preds = %1
%11 = fcmp ugt double %0, 0.000000e+00
br i1 %11, label %15, label %12
12: ; preds = %10
%13 = load double, double* @DBL_MAX
%14 = fneg double %13
br label %76
15: ; preds = %10
%16 = fadd double %0, -5.000000e-01
%17 = tail call double @llvm.fabs.f64(double %16)
%18 = fcmp ugt double %17, 4.250000e-01
br i1 %18, label %35, label %19
19: ; preds = %15
%20 = fneg double %16
%21 = tail call double @llvm.fmuladd.f64(double %20, double %16, double 1.806250e-01)
%22 = insertelement <2 x double> poison, double %21, i64 0
%23 = shufflevector <2 x double> %22, <2 x double> poison, <2 x i32> zeroinitializer
%24 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %23, <2 x double> <double 0x40A39A296F7D925E, double 0x40B46A7ECA984B69>, <2 x double> <double 0x40E052D26B2E45E4, double 0x40DC0E457CB1AE76>)
%25 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %24, <2 x double> %23, <2 x double> <double 0x40F06C1C55B78F20, double 0x40E3317CAA64F4BE>)
%26 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %25, <2 x double> %23, <2 x double> <double 0x40E66C3E869B752A, double 0x40D4B772D5D65266>)
%27 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %26, <2 x double> %23, <2 x double> <double 0x40CAD1D8CD4EE71D, double 0x40B512322E75C89F>)
%28 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %27, <2 x double> %23, <2 x double> <double 0x409ECE5D2213C0CC, double 0x4085797EFDC8B3F7>)
%29 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %28, <2 x double> %23, <2 x double> <double 0x4060A4888B1A436E, double 0x4045281B386E1AB5>)
%30 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %29, <2 x double> %23, <2 x double> <double 0x400B18D91E9EEF75, double 1.000000e+00>)
%31 = extractelement <2 x double> %30, i64 0
%32 = extractelement <2 x double> %30, i64 1
%33 = fdiv double %31, %32
%34 = fmul double %16, %33
br label %76
35: ; preds = %15
%36 = fcmp ogt double %0, 5.000000e-01
%37 = fsub double 1.000000e+00, %0
%38 = select i1 %36, double %37, double %0
%39 = tail call i32 @log(double %38)
%40 = sub nsw i32 0, %39
%41 = tail call double @sqrt(i32 %40)
%42 = fcmp ugt double %41, 5.000000e+00
br i1 %42, label %57, label %43
43: ; preds = %35
%44 = fadd double %41, -1.600000e+00
%45 = insertelement <2 x double> poison, double %44, i64 0
%46 = shufflevector <2 x double> %45, <2 x double> poison, <2 x i32> zeroinitializer
%47 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %46, <2 x double> <double 0x3F49615AC0B7ACE9, double 0x3E120D3F686439E4>, <2 x double> <double 0x3F9744EB6C45EC67, double 0x3F41F18CBFDF2728>)
%48 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %47, <2 x double> %46, <2 x double> <double 0x3FCEF2ABB9B85C37, double 0x3F8F207A7EAB17BF>)
%49 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %48, <2 x double> %46, <2 x double> <double 0x3FF453CC085375B2, double 0x3FC2F5123394F040>)
%50 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %49, <2 x double> %46, <2 x double> <double 0x400D2ECB1A3D02C4, double 0x3FE61292F23385C9>)
%51 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %50, <2 x double> %46, <2 x double> <double 0x401713F71462256A, double 0x3FFAD278E6526633>)
%52 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %51, <2 x double> %46, <2 x double> <double 0x4012857748CAB19B, double 0x40006CEFBB46A449>)
%53 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %52, <2 x double> %46, <2 x double> <double 0x3FF6C665FDE9526A, double 1.000000e+00>)
%54 = extractelement <2 x double> %53, i64 0
%55 = extractelement <2 x double> %53, i64 1
%56 = fdiv double %54, %55
br label %71
57: ; preds = %35
%58 = fadd double %41, -5.000000e+00
%59 = insertelement <2 x double> poison, double %58, i64 0
%60 = shufflevector <2 x double> %59, <2 x double> poison, <2 x i32> zeroinitializer
%61 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %60, <2 x double> <double 0x3E8AFB74D693BF93, double 0x3CE269BFF1F8C190>, <2 x double> <double 0x3EFC6EC6CC59E02A, double 0x3E831446F740B9E0>)
%62 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %61, <2 x double> %60, <2 x double> <double 0x3F545C1908425345, double 0x3EF35C2C496374BF>)
%63 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %62, <2 x double> %60, <2 x double> <double 0x3F9B2B41193B4EE7, double 0x3F49C8BC979DC5D7>)
%64 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %63, <2 x double> %60, <2 x double> <double 0x3FD2FAD9315255CF, double 0x3F8E76F93215462A>)
%65 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %64, <2 x double> %60, <2 x double> <double 0x3FFC8EA6461FA445, double 0x3FC186EB183443FB>)
%66 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %65, <2 x double> %60, <2 x double> <double 0x4015DAEA6E875003, double 0x3FE331D34FC7D77F>)
%67 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %66, <2 x double> %60, <2 x double> <double 0x401AA1B1C13EE526, double 1.000000e+00>)
%68 = extractelement <2 x double> %67, i64 0
%69 = extractelement <2 x double> %67, i64 1
%70 = fdiv double %68, %69
br label %71
71: ; preds = %57, %43
%72 = phi double [ %56, %43 ], [ %70, %57 ]
%73 = fcmp olt double %0, 5.000000e-01
%74 = fneg double %72
%75 = select i1 %73, double %74, double %72
br label %76
76: ; preds = %71, %19, %12, %8
%77 = phi double [ %9, %8 ], [ %14, %12 ], [ %34, %19 ], [ %75, %71 ]
ret double %77
}