#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 HUGE_VAL;
int erfc(double);
int exp(double);
int log(double);
double sqrt(int);
double inverse_normal(double p) {
  double q, t, x;
  const double a[6] = {-3.969683028665376e+01, 2.209460984245205e+02,
                       -2.759285104469687e+02, 1.383577518672690e+02,
                       -3.066479806614716e+01, 2.506628277459239e+00};
  const double b[5] = {-5.447609879822406e+01, 1.615858368580409e+02,
                       -1.556989798598866e+02, 6.680131188771972e+01,
                       -1.328068155288572e+01};
  const double c[6] = {-7.784894002430293e-03, -3.223964580411365e-01,
                       -2.400758277161838e+00, -2.549732539343734e+00,
                       4.374664141464968e+00,  2.938163982698783e+00};
  const double d[4] = {7.784695709041462e-03, 3.224671290700398e-01,
                       2.445134137142996e+00, 3.754408661907416e+00};
  if (p <= 0)
    return -HUGE_VAL;
  else if (p >= 1)
    return HUGE_VAL;
  q = p < 0.5 ? p : 1 - p;
  if (q > 0.02425) {
    x = q - 0.5;
    t = x * x;
    x = x *
        (((((a[0] * t + a[1]) * t + a[2]) * t + a[3]) * t + a[4]) * t + a[5]) /
        (((((b[0] * t + b[1]) * t + b[2]) * t + b[3]) * t + b[4]) * t + 1);
  } else {
    t = sqrt(-2 * log(q));
    x = (((((c[0] * t + c[1]) * t + c[2]) * t + c[3]) * t + c[4]) * t + c[5]) /
        ((((d[0] * t + d[1]) * t + d[2]) * t + d[3]) * t + 1);
  }
  t = (erfc(-x * 0.70710678118654752440) / 2 - q) * 2.506628274631000502415 *
      exp(x * x / 2);
  x -= t / (1 + x * t / 2);
  return p > 0.5 ? -x : x;
}


