#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 */
scalar_t__ isnan(double);
int log(int);
double sqrt(int);
void _bal_pja_invnorm(double *p, size_t num) {
  const double a[] = {-3.969683028665376e+01, 2.209460984245205e+02,
                      -2.759285104469687e+02, 1.383577518672690e+02,
                      -3.066479806614716e+01, 2.506628277459239e+00};
  const double b[] = {-5.447609879822406e+01, 1.615858368580409e+02,
                      -1.556989798598866e+02, 6.680131188771972e+01,
                      -1.328068155288572e+01};
  const double c[] = {-7.784894002430293e-03, -3.223964580411365e-01,
                      -2.400758277161838e+00, -2.549732539343734e+00,
                      4.374664141464968e+00,  2.938163982698783e+00};
  const double d[] = {7.784695709041462e-03, 3.224671290700398e-01,
                      2.445134137142996e+00, 3.754408661907416e+00};
  const double p_low = 0.02425, p_high = 1. - p_low;
  double q, r;
  size_t i;
  for (i = 0; i < num; i++) {
    if (p_low <= p[i] & p[i] <= p_high) {
      q = p[i] - .5;
      r = q * q;
      p[i] =
          ((((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r +
            a[5]) *
           q) /
          (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1.);
    } else if (0. < p[i] & p[i] < p_low) {
      q = sqrt(-2. * log(p[i]));
      p[i] = (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q +
              c[5]) /
             ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1.);
      if (isnan(p[i])) {
        p[i] = -38.44939;
      }
    } else if (p_high < p[i] & p[i] < 1.) {
      q = sqrt(-2. * log(1. - p[i]));
      p[i] = -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q +
               c[5]) /
             ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1.);
      if (isnan(p[i])) {
        p[i] = 8.20954;
      }
    } else {
      p[i] = 0.;
    }
  }
}


