#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 exp(double);
double fabs(double);
double unitcdf(double x) {
  double y, z, u;
  if (x > 8.572)
    return 1.0;
  if (x < -37.519)
    return 0.0;
  z = fabs(x);
  if (z < 0.5 * 2.2204460492503131e-16)
    return 0.5;
  if (z < 0.66291) {
    y = x * x;
    z = ((((0.065682337918207449113 * y + 2.2352520354606839287) * y +
           161.02823106855587881) *
              y +
          1067.6894854603709582) *
             y +
         18154.981253343561249) /
        ((((y + 47.20258190468824187) * y + 976.09855173777669322) * y +
          10260.932208618978205) *
             y +
         45507.789335026729956);
    return 0.5 + x * z;
  }
  if (z < 4 * 1.41421356237309504880168872421) {
    u = ((((((((1.0765576773720192317e-8 * z + 0.39894151208813466764) * z +
               8.8831497943883759412) *
                  z +
              93.506656132177855979) *
                 z +
             597.27027639480026226) *
                z +
            2494.5375852903726711) *
               z +
           6848.1904505362823326) *
              z +
          11602.651437647350124) *
             z +
         9842.7148383839780218) /
        ((((((((z + 22.266688044328115691) * z + 235.38790178262499861) * z +
              1519.377599407554805) *
                 z +
             6485.558298266760755) *
                z +
            18615.571640885098091) *
               z +
           34900.952721145977266) *
              z +
          38912.003286093271411) *
             z +
         19685.429676859990727);
    z = u * exp(-0.5 * x * x);
  } else {
    y = 1 / (x * x);
    u = (((((0.02307344176494017303 * y + 0.21589853405795699) * y +
            0.1274011611602473639) *
               y +
           0.022235277870649807) *
              y +
          0.001421619193227893466) *
             y +
         2.9112874951168792e-5) /
        (((((y + 1.28426009614491121) * y + 0.468238212480865118) * y +
           0.0659881378689285515) *
              y +
          0.00378239633202758244) *
             y +
         7.29751555083966205e-5);
    z = (((0.39894228040143267793994605993) - y * u) / z) * exp(-0.5 * x * x);
  }
  return (x > 0) ? 1 - z : z;
}