x86 assembly (clang, -O0):
<inverse_normal>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
movsd  %xmm0,-0x10(%rbp)
lea    -0x60(%rbp),%rdi
xor    %esi,%esi
mov    $0x30,%edx
call   1030 <memset@plt>
movsd  0xf08(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xef3(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xede(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xec9(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xeb4(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe9f(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
lea    -0x90(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1030 <memset@plt>
movsd  0xe77(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xe5f(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xe47(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xe32(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xe1d(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
lea    -0xc0(%rbp),%rdi
xor    %esi,%esi
mov    $0x30,%edx
call   1030 <memset@plt>
movsd  0xdf5(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xddd(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xdc5(%rip),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xdad(%rip),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xd95(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xd7d(%rip),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0xe2e(%rip),%rax
mov    %rax,-0xe0(%rbp)
mov    0xe28(%rip),%rax
mov    %rax,-0xd8(%rbp)
mov    0xe22(%rip),%rax
mov    %rax,-0xd0(%rbp)
mov    0xe1c(%rip),%rax
mov    %rax,-0xc8(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     12fd <inverse_normal+0x1ad>
mov    0x2d10(%rip),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1694 <inverse_normal+0x544>
movsd  -0x10(%rbp),%xmm0
movsd  0xd7e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1329 <inverse_normal+0x1d9>
mov    0x2ccd(%rip),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1694 <inverse_normal+0x544>
jmp    132e <inverse_normal+0x1de>
movsd  0xd5a(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    1353 <inverse_normal+0x203>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
jmp    1368 <inverse_normal+0x218>
movsd  0xd2d(%rip),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xd16(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    148f <inverse_normal+0x33f>
movsd  -0x18(%rbp),%xmm0
movsd  0xcf7(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0x58(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0x50(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm3
movsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0x80(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc0b(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    157f <inverse_normal+0x42f>
movsd  -0x18(%rbp),%xmm0
call   1050 <log@plt>
imul   $0xfffffffe,%eax,%edi
call   1060 <sqrt@plt>
movsd  %xmm0,-0x20(%rbp)
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0x20(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm3
movsd  -0xd8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0xd0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  -0xc8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb16(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xb0d(%rip),%xmm1
mulsd  %xmm1,%xmm0
call   1070 <erfc@plt>
mov    $0x2,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  0xae3(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0xabd(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1040 <exp@plt>
movsd  -0xf0(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
movsd  0xa88(%rip),%xmm0
divsd  %xmm0,%xmm2
movsd  0xa64(%rip),%xmm0
addsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movsd  -0x28(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xa49(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    167a <inverse_normal+0x52a>
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
jmp    1687 <inverse_normal+0x537>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<inverse_normal>:
sub    $0x38,%rsp
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jae    124b <inverse_normal+0x10b>
ucomisd 0xf06(%rip),%xmm0
jae    1262 <inverse_normal+0x122>
movsd  0xef8(%rip),%xmm2
subsd  %xmm0,%xmm2
movapd %xmm0,%xmm3
cmpltsd 0xeef(%rip),%xmm3
movapd %xmm3,%xmm1
movapd %xmm0,0x20(%rsp)
andpd  %xmm0,%xmm1
andnpd %xmm2,%xmm3
orpd   %xmm1,%xmm3
ucomisd 0xed9(%rip),%xmm3
movapd %xmm3,(%rsp)
jbe    1272 <inverse_normal+0x132>
movsd  0xede(%rip),%xmm1
addsd  %xmm3,%xmm1
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xed2(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xece(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xeca(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xec6(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xec2(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xebe(%rip),%xmm3
movsd  0xebe(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xeba(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xeb6(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xeb2(%rip),%xmm2
mulsd  %xmm1,%xmm3
mulsd  %xmm0,%xmm2
addsd  0xeaa(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xe1e(%rip),%xmm2
divsd  %xmm2,%xmm3
jmp    12e9 <inverse_normal+0x1a9>
mov    0x2d96(%rip),%rax
movsd  (%rax),%xmm0
xorps  0xda3(%rip),%xmm0
add    $0x38,%rsp
ret
mov    0x2d7f(%rip),%rax
movsd  (%rax),%xmm0
add    $0x38,%rsp
ret
movapd %xmm3,%xmm0
call   1040 <log@plt>
lea    (%rax,%rax,1),%edi
neg    %edi
call   1050 <sqrt@plt>
movsd  0xdeb(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xde7(%rip),%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xd6b(%rip),%xmm3
movsd  %xmm0,%xmm3
mulpd  %xmm1,%xmm3
addpd  0xd6b(%rip),%xmm3
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm3
addpd  0xd6b(%rip),%xmm3
mulpd  %xmm0,%xmm3
addpd  0xd6f(%rip),%xmm3
mulpd  %xmm0,%xmm3
addpd  0xd73(%rip),%xmm3
movapd %xmm3,%xmm0
unpckhpd %xmm3,%xmm0
divsd  %xmm0,%xmm3
movapd %xmm3,0x10(%rsp)
movsd  0xdf1(%rip),%xmm0
mulsd  %xmm3,%xmm0
call   1060 <erfc@plt>
mov    %eax,%ecx
shr    $0x1f,%ecx
add    %eax,%ecx
sar    %ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
subsd  (%rsp),%xmm0
mulsd  0xdd3(%rip),%xmm0
movsd  %xmm0,(%rsp)
movapd 0x10(%rsp),%xmm0
mulsd  %xmm0,%xmm0
movsd  0xd34(%rip),%xmm1
mulsd  %xmm1,%xmm0
call   1030 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  (%rsp),%xmm0
movapd 0x10(%rsp),%xmm2
movapd %xmm2,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xd09(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  0xcf5(%rip),%xmm1
divsd  %xmm1,%xmm0
movapd %xmm2,%xmm1
subsd  %xmm0,%xmm1
movapd 0xc81(%rip),%xmm0
xorpd  %xmm1,%xmm0
movapd %xmm1,%xmm2
cmpltsd 0x20(%rsp),%xmm3
movapd %xmm3,%xmm1
andnpd %xmm2,%xmm1
andpd  %xmm0,%xmm3
movapd %xmm3,%xmm0
orpd   %xmm1,%xmm0
add    $0x38,%rsp
ret

LLVM IR (-O0):
@__const.inverse_normal.d = [4 x double] [double 0x3F7FE2D857AC9FD4, double 0x3FD4A34D2B590364, double 0x40038FA27C8AE616, double 0x400E09076895B119]
@HUGE_VAL = global double 0.000000e+00
define double @inverse_normal(double %0) {
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca [6 x double]
%8 = alloca [5 x double]
%9 = alloca [6 x double]
%10 = alloca [4 x double]
store double %0, double* %3
%11 = bitcast [6 x double]* %7 to i8*
%12 = bitcast i8* %11 to [6 x double]*
%13 = getelementptr inbounds [6 x double], [6 x double]* %12, i32 0, i32 0
store double 0xC043D931BC1E0525, double* %13
%14 = getelementptr inbounds [6 x double], [6 x double]* %12, i32 0, i32 1
store double 0x406B9E467034039B, double* %14
%15 = getelementptr inbounds [6 x double], [6 x double]* %12, i32 0, i32 2
store double 0xC0713EDB2DC53B99, double* %15
%16 = getelementptr inbounds [6 x double], [6 x double]* %12, i32 0, i32 3
store double 0x40614B72B40B401B, double* %16
%17 = getelementptr inbounds [6 x double], [6 x double]* %12, i32 0, i32 4
store double 0xC03EAA3034C08BCD, double* %17
%18 = getelementptr inbounds [6 x double], [6 x double]* %12, i32 0, i32 5
store double 0x40040D9320575479, double* %18
%19 = bitcast [5 x double]* %8 to i8*
%20 = bitcast i8* %19 to [5 x double]*
%21 = getelementptr inbounds [5 x double], [5 x double]* %20, i32 0, i32 0
store double 0xC04B3CF0CE3004C4, double* %21
%22 = getelementptr inbounds [5 x double], [5 x double]* %20, i32 0, i32 1
store double 0x406432BF2CF04277, double* %22
%23 = getelementptr inbounds [5 x double], [5 x double]* %20, i32 0, i32 2
store double 0xC063765E0B02D8D2, double* %23
%24 = getelementptr inbounds [5 x double], [5 x double]* %20, i32 0, i32 3
store double 0x4050B348B1A7E9BE, double* %24
%25 = getelementptr inbounds [5 x double], [5 x double]* %20, i32 0, i32 4
store double 0xC02A8FB57E147826, double* %25
%26 = bitcast [6 x double]* %9 to i8*
%27 = bitcast i8* %26 to [6 x double]*
%28 = getelementptr inbounds [6 x double], [6 x double]* %27, i32 0, i32 0
store double 0xBF7FE30D924ACFE0, double* %28
%29 = getelementptr inbounds [6 x double], [6 x double]* %27, i32 0, i32 1
store double 0xBFD4A224C0E881B8, double* %29
%30 = getelementptr inbounds [6 x double], [6 x double]* %27, i32 0, i32 2
store double 0xC00334C0C1701758, double* %30
%31 = getelementptr inbounds [6 x double], [6 x double]* %27, i32 0, i32 3
store double 0xC00465DA2C703A1A, double* %31
%32 = getelementptr inbounds [6 x double], [6 x double]* %27, i32 0, i32 4
store double 0x40117FA7F4EA4DC7, double* %32
%33 = getelementptr inbounds [6 x double], [6 x double]* %27, i32 0, i32 5
store double 0x4007815C1E3FCFA2, double* %33
%34 = bitcast [4 x double]* %10 to i8*
%35 = load double, double* %3
%36 = fcmp ole double %35, 0.000000e+00
br i1 %36, label %37, label %40
37: ; preds = %1
%38 = load double, double* @HUGE_VAL
%39 = fneg double %38
store double %39, double* %2
br label %188
40: ; preds = %1
%41 = load double, double* %3
%42 = fcmp oge double %41, 1.000000e+00
br i1 %42, label %43, label %45
43: ; preds = %40
%44 = load double, double* @HUGE_VAL
store double %44, double* %2
br label %188
45: ; preds = %40
br label %46
46: ; preds = %45
%47 = load double, double* %3
%48 = fcmp olt double %47, 5.000000e-01
br i1 %48, label %49, label %51
49: ; preds = %46
%50 = load double, double* %3
br label %54
51: ; preds = %46
%52 = load double, double* %3
%53 = fsub double 1.000000e+00, %52
br label %54
54: ; preds = %51, %49
%55 = phi double [ %50, %49 ], [ %53, %51 ]
store double %55, double* %4
%56 = load double, double* %4
%57 = fcmp ogt double %56, 2.425000e-02
br i1 %57, label %58, label %109
58: ; preds = %54
%59 = load double, double* %4
%60 = fsub double %59, 5.000000e-01
store double %60, double* %6
%61 = load double, double* %6
%62 = load double, double* %6
%63 = fmul double %61, %62
store double %63, double* %5
%64 = load double, double* %6
%65 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 0
%66 = load double, double* %65
%67 = load double, double* %5
%68 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 1
%69 = load double, double* %68
%70 = call double @llvm.fmuladd.f64(double %66, double %67, double %69)
%71 = load double, double* %5
%72 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 2
%73 = load double, double* %72
%74 = call double @llvm.fmuladd.f64(double %70, double %71, double %73)
%75 = load double, double* %5
%76 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 3
%77 = load double, double* %76
%78 = call double @llvm.fmuladd.f64(double %74, double %75, double %77)
%79 = load double, double* %5
%80 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 4
%81 = load double, double* %80
%82 = call double @llvm.fmuladd.f64(double %78, double %79, double %81)
%83 = load double, double* %5
%84 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 5
%85 = load double, double* %84
%86 = call double @llvm.fmuladd.f64(double %82, double %83, double %85)
%87 = fmul double %64, %86
%88 = getelementptr inbounds [5 x double], [5 x double]* %8, i64 0, i64 0
%89 = load double, double* %88
%90 = load double, double* %5
%91 = getelementptr inbounds [5 x double], [5 x double]* %8, i64 0, i64 1
%92 = load double, double* %91
%93 = call double @llvm.fmuladd.f64(double %89, double %90, double %92)
%94 = load double, double* %5
%95 = getelementptr inbounds [5 x double], [5 x double]* %8, i64 0, i64 2
%96 = load double, double* %95
%97 = call double @llvm.fmuladd.f64(double %93, double %94, double %96)
%98 = load double, double* %5
%99 = getelementptr inbounds [5 x double], [5 x double]* %8, i64 0, i64 3
%100 = load double, double* %99
%101 = call double @llvm.fmuladd.f64(double %97, double %98, double %100)
%102 = load double, double* %5
%103 = getelementptr inbounds [5 x double], [5 x double]* %8, i64 0, i64 4
%104 = load double, double* %103
%105 = call double @llvm.fmuladd.f64(double %101, double %102, double %104)
%106 = load double, double* %5
%107 = call double @llvm.fmuladd.f64(double %105, double %106, double 1.000000e+00)
%108 = fdiv double %87, %107
store double %108, double* %6
br label %153
109: ; preds = %54
%110 = load double, double* %4
%111 = call i32 @log(double %110)
%112 = mul nsw i32 -2, %111
%113 = call double @sqrt(i32 %112)
store double %113, double* %5
%114 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 0
%115 = load double, double* %114
%116 = load double, double* %5
%117 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 1
%118 = load double, double* %117
%119 = call double @llvm.fmuladd.f64(double %115, double %116, double %118)
%120 = load double, double* %5
%121 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 2
%122 = load double, double* %121
%123 = call double @llvm.fmuladd.f64(double %119, double %120, double %122)
%124 = load double, double* %5
%125 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 3
%126 = load double, double* %125
%127 = call double @llvm.fmuladd.f64(double %123, double %124, double %126)
%128 = load double, double* %5
%129 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 4
%130 = load double, double* %129
%131 = call double @llvm.fmuladd.f64(double %127, double %128, double %130)
%132 = load double, double* %5
%133 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 5
%134 = load double, double* %133
%135 = call double @llvm.fmuladd.f64(double %131, double %132, double %134)
%136 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 0
%137 = load double, double* %136
%138 = load double, double* %5
%139 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 1
%140 = load double, double* %139
%141 = call double @llvm.fmuladd.f64(double %137, double %138, double %140)
%142 = load double, double* %5
%143 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 2
%144 = load double, double* %143
%145 = call double @llvm.fmuladd.f64(double %141, double %142, double %144)
%146 = load double, double* %5
%147 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 3
%148 = load double, double* %147
%149 = call double @llvm.fmuladd.f64(double %145, double %146, double %148)
%150 = load double, double* %5
%151 = call double @llvm.fmuladd.f64(double %149, double %150, double 1.000000e+00)
%152 = fdiv double %135, %151
store double %152, double* %6
br label %153
153: ; preds = %109, %58
%154 = load double, double* %6
%155 = fneg double %154
%156 = fmul double %155, 0x3FE6A09E667F3BCD
%157 = call i32 @erfc(double %156)
%158 = sdiv i32 %157, 2
%159 = sitofp i32 %158 to double
%160 = load double, double* %4
%161 = fsub double %159, %160
%162 = fmul double %161, 0x40040D931FF62706
%163 = load double, double* %6
%164 = load double, double* %6
%165 = fmul double %163, %164
%166 = fdiv double %165, 2.000000e+00
%167 = call i32 @exp(double %166)
%168 = sitofp i32 %167 to double
%169 = fmul double %162, %168
store double %169, double* %5
%170 = load double, double* %5
%171 = load double, double* %6
%172 = load double, double* %5
%173 = fmul double %171, %172
%174 = fdiv double %173, 2.000000e+00
%175 = fadd double 1.000000e+00, %174
%176 = fdiv double %170, %175
%177 = load double, double* %6
%178 = fsub double %177, %176
store double %178, double* %6
%179 = load double, double* %3
%180 = fcmp ogt double %179, 5.000000e-01
br i1 %180, label %181, label %184
181: ; preds = %153
%182 = load double, double* %6
%183 = fneg double %182
br label %186
184: ; preds = %153
%185 = load double, double* %6
br label %186
186: ; preds = %184, %181
%187 = phi double [ %183, %181 ], [ %185, %184 ]
store double %187, double* %2
br label %188
188: ; preds = %186, %43, %37
%189 = load double, double* %2
ret double %189
}

LLVM IR (-O2):
@HUGE_VAL = global double 0.000000e+00
define double @inverse_normal(double %0) {
%2 = fcmp ugt double %0, 0.000000e+00
br i1 %2, label %6, label %3
3: ; preds = %1
%4 = load double, double* @HUGE_VAL
%5 = fneg double %4
br label %68
6: ; preds = %1
%7 = fcmp ult double %0, 1.000000e+00
br i1 %7, label %10, label %8
8: ; preds = %6
%9 = load double, double* @HUGE_VAL
br label %68
10: ; preds = %6
%11 = fcmp olt double %0, 5.000000e-01
%12 = fsub double 1.000000e+00, %0
%13 = select i1 %11, double %0, double %12
%14 = fcmp ogt double %13, 2.425000e-02
br i1 %14, label %15, label %30
15: ; preds = %10
%16 = fadd double %13, -5.000000e-01
%17 = fmul double %16, %16
%18 = tail call double @llvm.fmuladd.f64(double %17, double 0xC043D931BC1E0525, double 0x406B9E467034039B)
%19 = tail call double @llvm.fmuladd.f64(double %18, double %17, double 0xC0713EDB2DC53B99)
%20 = tail call double @llvm.fmuladd.f64(double %19, double %17, double 0x40614B72B40B401B)
%21 = tail call double @llvm.fmuladd.f64(double %20, double %17, double 0xC03EAA3034C08BCD)
%22 = tail call double @llvm.fmuladd.f64(double %21, double %17, double 0x40040D9320575479)
%23 = fmul double %16, %22
%24 = tail call double @llvm.fmuladd.f64(double %17, double 0xC04B3CF0CE3004C4, double 0x406432BF2CF04277)
%25 = tail call double @llvm.fmuladd.f64(double %24, double %17, double 0xC063765E0B02D8D2)
%26 = tail call double @llvm.fmuladd.f64(double %25, double %17, double 0x4050B348B1A7E9BE)
%27 = tail call double @llvm.fmuladd.f64(double %26, double %17, double 0xC02A8FB57E147826)
%28 = tail call double @llvm.fmuladd.f64(double %27, double %17, double 1.000000e+00)
%29 = fdiv double %23, %28
br label %47
30: ; preds = %10
%31 = tail call i32 @log(double %13)
%32 = mul nsw i32 %31, -2
%33 = tail call double @sqrt(i32 %32)
%34 = tail call double @llvm.fmuladd.f64(double %33, double 0xBF7FE30D924ACFE0, double 0xBFD4A224C0E881B8)
%35 = insertelement <2 x double> poison, double %34, i64 0
%36 = insertelement <2 x double> %35, double %33, i64 1
%37 = insertelement <2 x double> <double poison, double 0x3F7FE2D857AC9FD4>, double %33, i64 0
%38 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %36, <2 x double> %37, <2 x double> <double 0xC00334C0C1701758, double 0x3FD4A34D2B590364>)
%39 = insertelement <2 x double> poison, double %33, i64 0
%40 = shufflevector <2 x double> %39, <2 x double> poison, <2 x i32> zeroinitializer
%41 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %38, <2 x double> %40, <2 x double> <double 0xC00465DA2C703A1A, double 0x40038FA27C8AE616>)
%42 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %41, <2 x double> %40, <2 x double> <double 0x40117FA7F4EA4DC7, double 0x400E09076895B119>)
%43 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %42, <2 x double> %40, <2 x double> <double 0x4007815C1E3FCFA2, double 1.000000e+00>)
%44 = extractelement <2 x double> %43, i64 0
%45 = extractelement <2 x double> %43, i64 1
%46 = fdiv double %44, %45
br label %47
47: ; preds = %30, %15
%48 = phi double [ %29, %15 ], [ %46, %30 ]
%49 = fmul double %48, 0xBFE6A09E667F3BCD
%50 = tail call i32 @erfc(double %49)
%51 = sdiv i32 %50, 2
%52 = sitofp i32 %51 to double
%53 = fsub double %52, %13
%54 = fmul double %53, 0x40040D931FF62706
%55 = fmul double %48, %48
%56 = fmul double %55, 5.000000e-01
%57 = tail call i32 @exp(double %56)
%58 = sitofp i32 %57 to double
%59 = fmul double %54, %58
%60 = fmul double %48, %59
%61 = fmul double %60, 5.000000e-01
%62 = fadd double %61, 1.000000e+00
%63 = fdiv double %59, %62
%64 = fsub double %48, %63
%65 = fcmp ogt double %0, 5.000000e-01
%66 = fneg double %64
%67 = select i1 %65, double %66, double %64
br label %68
68: ; preds = %47, %8, %3
%69 = phi double [ %5, %3 ], [ %9, %8 ], [ %67, %47 ]
ret double %69
}