x86 assembly (clang, -O0):
<_bal_pja_invnorm>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
lea    -0x40(%rbp),%rdi
xor    %esi,%esi
mov    $0x30,%edx
call   1030 <memset@plt>
movsd  0xf25(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xf10(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xefb(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xee6(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xed1(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xebc(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
lea    -0x70(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1030 <memset@plt>
movsd  0xe97(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe82(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xe6d(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xe58(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe43(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
lea    -0xa0(%rbp),%rdi
xor    %esi,%esi
mov    $0x30,%edx
call   1030 <memset@plt>
movsd  0xe1b(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xe03(%rip),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xdeb(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xdd3(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xdbb(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xda6(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0xe4a(%rip),%rax
mov    %rax,-0xc0(%rbp)
mov    0xe44(%rip),%rax
mov    %rax,-0xb8(%rbp)
mov    0xe3e(%rip),%rax
mov    %rax,-0xb0(%rbp)
mov    0xe38(%rip),%rax
mov    %rax,-0xa8(%rbp)
movsd  0xd59(%rip),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xd41(%rip),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movq   $0x0,-0xe8(%rbp)
mov    -0xe8(%rbp),%rax
cmp    -0x10(%rbp),%rax
jae    1836 <_bal_pja_invnorm+0x6f6>
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd0d(%rip),%xmm1
ucomisd %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x8(%rbp),%rcx
mov    -0xe8(%rbp),%rdx
movsd  0xce6(%rip),%xmm0
ucomisd (%rcx,%rdx,8),%xmm0
setae  %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     146f <_bal_pja_invnorm+0x32f>
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd6d(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm1
movsd  -0xe0(%rbp),%xmm3
ff
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xe0(%rbp),%xmm3
ff
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xe0(%rbp),%xmm3
ff
movsd  -0x58(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xe0(%rbp),%xmm3
ff
movsd  -0x50(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xe0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
movsd  0xc46(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    181a <_bal_pja_invnorm+0x6da>
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x8(%rbp),%rcx
mov    -0xe8(%rbp),%rdx
movsd  0xb67(%rip),%xmm0
ucomisd (%rcx,%rdx,8),%xmm0
seta   %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     1622 <_bal_pja_invnorm+0x4e2>
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
cvttsd2si (%rax,%rcx,8),%edi
call   1050 <log@plt>
cvtsi2sd %eax,%xmm1
movsd  0xbc5(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm3
ff
movsd  -0xb8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xd8(%rbp),%xmm3
ff
movsd  -0xb0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xd8(%rbp),%xmm3
ff
movsd  -0xa8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xd8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
movsd  0xaca(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <isnan@plt>
cmp    $0x0,%rax
je     161d <_bal_pja_invnorm+0x4dd>
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  0xa98(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1815 <_bal_pja_invnorm+0x6d5>
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0x9c6(%rip),%xmm1
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x8(%rbp),%rcx
mov    -0xe8(%rbp),%rdx
movsd  0xa3f(%rip),%xmm0
ucomisd (%rcx,%rdx,8),%xmm0
seta   %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     17fd <_bal_pja_invnorm+0x6bd>
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  0xa13(%rip),%xmm0
subsd  (%rax,%rcx,8),%xmm0
cvttsd2si %xmm0,%edi
call   1050 <log@plt>
cvtsi2sd %eax,%xmm1
movsd  0xa01(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm3
ff
movsd  -0xb8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xd8(%rbp),%xmm3
ff
movsd  -0xb0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xd8(%rbp),%xmm3
ff
movsd  -0xa8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0xd8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
movsd  0x8ef(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <isnan@plt>
cmp    $0x0,%rax
je     17f8 <_bal_pja_invnorm+0x6b8>
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
movsd  0x8b5(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1810 <_bal_pja_invnorm+0x6d0>
mov    -0x8(%rbp),%rax
mov    -0xe8(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1815 <_bal_pja_invnorm+0x6d5>
jmp    181a <_bal_pja_invnorm+0x6da>
jmp    181f <_bal_pja_invnorm+0x6df>
mov    -0xe8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0xe8(%rbp)
jmp    12d2 <_bal_pja_invnorm+0x192>
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<_bal_pja_invnorm>:
push   %r15
push   %r14
push   %rbx
test   %rsi,%rsi
je     13e8 <_bal_pja_invnorm+0x2b8>
mov    %rsi,%r14
mov    %rdi,%r15
xor    %ebx,%ebx
movsd  0xeb2(%rip),%xmm3
movsd  0xeb2(%rip),%xmm4
jmp    1213 <_bal_pja_invnorm+0xe3>
nopl   0x0(%rax,%rax,1)
addsd  0xf10(%rip),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,%xmm0
mulsd  0xf04(%rip),%xmm0
addsd  0xf04(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0xf00(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0xefc(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0xef8(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0xef4(%rip),%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm2,%xmm1
mulsd  0xeec(%rip),%xmm1
addsd  0xeec(%rip),%xmm1
mulsd  %xmm2,%xmm1
addsd  0xee8(%rip),%xmm1
mulsd  %xmm2,%xmm1
addsd  0xee4(%rip),%xmm1
mulsd  %xmm2,%xmm1
addsd  0xee0(%rip),%xmm1
mulsd  %xmm2,%xmm1
addsd  0xe14(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,(%r15,%rbx,8)
add    $0x1,%rbx
cmp    %rbx,%r14
je     13e8 <_bal_pja_invnorm+0x2b8>
movsd  (%r15,%rbx,8),%xmm1
ucomisd %xmm3,%xmm1
jb     1229 <_bal_pja_invnorm+0xf9>
ucomisd %xmm1,%xmm4
jae    1160 <_bal_pja_invnorm+0x30>
ucomisd 0xea7(%rip),%xmm1
jbe    12f0 <_bal_pja_invnorm+0x1c0>
ucomisd %xmm1,%xmm3
jbe    12f0 <_bal_pja_invnorm+0x1c0>
cvttsd2si %xmm1,%edi
call   1040 <log@plt>
lea    (%rax,%rax,1),%edi
neg    %edi
call   1050 <sqrt@plt>
movapd %xmm0,%xmm1
mulsd  0xdb8(%rip),%xmm1
addsd  0xdb8(%rip),%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xe7c(%rip),%xmm2
movsd  %xmm0,%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe7c(%rip),%xmm2
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm2
addpd  0xe7c(%rip),%xmm2
mulpd  %xmm0,%xmm2
addpd  0xe80(%rip),%xmm2
mulpd  %xmm2,%xmm0
addpd  0xe84(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,(%r15,%rbx,8)
call   1030 <isnan@plt>
movsd  0xd3d(%rip),%xmm4
movsd  0xd2d(%rip),%xmm3
movsd  0xd95(%rip),%xmm0
test   %rax,%rax
jne    1200 <_bal_pja_invnorm+0xd0>
jmp    1206 <_bal_pja_invnorm+0xd6>
nopl   0x0(%rax)
ucomisd %xmm4,%xmm1
xorpd  %xmm0,%xmm0
jbe    1200 <_bal_pja_invnorm+0xd0>
movsd  0xd0a(%rip),%xmm2
ucomisd %xmm1,%xmm2
jbe    1200 <_bal_pja_invnorm+0xd0>
movsd  0xcf8(%rip),%xmm0
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <log@plt>
lea    (%rax,%rax,1),%edi
neg    %edi
call   1050 <sqrt@plt>
movapd %xmm0,%xmm1
mulsd  0xcdd(%rip),%xmm0
addsd  0xcdd(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xcd9(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xcd5(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xcd1(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xccd(%rip),%xmm0
xorpd  0xd65(%rip),%xmm0
movapd %xmm1,%xmm2
mulsd  0xcc1(%rip),%xmm2
addsd  0xcc1(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xcbd(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xcb9(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xc5d(%rip),%xmm2
divsd  %xmm2,%xmm0
movsd  %xmm0,(%r15,%rbx,8)
call   1030 <isnan@plt>
movsd  0xc3e(%rip),%xmm4
movsd  0xc2e(%rip),%xmm3
movsd  0xc8e(%rip),%xmm0
test   %rax,%rax
jne    1200 <_bal_pja_invnorm+0xd0>
jmp    1206 <_bal_pja_invnorm+0xd6>
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@__const._bal_pja_invnorm.d = [4 x double] [double 0x3F7FE2D857AC9FD4, double 0x3FD4A34D2B590364, double 0x40038FA27C8AE616, double 0x400E09076895B119]
define void @_bal_pja_invnorm(double* %0, i64 %1) {
%3 = alloca double*
%4 = alloca i64
%5 = alloca [6 x double]
%6 = alloca [5 x double]
%7 = alloca [6 x double]
%8 = alloca [4 x double]
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca i64
store double* %0, double** %3
store i64 %1, i64* %4
%14 = bitcast [6 x double]* %5 to i8*
%15 = bitcast i8* %14 to [6 x double]*
%16 = getelementptr inbounds [6 x double], [6 x double]* %15, i32 0, i32 0
store double 0xC043D931BC1E0525, double* %16
%17 = getelementptr inbounds [6 x double], [6 x double]* %15, i32 0, i32 1
store double 0x406B9E467034039B, double* %17
%18 = getelementptr inbounds [6 x double], [6 x double]* %15, i32 0, i32 2
store double 0xC0713EDB2DC53B99, double* %18
%19 = getelementptr inbounds [6 x double], [6 x double]* %15, i32 0, i32 3
store double 0x40614B72B40B401B, double* %19
%20 = getelementptr inbounds [6 x double], [6 x double]* %15, i32 0, i32 4
store double 0xC03EAA3034C08BCD, double* %20
%21 = getelementptr inbounds [6 x double], [6 x double]* %15, i32 0, i32 5
store double 0x40040D9320575479, double* %21
%22 = bitcast [5 x double]* %6 to i8*
%23 = bitcast i8* %22 to [5 x double]*
%24 = getelementptr inbounds [5 x double], [5 x double]* %23, i32 0, i32 0
store double 0xC04B3CF0CE3004C4, double* %24
%25 = getelementptr inbounds [5 x double], [5 x double]* %23, i32 0, i32 1
store double 0x406432BF2CF04277, double* %25
%26 = getelementptr inbounds [5 x double], [5 x double]* %23, i32 0, i32 2
store double 0xC063765E0B02D8D2, double* %26
%27 = getelementptr inbounds [5 x double], [5 x double]* %23, i32 0, i32 3
store double 0x4050B348B1A7E9BE, double* %27
%28 = getelementptr inbounds [5 x double], [5 x double]* %23, i32 0, i32 4
store double 0xC02A8FB57E147826, double* %28
%29 = bitcast [6 x double]* %7 to i8*
%30 = bitcast i8* %29 to [6 x double]*
%31 = getelementptr inbounds [6 x double], [6 x double]* %30, i32 0, i32 0
store double 0xBF7FE30D924ACFE0, double* %31
%32 = getelementptr inbounds [6 x double], [6 x double]* %30, i32 0, i32 1
store double 0xBFD4A224C0E881B8, double* %32
%33 = getelementptr inbounds [6 x double], [6 x double]* %30, i32 0, i32 2
store double 0xC00334C0C1701758, double* %33
%34 = getelementptr inbounds [6 x double], [6 x double]* %30, i32 0, i32 3
store double 0xC00465DA2C703A1A, double* %34
%35 = getelementptr inbounds [6 x double], [6 x double]* %30, i32 0, i32 4
store double 0x40117FA7F4EA4DC7, double* %35
%36 = getelementptr inbounds [6 x double], [6 x double]* %30, i32 0, i32 5
store double 0x4007815C1E3FCFA2, double* %36
%37 = bitcast [4 x double]* %8 to i8*
store double 2.425000e-02, double* %9
store double 9.757500e-01, double* %10
store i64 0, i64* %13
br label %38
38: ; preds = %281, %2
%39 = load i64, i64* %13
%40 = load i64, i64* %4
%41 = icmp ult i64 %39, %40
br i1 %41, label %42, label %284
42: ; preds = %38
%43 = load double*, double** %3
%44 = load i64, i64* %13
%45 = getelementptr inbounds double, double* %43, i64 %44
%46 = load double, double* %45
%47 = fcmp ole double 2.425000e-02, %46
%48 = zext i1 %47 to i32
%49 = load double*, double** %3
%50 = load i64, i64* %13
%51 = getelementptr inbounds double, double* %49, i64 %50
%52 = load double, double* %51
%53 = fcmp ole double %52, 9.757500e-01
%54 = zext i1 %53 to i32
%55 = and i32 %48, %54
%56 = icmp ne i32 %55, 0
br i1 %56, label %57, label %114
57: ; preds = %42
%58 = load double*, double** %3
%59 = load i64, i64* %13
%60 = getelementptr inbounds double, double* %58, i64 %59
%61 = load double, double* %60
%62 = fsub double %61, 5.000000e-01
store double %62, double* %11
%63 = load double, double* %11
%64 = load double, double* %11
%65 = fmul double %63, %64
store double %65, double* %12
%66 = getelementptr inbounds [6 x double], [6 x double]* %5, i64 0, i64 0
%67 = load double, double* %66
%68 = load double, double* %12
%69 = getelementptr inbounds [6 x double], [6 x double]* %5, i64 0, i64 1
%70 = load double, double* %69
%71 = call double @llvm.fmuladd.f64(double %67, double %68, double %70)
%72 = load double, double* %12
%73 = getelementptr inbounds [6 x double], [6 x double]* %5, i64 0, i64 2
%74 = load double, double* %73
%75 = call double @llvm.fmuladd.f64(double %71, double %72, double %74)
%76 = load double, double* %12
%77 = getelementptr inbounds [6 x double], [6 x double]* %5, i64 0, i64 3
%78 = load double, double* %77
%79 = call double @llvm.fmuladd.f64(double %75, double %76, double %78)
%80 = load double, double* %12
%81 = getelementptr inbounds [6 x double], [6 x double]* %5, i64 0, i64 4
%82 = load double, double* %81
%83 = call double @llvm.fmuladd.f64(double %79, double %80, double %82)
%84 = load double, double* %12
%85 = getelementptr inbounds [6 x double], [6 x double]* %5, i64 0, i64 5
%86 = load double, double* %85
%87 = call double @llvm.fmuladd.f64(double %83, double %84, double %86)
%88 = load double, double* %11
%89 = fmul double %87, %88
%90 = getelementptr inbounds [5 x double], [5 x double]* %6, i64 0, i64 0
%91 = load double, double* %90
%92 = load double, double* %12
%93 = getelementptr inbounds [5 x double], [5 x double]* %6, i64 0, i64 1
%94 = load double, double* %93
%95 = call double @llvm.fmuladd.f64(double %91, double %92, double %94)
%96 = load double, double* %12
%97 = getelementptr inbounds [5 x double], [5 x double]* %6, i64 0, i64 2
%98 = load double, double* %97
%99 = call double @llvm.fmuladd.f64(double %95, double %96, double %98)
%100 = load double, double* %12
%101 = getelementptr inbounds [5 x double], [5 x double]* %6, i64 0, i64 3
%102 = load double, double* %101
%103 = call double @llvm.fmuladd.f64(double %99, double %100, double %102)
%104 = load double, double* %12
%105 = getelementptr inbounds [5 x double], [5 x double]* %6, i64 0, i64 4
%106 = load double, double* %105
%107 = call double @llvm.fmuladd.f64(double %103, double %104, double %106)
%108 = load double, double* %12
%109 = call double @llvm.fmuladd.f64(double %107, double %108, double 1.000000e+00)
%110 = fdiv double %89, %109
%111 = load double*, double** %3
%112 = load i64, i64* %13
%113 = getelementptr inbounds double, double* %111, i64 %112
store double %110, double* %113
br label %280
114: ; preds = %42
%115 = load double*, double** %3
%116 = load i64, i64* %13
%117 = getelementptr inbounds double, double* %115, i64 %116
%118 = load double, double* %117
%119 = fcmp olt double 0.000000e+00, %118
%120 = zext i1 %119 to i32
%121 = load double*, double** %3
%122 = load i64, i64* %13
%123 = getelementptr inbounds double, double* %121, i64 %122
%124 = load double, double* %123
%125 = fcmp olt double %124, 2.425000e-02
%126 = zext i1 %125 to i32
%127 = and i32 %120, %126
%128 = icmp ne i32 %127, 0
br i1 %128, label %129, label %193
129: ; preds = %114
%130 = load double*, double** %3
%131 = load i64, i64* %13
%132 = getelementptr inbounds double, double* %130, i64 %131
%133 = load double, double* %132
%134 = fptosi double %133 to i32
%135 = call i32 @log(i32 %134)
%136 = sitofp i32 %135 to double
%137 = fmul double -2.000000e+00, %136
%138 = fptosi double %137 to i32
%139 = call double @sqrt(i32 %138)
store double %139, double* %11
%140 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 0
%141 = load double, double* %140
%142 = load double, double* %11
%143 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 1
%144 = load double, double* %143
%145 = call double @llvm.fmuladd.f64(double %141, double %142, double %144)
%146 = load double, double* %11
%147 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 2
%148 = load double, double* %147
%149 = call double @llvm.fmuladd.f64(double %145, double %146, double %148)
%150 = load double, double* %11
%151 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 3
%152 = load double, double* %151
%153 = call double @llvm.fmuladd.f64(double %149, double %150, double %152)
%154 = load double, double* %11
%155 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 4
%156 = load double, double* %155
%157 = call double @llvm.fmuladd.f64(double %153, double %154, double %156)
%158 = load double, double* %11
%159 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 5
%160 = load double, double* %159
%161 = call double @llvm.fmuladd.f64(double %157, double %158, double %160)
%162 = getelementptr inbounds [4 x double], [4 x double]* %8, i64 0, i64 0
%163 = load double, double* %162
%164 = load double, double* %11
%165 = getelementptr inbounds [4 x double], [4 x double]* %8, i64 0, i64 1
%166 = load double, double* %165
%167 = call double @llvm.fmuladd.f64(double %163, double %164, double %166)
%168 = load double, double* %11
%169 = getelementptr inbounds [4 x double], [4 x double]* %8, i64 0, i64 2
%170 = load double, double* %169
%171 = call double @llvm.fmuladd.f64(double %167, double %168, double %170)
%172 = load double, double* %11
%173 = getelementptr inbounds [4 x double], [4 x double]* %8, i64 0, i64 3
%174 = load double, double* %173
%175 = call double @llvm.fmuladd.f64(double %171, double %172, double %174)
%176 = load double, double* %11
%177 = call double @llvm.fmuladd.f64(double %175, double %176, double 1.000000e+00)
%178 = fdiv double %161, %177
%179 = load double*, double** %3
%180 = load i64, i64* %13
%181 = getelementptr inbounds double, double* %179, i64 %180
store double %178, double* %181
%182 = load double*, double** %3
%183 = load i64, i64* %13
%184 = getelementptr inbounds double, double* %182, i64 %183
%185 = load double, double* %184
%186 = call i64 @isnan(double %185)
%187 = icmp ne i64 %186, 0
br i1 %187, label %188, label %192
188: ; preds = %129
%189 = load double*, double** %3
%190 = load i64, i64* %13
%191 = getelementptr inbounds double, double* %189, i64 %190
store double 0xC04339859C8C9321, double* %191
br label %192
192: ; preds = %188, %129
br label %279
193: ; preds = %114
%194 = load double*, double** %3
%195 = load i64, i64* %13
%196 = getelementptr inbounds double, double* %194, i64 %195
%197 = load double, double* %196
%198 = fcmp olt double 9.757500e-01, %197
%199 = zext i1 %198 to i32
%200 = load double*, double** %3
%201 = load i64, i64* %13
%202 = getelementptr inbounds double, double* %200, i64 %201
%203 = load double, double* %202
%204 = fcmp olt double %203, 1.000000e+00
%205 = zext i1 %204 to i32
%206 = and i32 %199, %205
%207 = icmp ne i32 %206, 0
br i1 %207, label %208, label %274
208: ; preds = %193
%209 = load double*, double** %3
%210 = load i64, i64* %13
%211 = getelementptr inbounds double, double* %209, i64 %210
%212 = load double, double* %211
%213 = fsub double 1.000000e+00, %212
%214 = fptosi double %213 to i32
%215 = call i32 @log(i32 %214)
%216 = sitofp i32 %215 to double
%217 = fmul double -2.000000e+00, %216
%218 = fptosi double %217 to i32
%219 = call double @sqrt(i32 %218)
store double %219, double* %11
%220 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 0
%221 = load double, double* %220
%222 = load double, double* %11
%223 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 1
%224 = load double, double* %223
%225 = call double @llvm.fmuladd.f64(double %221, double %222, double %224)
%226 = load double, double* %11
%227 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 2
%228 = load double, double* %227
%229 = call double @llvm.fmuladd.f64(double %225, double %226, double %228)
%230 = load double, double* %11
%231 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 3
%232 = load double, double* %231
%233 = call double @llvm.fmuladd.f64(double %229, double %230, double %232)
%234 = load double, double* %11
%235 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 4
%236 = load double, double* %235
%237 = call double @llvm.fmuladd.f64(double %233, double %234, double %236)
%238 = load double, double* %11
%239 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 5
%240 = load double, double* %239
%241 = call double @llvm.fmuladd.f64(double %237, double %238, double %240)
%242 = fneg double %241
%243 = getelementptr inbounds [4 x double], [4 x double]* %8, i64 0, i64 0
%244 = load double, double* %243
%245 = load double, double* %11
%246 = getelementptr inbounds [4 x double], [4 x double]* %8, i64 0, i64 1
%247 = load double, double* %246
%248 = call double @llvm.fmuladd.f64(double %244, double %245, double %247)
%249 = load double, double* %11
%250 = getelementptr inbounds [4 x double], [4 x double]* %8, i64 0, i64 2
%251 = load double, double* %250
%252 = call double @llvm.fmuladd.f64(double %248, double %249, double %251)
%253 = load double, double* %11
%254 = getelementptr inbounds [4 x double], [4 x double]* %8, i64 0, i64 3
%255 = load double, double* %254
%256 = call double @llvm.fmuladd.f64(double %252, double %253, double %255)
%257 = load double, double* %11
%258 = call double @llvm.fmuladd.f64(double %256, double %257, double 1.000000e+00)
%259 = fdiv double %242, %258
%260 = load double*, double** %3
%261 = load i64, i64* %13
%262 = getelementptr inbounds double, double* %260, i64 %261
store double %259, double* %262
%263 = load double*, double** %3
%264 = load i64, i64* %13
%265 = getelementptr inbounds double, double* %263, i64 %264
%266 = load double, double* %265
%267 = call i64 @isnan(double %266)
%268 = icmp ne i64 %267, 0
br i1 %268, label %269, label %273
269: ; preds = %208
%270 = load double*, double** %3
%271 = load i64, i64* %13
%272 = getelementptr inbounds double, double* %270, i64 %271
store double 8.209540e+00, double* %272
br label %273
273: ; preds = %269, %208
br label %278
274: ; preds = %193
%275 = load double*, double** %3
%276 = load i64, i64* %13
%277 = getelementptr inbounds double, double* %275, i64 %276
store double 0.000000e+00, double* %277
br label %278
278: ; preds = %274, %273
br label %279
279: ; preds = %278, %192
br label %280
280: ; preds = %279, %57
br label %281
281: ; preds = %280
%282 = load i64, i64* %13
%283 = add i64 %282, 1
store i64 %283, i64* %13
br label %38
284: ; preds = %38
ret void
}

LLVM IR (-O2):
define void @_bal_pja_invnorm(double* nocapture %0, i64 %1) {
%3 = icmp eq i64 %1, 0
br i1 %3, label %78, label %4
4: ; preds = %2, %75
%5 = phi i64 [ %76, %75 ], [ 0, %2 ]
%6 = getelementptr inbounds double, double* %0, i64 %5
%7 = load double, double* %6
%8 = fcmp oge double %7, 2.425000e-02
%9 = fcmp ole double %7, 9.757500e-01
%10 = and i1 %8, %9
br i1 %10, label %11, label %26
11: ; preds = %4
%12 = fadd double %7, -5.000000e-01
%13 = fmul double %12, %12
%14 = tail call double @llvm.fmuladd.f64(double %13, double 0xC043D931BC1E0525, double 0x406B9E467034039B)
%15 = tail call double @llvm.fmuladd.f64(double %14, double %13, double 0xC0713EDB2DC53B99)
%16 = tail call double @llvm.fmuladd.f64(double %15, double %13, double 0x40614B72B40B401B)
%17 = tail call double @llvm.fmuladd.f64(double %16, double %13, double 0xC03EAA3034C08BCD)
%18 = tail call double @llvm.fmuladd.f64(double %17, double %13, double 0x40040D9320575479)
%19 = fmul double %12, %18
%20 = tail call double @llvm.fmuladd.f64(double %13, double 0xC04B3CF0CE3004C4, double 0x406432BF2CF04277)
%21 = tail call double @llvm.fmuladd.f64(double %20, double %13, double 0xC063765E0B02D8D2)
%22 = tail call double @llvm.fmuladd.f64(double %21, double %13, double 0x4050B348B1A7E9BE)
%23 = tail call double @llvm.fmuladd.f64(double %22, double %13, double 0xC02A8FB57E147826)
%24 = tail call double @llvm.fmuladd.f64(double %23, double %13, double 1.000000e+00)
%25 = fdiv double %19, %24
br label %73
26: ; preds = %4
%27 = fcmp ogt double %7, 0.000000e+00
%28 = fcmp olt double %7, 2.425000e-02
%29 = and i1 %27, %28
br i1 %29, label %30, label %50
30: ; preds = %26
%31 = fptosi double %7 to i32
%32 = tail call i32 @log(i32 %31)
%33 = mul i32 %32, -2
%34 = tail call double @sqrt(i32 %33)
%35 = tail call double @llvm.fmuladd.f64(double %34, double 0xBF7FE30D924ACFE0, double 0xBFD4A224C0E881B8)
%36 = insertelement <2 x double> poison, double %35, i64 0
%37 = insertelement <2 x double> %36, double %34, i64 1
%38 = insertelement <2 x double> <double poison, double 0x3F7FE2D857AC9FD4>, double %34, i64 0
%39 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %37, <2 x double> %38, <2 x double> <double 0xC00334C0C1701758, double 0x3FD4A34D2B590364>)
%40 = insertelement <2 x double> poison, double %34, i64 0
%41 = shufflevector <2 x double> %40, <2 x double> poison, <2 x i32> zeroinitializer
%42 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %39, <2 x double> %41, <2 x double> <double 0xC00465DA2C703A1A, double 0x40038FA27C8AE616>)
%43 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %42, <2 x double> %41, <2 x double> <double 0x40117FA7F4EA4DC7, double 0x400E09076895B119>)
%44 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %43, <2 x double> %41, <2 x double> <double 0x4007815C1E3FCFA2, double 1.000000e+00>)
%45 = extractelement <2 x double> %44, i64 0
%46 = extractelement <2 x double> %44, i64 1
%47 = fdiv double %45, %46
store double %47, double* %6
%48 = tail call i64 @isnan(double %47)
%49 = icmp eq i64 %48, 0
br i1 %49, label %75, label %73
50: ; preds = %26
%51 = fcmp ogt double %7, 9.757500e-01
%52 = fcmp olt double %7, 1.000000e+00
%53 = and i1 %51, %52
br i1 %53, label %54, label %73
54: ; preds = %50
%55 = fsub double 1.000000e+00, %7
%56 = fptosi double %55 to i32
%57 = tail call i32 @log(i32 %56)
%58 = mul i32 %57, -2
%59 = tail call double @sqrt(i32 %58)
%60 = tail call double @llvm.fmuladd.f64(double %59, double 0xBF7FE30D924ACFE0, double 0xBFD4A224C0E881B8)
%61 = tail call double @llvm.fmuladd.f64(double %60, double %59, double 0xC00334C0C1701758)
%62 = tail call double @llvm.fmuladd.f64(double %61, double %59, double 0xC00465DA2C703A1A)
%63 = tail call double @llvm.fmuladd.f64(double %62, double %59, double 0x40117FA7F4EA4DC7)
%64 = tail call double @llvm.fmuladd.f64(double %63, double %59, double 0x4007815C1E3FCFA2)
%65 = fneg double %64
%66 = tail call double @llvm.fmuladd.f64(double %59, double 0x3F7FE2D857AC9FD4, double 0x3FD4A34D2B590364)
%67 = tail call double @llvm.fmuladd.f64(double %66, double %59, double 0x40038FA27C8AE616)
%68 = tail call double @llvm.fmuladd.f64(double %67, double %59, double 0x400E09076895B119)
%69 = tail call double @llvm.fmuladd.f64(double %68, double %59, double 1.000000e+00)
%70 = fdiv double %65, %69
store double %70, double* %6
%71 = tail call i64 @isnan(double %70)
%72 = icmp eq i64 %71, 0
br i1 %72, label %75, label %73
73: ; preds = %50, %54, %30, %11
%74 = phi double [ %25, %11 ], [ 0xC04339859C8C9321, %30 ], [ 8.209540e+00, %54 ], [ 0.000000e+00, %50 ]
store double %74, double* %6
br label %75
75: ; preds = %73, %54, %30
%76 = add nuw i64 %5, 1
%77 = icmp eq i64 %76, %1
br i1 %77, label %78, label %4
78: ; preds = %75, %2
ret void
}