x86 assembly (clang, -O0):
<unitcdf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xed6(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1146 <unitcdf+0x36>
movsd  0xf54(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    15d0 <unitcdf+0x4c0>
movsd  0xeba(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    1166 <unitcdf+0x56>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    15d0 <unitcdf+0x4c0>
movsd  -0x10(%rbp),%xmm0
movaps 0xffe(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xe8d(%rip),%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    11a0 <unitcdf+0x90>
movsd  0xf8a(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    15d0 <unitcdf+0x4c0>
movsd  0xe70(%rip),%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    1297 <unitcdf+0x187>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xf91(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf8d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf68(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf4b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf2e(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xf1a(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xefc(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xedf(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xec2(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe97(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    15d0 <unitcdf+0x4c0>
movsd  0xd81(%rip),%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    143a <unitcdf+0x32a>
movsd  -0x20(%rbp),%xmm0
movsd  0xe59(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe55(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe30(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe13(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdf6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdd9(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdbc(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd9f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd82(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xd6e(%rip),%xmm1
addsd  -0x20(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd50(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd33(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd16(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xcf9(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xcdc(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xcbf(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xca2(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xc13(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x30(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    1593 <unitcdf+0x483>
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xc44(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xc1e(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc1a(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbf5(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbd8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbbb(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb9e(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xb8a(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb6c(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb4f(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb32(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb15(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xad3(%rip),%xmm1
addsd  %xmm1,%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xab5(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    15bc <unitcdf+0x4ac>
movsd  0xae3(%rip),%xmm0
subsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    15c6 <unitcdf+0x4b6>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<unitcdf>:
sub    $0x28,%rsp
ucomisd 0xeec(%rip),%xmm0
jbe    112b <unitcdf+0x1b>
movsd  0xeda(%rip),%xmm0
add    $0x28,%rsp
ret
movapd %xmm0,%xmm4
xorpd  %xmm0,%xmm0
movsd  0xed5(%rip),%xmm1
ucomisd %xmm4,%xmm1
ja     136f <unitcdf+0x25f>
movapd 0xf43(%rip),%xmm0
andpd  %xmm4,%xmm0
movsd  0xec7(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    116c <unitcdf+0x5c>
movsd  0xeb1(%rip),%xmm0
add    $0x28,%rsp
ret
movsd  0xeb4(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    11eb <unitcdf+0xdb>
movapd %xmm4,%xmm1
mulsd  %xmm4,%xmm1
movsd  0xeee(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xeea(%rip),%xmm0
movsd  0xeea(%rip),%xmm2
addsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm0
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm0
addpd  0xf9a(%rip),%xmm0
mulpd  %xmm1,%xmm0
addpd  0xf9e(%rip),%xmm0
mulpd  %xmm1,%xmm0
addpd  0xfa2(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
divsd  %xmm1,%xmm0
mulsd  %xmm4,%xmm0
addsd  0xe32(%rip),%xmm0
add    $0x28,%rsp
ret
movsd  0xe3d(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    128f <unitcdf+0x17f>
movsd  0xe53(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xe4f(%rip),%xmm2
movapd %xmm0,%xmm1
addsd  0xe4b(%rip),%xmm1
unpcklpd %xmm1,%xmm2
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm2
addpd  0xeaf(%rip),%xmm2
mulpd  %xmm0,%xmm2
addpd  0xeb3(%rip),%xmm2
mulpd  %xmm0,%xmm2
addpd  0xeb7(%rip),%xmm2
mulpd  %xmm0,%xmm2
addpd  0xebb(%rip),%xmm2
mulpd  %xmm0,%xmm2
addpd  0xebf(%rip),%xmm2
mulpd  %xmm0,%xmm2
addpd  0xec3(%rip),%xmm2
mulpd  %xmm0,%xmm2
addpd  0xec7(%rip),%xmm2
movapd %xmm2,%xmm0
unpckhpd %xmm2,%xmm0
divsd  %xmm0,%xmm2
movapd %xmm2,(%rsp)
jmp    1324 <unitcdf+0x214>
movapd %xmm4,%xmm2
mulsd  %xmm4,%xmm2
movsd  0xd61(%rip),%xmm1
divsd  %xmm2,%xmm1
movsd  0xd8d(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xd89(%rip),%xmm2
movsd  0xd89(%rip),%xmm3
addsd  %xmm1,%xmm3
unpcklpd %xmm3,%xmm2
movapd %xmm1,%xmm3
unpcklpd %xmm1,%xmm3
mulpd  %xmm3,%xmm2
addpd  0xdc5(%rip),%xmm2
mulpd  %xmm3,%xmm2
addpd  0xdc9(%rip),%xmm2
mulpd  %xmm3,%xmm2
addpd  0xdcd(%rip),%xmm2
mulpd  %xmm3,%xmm2
addpd  0xdd1(%rip),%xmm2
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
divsd  %xmm3,%xmm2
mulsd  %xmm1,%xmm2
movsd  0xd39(%rip),%xmm1
subsd  %xmm2,%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movsd  0xd44(%rip),%xmm0
mulsd  %xmm4,%xmm0
mulsd  %xmm4,%xmm0
movapd %xmm4,0x10(%rsp)
call   1030 <exp@plt>
movapd %xmm0,%xmm1
mulsd  (%rsp),%xmm1
movsd  0xcb0(%rip),%xmm2
subsd  %xmm1,%xmm2
xorpd  %xmm0,%xmm0
cmpltsd 0x10(%rsp),%xmm0
movapd %xmm0,%xmm3
andnpd %xmm1,%xmm3
andpd  %xmm2,%xmm0
orpd   %xmm3,%xmm0
add    $0x28,%rsp
ret

LLVM IR (-O0):
define double @unitcdf(double %0) {
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
store double %0, double* %3
%7 = load double, double* %3
%8 = fcmp ogt double %7, 0x402124DD2F1A9FBE
br i1 %8, label %9, label %10
9: ; preds = %1
store double 1.000000e+00, double* %2
br label %139
10: ; preds = %1
%11 = load double, double* %3
%12 = fcmp olt double %11, -3.751900e+01
br i1 %12, label %13, label %14
13: ; preds = %10
store double 0.000000e+00, double* %2
br label %139
14: ; preds = %10
%15 = load double, double* %3
%16 = call double @llvm.fabs.f64(double %15)
store double %16, double* %5
%17 = load double, double* %5
%18 = fcmp olt double %17, 0x3CA0000000000000
br i1 %18, label %19, label %20
19: ; preds = %14
store double 5.000000e-01, double* %2
br label %139
20: ; preds = %14
%21 = load double, double* %5
%22 = fcmp olt double %21, 6.629100e-01
br i1 %22, label %23, label %47
23: ; preds = %20
%24 = load double, double* %3
%25 = load double, double* %3
%26 = fmul double %24, %25
store double %26, double* %4
%27 = load double, double* %4
%28 = call double @llvm.fmuladd.f64(double 0x3FB0D08EC54894E1, double %27, double 0x4001E1CBD1B4F7F3)
%29 = load double, double* %4
%30 = call double @llvm.fmuladd.f64(double %28, double %29, double 0x406420E744D785B7)
%31 = load double, double* %4
%32 = call double @llvm.fmuladd.f64(double %30, double %31, double 0x4090AEC20879FD71)
%33 = load double, double* %4
%34 = call double @llvm.fmuladd.f64(double %32, double %33, double 0x40D1BABECCDAD2EC)
%35 = load double, double* %4
%36 = fadd double %35, 0x404799EE342FB2DE
%37 = load double, double* %4
%38 = call double @llvm.fmuladd.f64(double %36, double %37, double 0x408E80C9D57E55B8)
%39 = load double, double* %4
%40 = call double @llvm.fmuladd.f64(double %38, double %39, double 0x40C40A77529CADC8)
%41 = load double, double* %4
%42 = call double @llvm.fmuladd.f64(double %40, double %41, double 0x40E63879423B87AD)
%43 = fdiv double %34, %42
store double %43, double* %5
%44 = load double, double* %3
%45 = load double, double* %5
%46 = call double @llvm.fmuladd.f64(double %44, double %45, double 5.000000e-01)
store double %46, double* %2
br label %139
47: ; preds = %20
%48 = load double, double* %5
%49 = fcmp olt double %48, 0x4016A09E667F3BCD
br i1 %49, label %50, label %91
50: ; preds = %47
%51 = load double, double* %5
%52 = call double @llvm.fmuladd.f64(double 0x3E471E703C5F5815, double %51, double 0x3FD98841FADBDC66)
%53 = load double, double* %5
%54 = call double @llvm.fmuladd.f64(double %52, double %53, double 0x4021C42C35B8BC02)
%55 = load double, double* %5
%56 = call double @llvm.fmuladd.f64(double %54, double %55, double 0x4057606D0DD78164)
%57 = load double, double* %5
%58 = call double @llvm.fmuladd.f64(double %56, double %57, double 0x4082AA2986ABA462)
%59 = load double, double* %5
%60 = call double @llvm.fmuladd.f64(double %58, double %59, double 0x40A37D133E6111EC)
%61 = load double, double* %5
%62 = call double @llvm.fmuladd.f64(double %60, double %61, double 0x40BAC030C15DC8D7)
%63 = load double, double* %5
%64 = call double @llvm.fmuladd.f64(double %62, double %63, double 0x40C6A953624F0F60)
%65 = load double, double* %5
%66 = call double @llvm.fmuladd.f64(double %64, double %65, double 0x40C3395B7FD2FC8E)
%67 = load double, double* %5
%68 = fadd double %67, 0x40364445AAEC9F9B
%69 = load double, double* %5
%70 = call double @llvm.fmuladd.f64(double %68, double %69, double 0x406D6C69B0FFCDE7)
%71 = load double, double* %5
%72 = call double @llvm.fmuladd.f64(double %70, double %71, double 0x4097BD82A96B49BF)
%73 = load double, double* %5
%74 = call double @llvm.fmuladd.f64(double %72, double %73, double 0x40B9558EECA29D27)
%75 = load double, double* %5
%76 = call double @llvm.fmuladd.f64(double %74, double %75, double 0x40D22DE495C3A6A3)
%77 = load double, double* %5
%78 = call double @llvm.fmuladd.f64(double %76, double %77, double 0x40E10A9E7CB10E86)
%79 = load double, double* %5
%80 = call double @llvm.fmuladd.f64(double %78, double %79, double 0x40E300001AEB6FE4)
%81 = load double, double* %5
%82 = call double @llvm.fmuladd.f64(double %80, double %81, double 0x40D3395B7FD35F61)
%83 = fdiv double %66, %82
store double %83, double* %6
%84 = load double, double* %6
%85 = load double, double* %3
%86 = fmul double -5.000000e-01, %85
%87 = load double, double* %3
%88 = fmul double %86, %87
%89 = call double @exp(double %88)
%90 = fmul double %84, %89
store double %90, double* %5
br label %129
91: ; preds = %47
%92 = load double, double* %3
%93 = load double, double* %3
%94 = fmul double %92, %93
%95 = fdiv double 1.000000e+00, %94
store double %95, double* %4
%96 = load double, double* %4
%97 = call double @llvm.fmuladd.f64(double 0x3F97A090772574DA, double %96, double 0x3FCBA2902B84421C)
%98 = load double, double* %4
%99 = call double @llvm.fmuladd.f64(double %97, double %98, double 0x3FC04EAE6653ED94)
%100 = load double, double* %4
%101 = call double @llvm.fmuladd.f64(double %99, double %100, double 0x3F96C4D83D16707A)
%102 = load double, double* %4
%103 = call double @llvm.fmuladd.f64(double %101, double %102, double 0x3F574AB3FC4E4F8B)
%104 = load double, double* %4
%105 = call double @llvm.fmuladd.f64(double %103, double %104, double 0x3EFE86ED886DC483)
%106 = load double, double* %4
%107 = fadd double %106, 0x3FF48C54508800DB
%108 = load double, double* %4
%109 = call double @llvm.fmuladd.f64(double %107, double %108, double 0x3FDDF79D6855F0AD)
%110 = load double, double* %4
%111 = call double @llvm.fmuladd.f64(double %109, double %110, double 0x3FB0E4993E122C39)
%112 = load double, double* %4
%113 = call double @llvm.fmuladd.f64(double %111, double %112, double 0x3F6EFC42917D7DE7)
%114 = load double, double* %4
%115 = call double @llvm.fmuladd.f64(double %113, double %114, double 0x3F132147A014BAD1)
%116 = fdiv double %105, %115
store double %116, double* %6
%117 = load double, double* %4
%118 = load double, double* %6
%119 = fneg double %117
%120 = call double @llvm.fmuladd.f64(double %119, double %118, double 0x3FD9884533D43651)
%121 = load double, double* %5
%122 = fdiv double %120, %121
%123 = load double, double* %3
%124 = fmul double -5.000000e-01, %123
%125 = load double, double* %3
%126 = fmul double %124, %125
%127 = call double @exp(double %126)
%128 = fmul double %122, %127
store double %128, double* %5
br label %129
129: ; preds = %91, %50
%130 = load double, double* %3
%131 = fcmp ogt double %130, 0.000000e+00
br i1 %131, label %132, label %135
132: ; preds = %129
%133 = load double, double* %5
%134 = fsub double 1.000000e+00, %133
br label %137
135: ; preds = %129
%136 = load double, double* %5
br label %137
137: ; preds = %135, %132
%138 = phi double [ %134, %132 ], [ %136, %135 ]
store double %138, double* %2
br label %139
139: ; preds = %137, %23, %19, %13, %9
%140 = load double, double* %2
ret double %140
}

LLVM IR (-O2):
define double @unitcdf(double %0) {
%2 = fcmp ogt double %0, 0x402124DD2F1A9FBE
br i1 %2, label %72, label %3
3: ; preds = %1
%4 = fcmp olt double %0, -3.751900e+01
br i1 %4, label %72, label %5
5: ; preds = %3
%6 = tail call double @llvm.fabs.f64(double %0)
%7 = fcmp olt double %6, 0x3CA0000000000000
br i1 %7, label %72, label %8
8: ; preds = %5
%9 = fcmp olt double %6, 6.629100e-01
br i1 %9, label %10, label %25
10: ; preds = %8
%11 = fmul double %0, %0
%12 = tail call double @llvm.fmuladd.f64(double %11, double 0x3FB0D08EC54894E1, double 0x4001E1CBD1B4F7F3)
%13 = fadd double %11, 0x404799EE342FB2DE
%14 = insertelement <2 x double> poison, double %12, i64 0
%15 = insertelement <2 x double> %14, double %13, i64 1
%16 = insertelement <2 x double> poison, double %11, i64 0
%17 = shufflevector <2 x double> %16, <2 x double> poison, <2 x i32> zeroinitializer
%18 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %15, <2 x double> %17, <2 x double> <double 0x406420E744D785B7, double 0x408E80C9D57E55B8>)
%19 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %18, <2 x double> %17, <2 x double> <double 0x4090AEC20879FD71, double 0x40C40A77529CADC8>)
%20 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %19, <2 x double> %17, <2 x double> <double 0x40D1BABECCDAD2EC, double 0x40E63879423B87AD>)
%21 = extractelement <2 x double> %20, i64 0
%22 = extractelement <2 x double> %20, i64 1
%23 = fdiv double %21, %22
%24 = tail call double @llvm.fmuladd.f64(double %0, double %23, double 5.000000e-01)
br label %72
25: ; preds = %8
%26 = fcmp olt double %6, 0x4016A09E667F3BCD
br i1 %26, label %27, label %44
27: ; preds = %25
%28 = tail call double @llvm.fmuladd.f64(double %6, double 0x3E471E703C5F5815, double 0x3FD98841FADBDC66)
%29 = fadd double %6, 0x40364445AAEC9F9B
%30 = insertelement <2 x double> poison, double %28, i64 0
%31 = insertelement <2 x double> %30, double %29, i64 1
%32 = insertelement <2 x double> poison, double %6, i64 0
%33 = shufflevector <2 x double> %32, <2 x double> poison, <2 x i32> zeroinitializer
%34 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %31, <2 x double> %33, <2 x double> <double 0x4021C42C35B8BC02, double 0x406D6C69B0FFCDE7>)
%35 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %34, <2 x double> %33, <2 x double> <double 0x4057606D0DD78164, double 0x4097BD82A96B49BF>)
%36 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %35, <2 x double> %33, <2 x double> <double 0x4082AA2986ABA462, double 0x40B9558EECA29D27>)
%37 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %36, <2 x double> %33, <2 x double> <double 0x40A37D133E6111EC, double 0x40D22DE495C3A6A3>)
%38 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %37, <2 x double> %33, <2 x double> <double 0x40BAC030C15DC8D7, double 0x40E10A9E7CB10E86>)
%39 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %38, <2 x double> %33, <2 x double> <double 0x40C6A953624F0F60, double 0x40E300001AEB6FE4>)
%40 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %39, <2 x double> %33, <2 x double> <double 0x40C3395B7FD2FC8E, double 0x40D3395B7FD35F61>)
%41 = extractelement <2 x double> %40, i64 0
%42 = extractelement <2 x double> %40, i64 1
%43 = fdiv double %41, %42
br label %63
44: ; preds = %25
%45 = fmul double %0, %0
%46 = fdiv double 1.000000e+00, %45
%47 = tail call double @llvm.fmuladd.f64(double %46, double 0x3F97A090772574DA, double 0x3FCBA2902B84421C)
%48 = fadd double %46, 0x3FF48C54508800DB
%49 = insertelement <2 x double> poison, double %47, i64 0
%50 = insertelement <2 x double> %49, double %48, i64 1
%51 = insertelement <2 x double> poison, double %46, i64 0
%52 = shufflevector <2 x double> %51, <2 x double> poison, <2 x i32> zeroinitializer
%53 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %50, <2 x double> %52, <2 x double> <double 0x3FC04EAE6653ED94, double 0x3FDDF79D6855F0AD>)
%54 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %53, <2 x double> %52, <2 x double> <double 0x3F96C4D83D16707A, double 0x3FB0E4993E122C39>)
%55 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %54, <2 x double> %52, <2 x double> <double 0x3F574AB3FC4E4F8B, double 0x3F6EFC42917D7DE7>)
%56 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %55, <2 x double> %52, <2 x double> <double 0x3EFE86ED886DC483, double 0x3F132147A014BAD1>)
%57 = extractelement <2 x double> %56, i64 0
%58 = extractelement <2 x double> %56, i64 1
%59 = fdiv double %57, %58
%60 = fneg double %46
%61 = tail call double @llvm.fmuladd.f64(double %60, double %59, double 0x3FD9884533D43651)
%62 = fdiv double %61, %6
br label %63
63: ; preds = %44, %27
%64 = phi double [ %62, %44 ], [ %43, %27 ]
%65 = fmul double %0, -5.000000e-01
%66 = fmul double %65, %0
%67 = tail call double @exp(double %66)
%68 = fmul double %64, %67
%69 = fcmp ogt double %0, 0.000000e+00
%70 = fsub double 1.000000e+00, %68
%71 = select i1 %69, double %70, double %68
br label %72
72: ; preds = %5, %3, %1, %63, %10
%73 = phi double [ %24, %10 ], [ %71, %63 ], [ 1.000000e+00, %1 ], [ 0.000000e+00, %3 ], [ 5.000000e-01, %5 ]
ret double %73
}