#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 */
int CDFNormal(double);
double exp(double);
int fabs(double);
double sqrt(double);
double LBinormal(double h1, double h2, double r) {
  int i;
  double x[] = {0.04691008, 0.23076534, 0.5, 0.76923466, 0.95308992};
  double w[] = {0.018854042, 0.038088059, 0.0452707394, 0.038088059,
                0.018854042};
  double Lh = 0, r1, r2, r3, rr, aa, ab, h3, h5, h6, h7, h12;
  h12 = (h1 * h1 + h2 * h2) / 2;
  if (fabs(r) >= 0.7) {
    r2 = 1 - r * r;
    r3 = sqrt(r2);
    if (r < 0)
      h2 *= -1;
    h3 = h1 * h2;
    h7 = exp(-h3 / 2);
    if (fabs(r) != 1) {
      h6 = fabs(h1 - h2);
      h5 = h6 * h6 / 2;
      h6 /= r3;
      aa = .5 - h3 / 8;
      ab = 3 - 2 * aa * h5;
      Lh = .13298076 * h6 * ab * (1 - CDFNormal(h6)) -
           exp(-h5 / r2) * (ab + aa * r2) * 0.053051647;
      for (i = 0; i < 5; i++) {
        r1 = r3 * x[i];
        rr = r1 * r1;
        r2 = sqrt(1 - rr);
        Lh -= w[i] * exp(-h5 / rr) *
              (exp(-h3 / (1 + r2)) / r2 / h7 - 1 - aa * rr);
      }
    }
    if (r > 0)
      Lh = Lh * r3 * h7 + (1 - CDFNormal(((h1) > (h2) ? (h1) : (h2))));
    else if (r < 0)
      Lh = (h1 < h2 ? CDFNormal(h2) - CDFNormal(h1) : 0) - Lh * r3 * h7;
  } else {
    h3 = h1 * h2;
    if (r != 0)
      for (i = 0; i < 5; i++) {
        r1 = r * x[i];
        r2 = 1 - r1 * r1;
        Lh += w[i] * exp((r1 * h3 - h12) / r2) / sqrt(r2);
      }
    Lh = (1 - CDFNormal(h1)) * (1 - CDFNormal(h2)) + r * Lh;
  }
  return (Lh);
}


x86 assembly (clang, -O0):
<LBinormal>:
push   %rbp
mov    %rsp,%rbp
sub    $0x140,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
lea    -0x50(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1030 <memset@plt>
movsd  0xec6(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xeb1(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe9c(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe87(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe72(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
lea    -0x80(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1030 <memset@plt>
movsd  0xe3d(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xe38(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xe33(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe1e(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xe09(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xdcd(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xda3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     17b2 <LBinormal+0x662>
movsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xdbc(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1060 <sqrt@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    12d5 <LBinormal+0x185>
movsd  0xd8d(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x8(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xcfa(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <exp@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
call   1040 <fabs@plt>
cmp    $0x1,%eax
je     1659 <LBinormal+0x509>
movsd  -0x8(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  0xca3(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  0xcdb(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xc8f(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xc4b(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc80(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xc64(%rip),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
call   1070 <CDFNormal@plt>
mov    %eax,%ecx
mov    $0x1,%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x98(%rbp),%xmm0
ff
call   1050 <exp@plt>
movsd  -0xf0(%rbp),%xmm2
ff
movaps %xmm0,%xmm1
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm4
ff
movsd  -0xb0(%rbp),%xmm3
ff
movsd  -0x98(%rbp),%xmm5
ff
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
movsd  0xbb7(%rip),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x0,-0x1c(%rbp)
cmpl   $0x5,-0x1c(%rbp)
jge    1654 <LBinormal+0x504>
movsd  -0xa0(%rbp),%xmm0
ff
movslq -0x1c(%rbp),%rax
mulsd  -0x50(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xb31(%rip),%xmm0
subsd  -0xa8(%rbp),%xmm0
ff
call   1060 <sqrt@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movslq -0x1c(%rbp),%rax
movsd  -0x80(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
call   1050 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x100(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xaa0(%rip),%xmm1
addsd  -0x98(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1050 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
divsd  -0x98(%rbp),%xmm1
ff
divsd  -0xd8(%rbp),%xmm1
ff
movsd  0xa6c(%rip),%xmm2
subsd  %xmm2,%xmm1
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm3
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    14db <LBinormal+0x38b>
jmp    1659 <LBinormal+0x509>
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1701 <LBinormal+0x5b1>
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    16b5 <LBinormal+0x565>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
jmp    16c2 <LBinormal+0x572>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
call   1070 <CDFNormal@plt>
movsd  -0x110(%rbp),%xmm0
ff
movsd  -0x108(%rbp),%xmm2
ff
mov    %eax,%ecx
mov    $0x1,%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    17ad <LBinormal+0x65d>
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    17a8 <LBinormal+0x658>
movsd  -0x8(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1752 <LBinormal+0x602>
movsd  -0x10(%rbp),%xmm0
call   1070 <CDFNormal@plt>
mov    %eax,-0x120(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1070 <CDFNormal@plt>
mov    %eax,%ecx
mov    -0x120(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x11c(%rbp)
jmp    175f <LBinormal+0x60f>
xor    %eax,%eax
mov    %eax,-0x11c(%rbp)
jmp    175f <LBinormal+0x60f>
mov    -0x11c(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    17ad <LBinormal+0x65d>
jmp    194a <LBinormal+0x7fa>
movsd  -0x8(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    17e1 <LBinormal+0x691>
jp     17e1 <LBinormal+0x691>
jmp    18f4 <LBinormal+0x7a4>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x5,-0x1c(%rbp)
jge    18ef <LBinormal+0x79f>
movsd  -0x18(%rbp),%xmm0
movslq -0x1c(%rbp),%rax
mulsd  -0x50(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x814(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movslq -0x1c(%rbp),%rax
movsd  -0x80(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x98(%rbp),%xmm0
ff
call   1050 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x130(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1060 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    17e8 <LBinormal+0x698>
jmp    18f4 <LBinormal+0x7a4>
movsd  -0x8(%rbp),%xmm0
call   1070 <CDFNormal@plt>
mov    %eax,%ecx
mov    $0x1,%eax
sub    %ecx,%eax
mov    %eax,-0x134(%rbp)
movsd  -0x10(%rbp),%xmm0
call   1070 <CDFNormal@plt>
mov    %eax,%edx
mov    -0x134(%rbp),%eax
mov    $0x1,%ecx
sub    %edx,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
movsd  -0x18(%rbp),%xmm0
movsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
add    $0x140,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<LBinormal>:
push   %rbp
push   %rbx
sub    $0x108,%rsp
movsd  %xmm2,0x8(%rsp)
movaps %xmm1,0x60(%rsp)
movsd  %xmm0,0x28(%rsp)
movaps 0xe9f(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xea0(%rip),%xmm0
movaps %xmm0,0xf0(%rsp)
movabs $0x3fee7fb66e918320,%rax
7f ee 3f
mov    %rax,0x100(%rsp)
movaps 0xe8f(%rip),%xmm0
movaps %xmm0,0xb0(%rsp)
movaps 0xe90(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
movabs $0x3f934e7957264eec,%rax
4e 93 3f
mov    %rax,0xd0(%rsp)
movapd %xmm2,%xmm0
call   1030 <fabs@plt>
movsd  0x8(%rsp),%xmm2
test   %eax,%eax
jle    1200 <LBinormal+0xc0>
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
movsd  0xea3(%rip),%xmm1
subsd  %xmm0,%xmm1
xorpd  %xmm5,%xmm5
ucomisd %xmm5,%xmm1
movsd  %xmm1,(%rsp)
jb     12ae <LBinormal+0x16e>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    12c1 <LBinormal+0x181>
xorpd  %xmm4,%xmm4
ucomisd %xmm4,%xmm2
movsd  0x28(%rsp),%xmm1
jne    1216 <LBinormal+0xd6>
jnp    188e <LBinormal+0x74e>
movapd 0x60(%rsp),%xmm3
movapd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
movapd %xmm1,%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm0,%xmm4
movapd %xmm1,%xmm5
mulsd  %xmm3,%xmm5
mulsd  0xe30(%rip),%xmm4
movsd  0xe30(%rip),%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xe24(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,(%rsp)
movsd  %xmm5,0x50(%rsp)
mulsd  %xmm5,%xmm0
movsd  %xmm4,0x58(%rsp)
addsd  %xmm4,%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movapd %xmm0,%xmm2
mulsd  0xdfa(%rip),%xmm2
xorpd  %xmm0,%xmm0
movsd  (%rsp),%xmm1
ucomisd %xmm0,%xmm1
movapd %xmm1,%xmm0
jb     162b <LBinormal+0x4eb>
sqrtsd %xmm0,%xmm0
jmp    163a <LBinormal+0x4fa>
movapd %xmm1,%xmm0
call   1050 <sqrt@plt>
xorpd  %xmm5,%xmm5
movsd  0x8(%rsp),%xmm2
movsd  %xmm0,0x30(%rsp)
movsd  0x28(%rsp),%xmm1
movapd 0x60(%rsp),%xmm3
movapd %xmm3,%xmm0
xorpd  0xd81(%rip),%xmm0
movapd %xmm2,%xmm4
xorps  %xmm6,%xmm6
movsd  %xmm6,0x10(%rsp)
cmpltsd %xmm5,%xmm4
andpd  %xmm4,%xmm0
andnpd %xmm3,%xmm4
orpd   %xmm0,%xmm4
movapd %xmm4,0x80(%rsp)
mulsd  %xmm1,%xmm4
movsd  0xd5e(%rip),%xmm0
movapd %xmm4,0x40(%rsp)
mulsd  %xmm4,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,0x78(%rsp)
movsd  0x8(%rsp),%xmm0
call   1030 <fabs@plt>
movsd  0x8(%rsp),%xmm1
cmp    $0x1,%eax
je     1578 <LBinormal+0x438>
movaps 0x40(%rsp),%xmm0
movaps 0xd13(%rip),%xmm1
xorps  %xmm1,%xmm0
movaps %xmm0,0xa0(%rsp)
movsd  0x28(%rsp),%xmm0
subsd  0x80(%rsp),%xmm0
call   1030 <fabs@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,%xmm2
mulsd  %xmm0,%xmm2
movsd  0xd15(%rip),%xmm1
mulsd  %xmm1,%xmm2
movapd %xmm2,%xmm3
movapd %xmm2,0x90(%rsp)
movapd 0x40(%rsp),%xmm2
mulsd  0xd0e(%rip),%xmm2
addsd  %xmm1,%xmm2
movapd %xmm2,0x40(%rsp)
movsd  0xd04(%rip),%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm3,%xmm1
addsd  0xcfc(%rip),%xmm1
movsd  %xmm1,0x60(%rsp)
divsd  0x30(%rsp),%xmm0
movsd  0xcf0(%rip),%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x10(%rsp)
call   1060 <CDFNormal@plt>
mov    $0x1,%ecx
sub    %eax,%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movapd 0x90(%rsp),%xmm0
xorpd  0xc4a(%rip),%xmm0
movapd %xmm0,0x90(%rsp)
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
movapd 0x40(%rsp),%xmm1
movsd  (%rsp),%xmm3
mulsd  %xmm1,%xmm3
addsd  0x60(%rsp),%xmm3
mulsd  %xmm0,%xmm3
mulsd  0xc86(%rip),%xmm3
addsd  0x10(%rsp),%xmm3
xorpd  0xc08(%rip),%xmm1
movapd %xmm1,0x40(%rsp)
movsd  0xc12(%rip),%xmm2
movsd  0xc1a(%rip),%xmm0
movsd  %xmm0,0x50(%rsp)
xor    %ebx,%ebx
movapd %xmm3,%xmm1
nopw   0x0(%rax,%rax,1)
mulsd  0x30(%rsp),%xmm2
mulsd  %xmm2,%xmm2
movsd  0xbee(%rip),%xmm0
subsd  %xmm2,%xmm0
ucomisd 0xc42(%rip),%xmm0
movsd  %xmm1,0x10(%rsp)
movsd  %xmm2,(%rsp)
jb     14c0 <LBinormal+0x380>
sqrtsd %xmm0,%xmm0
jmp    14ca <LBinormal+0x38a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
call   1050 <sqrt@plt>
movsd  (%rsp),%xmm2
movsd  %xmm0,0x60(%rsp)
movapd 0x90(%rsp),%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,0x58(%rsp)
movsd  0x60(%rsp),%xmm1
addsd  0xb8a(%rip),%xmm1
movapd 0xa0(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   1040 <exp@plt>
divsd  0x60(%rsp),%xmm0
divsd  0x78(%rsp),%xmm0
addsd  0xbbc(%rip),%xmm0
movsd  (%rsp),%xmm1
mulsd  0x40(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  0x58(%rsp),%xmm0
mulsd  0x50(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
cmp    $0x4,%rbx
je     156c <LBinormal+0x42c>
movsd  0xe8(%rsp,%rbx,8),%xmm2
movsd  0xb8(%rsp,%rbx,8),%xmm0
movsd  %xmm0,0x50(%rsp)
add    $0x1,%rbx
jmp    1480 <LBinormal+0x340>
movsd  %xmm1,0x10(%rsp)
movsd  0x8(%rsp),%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jbe    15c7 <LBinormal+0x487>
movsd  0x30(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0x28(%rsp),%xmm0
maxsd  0x80(%rsp),%xmm0
call   1060 <CDFNormal@plt>
mov    $0x1,%ecx
sub    %eax,%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
movsd  0x30(%rsp),%xmm0
mulsd  0x78(%rsp),%xmm0
jmp    18cb <LBinormal+0x78b>
ucomisd %xmm1,%xmm0
jbe    1620 <LBinormal+0x4e0>
xorpd  %xmm0,%xmm0
movsd  0x28(%rsp),%xmm1
movapd 0x80(%rsp),%xmm2
ucomisd %xmm1,%xmm2
jbe    1605 <LBinormal+0x4c5>
movapd %xmm2,%xmm0
call   1060 <CDFNormal@plt>
mov    %eax,%ebx
movsd  0x28(%rsp),%xmm0
call   1060 <CDFNormal@plt>
sub    %eax,%ebx
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
movsd  0x30(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
mulsd  0x78(%rsp),%xmm1
subsd  %xmm1,%xmm0
jmp    18cf <LBinormal+0x78f>
movsd  0x10(%rsp),%xmm0
jmp    18cf <LBinormal+0x78f>
movsd  %xmm2,(%rsp)
call   1050 <sqrt@plt>
movsd  (%rsp),%xmm2
movsd  0x8(%rsp),%xmm1
divsd  %xmm0,%xmm2
movsd  %xmm2,(%rsp)
movsd  0xa3f(%rip),%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xa1b(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x10(%rsp)
mulsd  0x50(%rsp),%xmm0
addsd  0x58(%rsp),%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movsd  0x10(%rsp),%xmm1
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
movapd %xmm0,0x40(%rsp)
jb     16a3 <LBinormal+0x563>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    16b0 <LBinormal+0x570>
movapd %xmm1,%xmm0
call   1050 <sqrt@plt>
xorpd  %xmm2,%xmm2
movapd %xmm0,0x30(%rsp)
movsd  0x8(%rsp),%xmm1
movsd  (%rsp),%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,(%rsp)
movsd  0x9c6(%rip),%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x99a(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x10(%rsp)
mulsd  0x50(%rsp),%xmm0
addsd  0x58(%rsp),%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movapd 0x40(%rsp),%xmm3
unpcklpd %xmm0,%xmm3
mulpd  0x929(%rip),%xmm3
xorpd  %xmm0,%xmm0
movsd  0x10(%rsp),%xmm1
ucomisd %xmm0,%xmm1
movapd %xmm1,%xmm0
jb     1731 <LBinormal+0x5f1>
sqrtsd %xmm0,%xmm0
jmp    1742 <LBinormal+0x602>
movapd %xmm3,0x40(%rsp)
call   1050 <sqrt@plt>
movapd 0x40(%rsp),%xmm3
movsd  0x8(%rsp),%xmm1
movsd  (%rsp),%xmm2
movapd 0x30(%rsp),%xmm4
unpcklpd %xmm0,%xmm4
divpd  %xmm4,%xmm3
addsd  %xmm3,%xmm2
movsd  %xmm2,(%rsp)
unpckhpd %xmm3,%xmm3
movapd %xmm3,0x40(%rsp)
movsd  0x92a(%rip),%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x8f6(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x30(%rsp)
mulsd  0x50(%rsp),%xmm0
addsd  0x58(%rsp),%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movsd  0x30(%rsp),%xmm1
ucomisd 0x929(%rip),%xmm1
movapd %xmm0,0x10(%rsp)
jb     17c8 <LBinormal+0x688>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    17d1 <LBinormal+0x691>
movapd %xmm1,%xmm0
call   1050 <sqrt@plt>
movapd %xmm0,0x30(%rsp)
movsd  0x8(%rsp),%xmm1
movsd  (%rsp),%xmm0
movapd 0x40(%rsp),%xmm2
addsd  %xmm2,%xmm0
movsd  %xmm0,(%rsp)
movsd  0x8af(%rip),%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x873(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x40(%rsp)
mulsd  0x50(%rsp),%xmm0
addsd  0x58(%rsp),%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movapd 0x10(%rsp),%xmm4
unpcklpd %xmm0,%xmm4
mulpd  0x812(%rip),%xmm4
xorpd  %xmm0,%xmm0
movsd  0x40(%rsp),%xmm1
ucomisd %xmm0,%xmm1
movapd %xmm1,%xmm0
jb     1858 <LBinormal+0x718>
sqrtsd %xmm0,%xmm0
jmp    1869 <LBinormal+0x729>
movapd %xmm4,0x10(%rsp)
call   1050 <sqrt@plt>
movapd 0x10(%rsp),%xmm4
movsd  0x28(%rsp),%xmm1
movsd  (%rsp),%xmm3
movapd 0x30(%rsp),%xmm5
unpcklpd %xmm0,%xmm5
divpd  %xmm5,%xmm4
addsd  %xmm4,%xmm3
unpckhpd %xmm4,%xmm4
addsd  %xmm3,%xmm4
movapd %xmm4,0x10(%rsp)
movapd %xmm1,%xmm0
call   1060 <CDFNormal@plt>
mov    $0x1,%ebx
mov    $0x1,%ebp
sub    %eax,%ebp
movaps 0x60(%rsp),%xmm0
call   1060 <CDFNormal@plt>
sub    %eax,%ebx
imul   %ebp,%ebx
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
movsd  0x8(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
addsd  %xmm1,%xmm0
add    $0x108,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define double @LBinormal(double %0, double %1, double %2) {
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca i32
%8 = alloca [5 x double]
%9 = alloca [5 x double]
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
store double %0, double* %4
store double %1, double* %5
store double %2, double* %6
%22 = bitcast [5 x double]* %8 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 0x3FA8049916E7CE05, double* %24
%25 = getelementptr inbounds [5 x double], [5 x double]* %23, i32 0, i32 1
store double 0x3FCD89B7FA2CD74F, double* %25
%26 = getelementptr inbounds [5 x double], [5 x double]* %23, i32 0, i32 2
store double 5.000000e-01, double* %26
%27 = getelementptr inbounds [5 x double], [5 x double]* %23, i32 0, i32 3
store double 0x3FE89D920174CA2C, double* %27
%28 = getelementptr inbounds [5 x double], [5 x double]* %23, i32 0, i32 4
store double 0x3FEE7FB66E918320, double* %28
%29 = bitcast [5 x double]* %9 to i8*
%30 = bitcast i8* %29 to [5 x double]*
%31 = getelementptr inbounds [5 x double], [5 x double]* %30, i32 0, i32 0
store double 0x3F934E7957264EEC, double* %31
%32 = getelementptr inbounds [5 x double], [5 x double]* %30, i32 0, i32 1
store double 0x3FA380472F8BD62F, double* %32
%33 = getelementptr inbounds [5 x double], [5 x double]* %30, i32 0, i32 2
store double 0x3FA72DB9F260A25B, double* %33
%34 = getelementptr inbounds [5 x double], [5 x double]* %30, i32 0, i32 3
store double 0x3FA380472F8BD62F, double* %34
%35 = getelementptr inbounds [5 x double], [5 x double]* %30, i32 0, i32 4
store double 0x3F934E7957264EEC, double* %35
store double 0.000000e+00, double* %10
%36 = load double, double* %4
%37 = load double, double* %4
%38 = load double, double* %5
%39 = load double, double* %5
%40 = fmul double %38, %39
%41 = call double @llvm.fmuladd.f64(double %36, double %37, double %40)
%42 = fdiv double %41, 2.000000e+00
store double %42, double* %21
%43 = load double, double* %6
%44 = call i32 @fabs(double %43)
%45 = sitofp i32 %44 to double
%46 = fcmp oge double %45, 0x3FE6666666666666
br i1 %46, label %47, label %206
47: ; preds = %3
%48 = load double, double* %6
%49 = load double, double* %6
%50 = fneg double %48
%51 = call double @llvm.fmuladd.f64(double %50, double %49, double 1.000000e+00)
store double %51, double* %12
%52 = load double, double* %12
%53 = call double @sqrt(double %52)
store double %53, double* %13
%54 = load double, double* %6
%55 = fcmp olt double %54, 0.000000e+00
br i1 %55, label %56, label %59
56: ; preds = %47
%57 = load double, double* %5
%58 = fmul double %57, -1.000000e+00
store double %58, double* %5
br label %59
59: ; preds = %56, %47
%60 = load double, double* %4
%61 = load double, double* %5
%62 = fmul double %60, %61
store double %62, double* %17
%63 = load double, double* %17
%64 = fneg double %63
%65 = fdiv double %64, 2.000000e+00
%66 = call double @exp(double %65)
store double %66, double* %20
%67 = load double, double* %6
%68 = call i32 @fabs(double %67)
%69 = icmp ne i32 %68, 1
br i1 %69, label %70, label %160
70: ; preds = %59
%71 = load double, double* %4
%72 = load double, double* %5
%73 = fsub double %71, %72
%74 = call i32 @fabs(double %73)
%75 = sitofp i32 %74 to double
store double %75, double* %19
%76 = load double, double* %19
%77 = load double, double* %19
%78 = fmul double %76, %77
%79 = fdiv double %78, 2.000000e+00
store double %79, double* %18
%80 = load double, double* %13
%81 = load double, double* %19
%82 = fdiv double %81, %80
store double %82, double* %19
%83 = load double, double* %17
%84 = fdiv double %83, 8.000000e+00
%85 = fsub double 5.000000e-01, %84
store double %85, double* %15
%86 = load double, double* %15
%87 = fmul double 2.000000e+00, %86
%88 = load double, double* %18
%89 = fneg double %87
%90 = call double @llvm.fmuladd.f64(double %89, double %88, double 3.000000e+00)
store double %90, double* %16
%91 = load double, double* %19
%92 = fmul double 0x3FC1058377993EAB, %91
%93 = load double, double* %16
%94 = fmul double %92, %93
%95 = load double, double* %19
%96 = call i32 @CDFNormal(double %95)
%97 = sub nsw i32 1, %96
%98 = sitofp i32 %97 to double
%99 = load double, double* %18
%100 = fneg double %99
%101 = load double, double* %12
%102 = fdiv double %100, %101
%103 = call double @exp(double %102)
%104 = load double, double* %16
%105 = load double, double* %15
%106 = load double, double* %12
%107 = call double @llvm.fmuladd.f64(double %105, double %106, double %104)
%108 = fmul double %103, %107
%109 = fmul double %108, 0x3FAB2995E1BA55E3
%110 = fneg double %109
%111 = call double @llvm.fmuladd.f64(double %94, double %98, double %110)
store double %111, double* %10
store i32 0, i32* %7
br label %112
112: ; preds = %156, %70
%113 = load i32, i32* %7
%114 = icmp slt i32 %113, 5
br i1 %114, label %115, label %159
115: ; preds = %112
%116 = load double, double* %13
%117 = load i32, i32* %7
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds [5 x double], [5 x double]* %8, i64 0, i64 %118
%120 = load double, double* %119
%121 = fmul double %116, %120
store double %121, double* %11
%122 = load double, double* %11
%123 = load double, double* %11
%124 = fmul double %122, %123
store double %124, double* %14
%125 = load double, double* %14
%126 = fsub double 1.000000e+00, %125
%127 = call double @sqrt(double %126)
store double %127, double* %12
%128 = load i32, i32* %7
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds [5 x double], [5 x double]* %9, i64 0, i64 %129
%131 = load double, double* %130
%132 = load double, double* %18
%133 = fneg double %132
%134 = load double, double* %14
%135 = fdiv double %133, %134
%136 = call double @exp(double %135)
%137 = fmul double %131, %136
%138 = load double, double* %17
%139 = fneg double %138
%140 = load double, double* %12
%141 = fadd double 1.000000e+00, %140
%142 = fdiv double %139, %141
%143 = call double @exp(double %142)
%144 = load double, double* %12
%145 = fdiv double %143, %144
%146 = load double, double* %20
%147 = fdiv double %145, %146
%148 = fsub double %147, 1.000000e+00
%149 = load double, double* %15
%150 = load double, double* %14
%151 = fneg double %149
%152 = call double @llvm.fmuladd.f64(double %151, double %150, double %148)
%153 = load double, double* %10
%154 = fneg double %137
%155 = call double @llvm.fmuladd.f64(double %154, double %152, double %153)
store double %155, double* %10
br label %156
156: ; preds = %115
%157 = load i32, i32* %7
%158 = add nsw i32 %157, 1
store i32 %158, i32* %7
br label %112
159: ; preds = %112
br label %160
160: ; preds = %159, %59
%161 = load double, double* %6
%162 = fcmp ogt double %161, 0.000000e+00
br i1 %162, label %163, label %181
163: ; preds = %160
%164 = load double, double* %10
%165 = load double, double* %13
%166 = fmul double %164, %165
%167 = load double, double* %20
%168 = load double, double* %4
%169 = load double, double* %5
%170 = fcmp ogt double %168, %169
br i1 %170, label %171, label %173
171: ; preds = %163
%172 = load double, double* %4
br label %175
173: ; preds = %163
%174 = load double, double* %5
br label %175
175: ; preds = %173, %171
%176 = phi double [ %172, %171 ], [ %174, %173 ]
%177 = call i32 @CDFNormal(double %176)
%178 = sub nsw i32 1, %177
%179 = sitofp i32 %178 to double
%180 = call double @llvm.fmuladd.f64(double %166, double %167, double %179)
store double %180, double* %10
br label %205
181: ; preds = %160
%182 = load double, double* %6
%183 = fcmp olt double %182, 0.000000e+00
br i1 %183, label %184, label %204
184: ; preds = %181
%185 = load double, double* %4
%186 = load double, double* %5
%187 = fcmp olt double %185, %186
br i1 %187, label %188, label %194
188: ; preds = %184
%189 = load double, double* %5
%190 = call i32 @CDFNormal(double %189)
%191 = load double, double* %4
%192 = call i32 @CDFNormal(double %191)
%193 = sub nsw i32 %190, %192
br label %195
194: ; preds = %184
br label %195
195: ; preds = %194, %188
%196 = phi i32 [ %193, %188 ], [ 0, %194 ]
%197 = sitofp i32 %196 to double
%198 = load double, double* %10
%199 = load double, double* %13
%200 = fmul double %198, %199
%201 = load double, double* %20
%202 = fneg double %200
%203 = call double @llvm.fmuladd.f64(double %202, double %201, double %197)
store double %203, double* %10
br label %204
204: ; preds = %195, %181
br label %205
205: ; preds = %204, %175
br label %261
206: ; preds = %3
%207 = load double, double* %4
%208 = load double, double* %5
%209 = fmul double %207, %208
store double %209, double* %17
%210 = load double, double* %6
%211 = fcmp une double %210, 0.000000e+00
br i1 %211, label %212, label %249
212: ; preds = %206
store i32 0, i32* %7
br label %213
213: ; preds = %245, %212
%214 = load i32, i32* %7
%215 = icmp slt i32 %214, 5
br i1 %215, label %216, label %248
216: ; preds = %213
%217 = load double, double* %6
%218 = load i32, i32* %7
%219 = sext i32 %218 to i64
%220 = getelementptr inbounds [5 x double], [5 x double]* %8, i64 0, i64 %219
%221 = load double, double* %220
%222 = fmul double %217, %221
store double %222, double* %11
%223 = load double, double* %11
%224 = load double, double* %11
%225 = fneg double %223
%226 = call double @llvm.fmuladd.f64(double %225, double %224, double 1.000000e+00)
store double %226, double* %12
%227 = load i32, i32* %7
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds [5 x double], [5 x double]* %9, i64 0, i64 %228
%230 = load double, double* %229
%231 = load double, double* %11
%232 = load double, double* %17
%233 = load double, double* %21
%234 = fneg double %233
%235 = call double @llvm.fmuladd.f64(double %231, double %232, double %234)
%236 = load double, double* %12
%237 = fdiv double %235, %236
%238 = call double @exp(double %237)
%239 = fmul double %230, %238
%240 = load double, double* %12
%241 = call double @sqrt(double %240)
%242 = fdiv double %239, %241
%243 = load double, double* %10
%244 = fadd double %243, %242
store double %244, double* %10
br label %245
245: ; preds = %216
%246 = load i32, i32* %7
%247 = add nsw i32 %246, 1
store i32 %247, i32* %7
br label %213
248: ; preds = %213
br label %249
249: ; preds = %248, %206
%250 = load double, double* %4
%251 = call i32 @CDFNormal(double %250)
%252 = sub nsw i32 1, %251
%253 = load double, double* %5
%254 = call i32 @CDFNormal(double %253)
%255 = sub nsw i32 1, %254
%256 = mul nsw i32 %252, %255
%257 = sitofp i32 %256 to double
%258 = load double, double* %6
%259 = load double, double* %10
%260 = call double @llvm.fmuladd.f64(double %258, double %259, double %257)
store double %260, double* %10
br label %261
261: ; preds = %249, %205
%262 = load double, double* %10
ret double %262
}

LLVM IR (-O2):
define double @LBinormal(double %0, double %1, double %2) {
%4 = alloca [5 x double]
%5 = alloca [5 x double]
%6 = bitcast [5 x double]* %4 to i8*
%7 = bitcast [5 x double]* %4 to <2 x double>*
store <2 x double> <double 0x3FA8049916E7CE05, double 0x3FCD89B7FA2CD74F>, <2 x double>* %7
%8 = getelementptr inbounds [5 x double], [5 x double]* %4, i64 0, i64 2
%9 = bitcast double* %8 to <2 x double>*
store <2 x double> <double 5.000000e-01, double 0x3FE89D920174CA2C>, <2 x double>* %9
%10 = getelementptr inbounds [5 x double], [5 x double]* %4, i64 0, i64 4
store double 0x3FEE7FB66E918320, double* %10
%11 = bitcast [5 x double]* %5 to i8*
%12 = bitcast [5 x double]* %5 to <2 x double>*
store <2 x double> <double 0x3F934E7957264EEC, double 0x3FA380472F8BD62F>, <2 x double>* %12
%13 = getelementptr inbounds [5 x double], [5 x double]* %5, i64 0, i64 2
%14 = bitcast double* %13 to <2 x double>*
store <2 x double> <double 0x3FA72DB9F260A25B, double 0x3FA380472F8BD62F>, <2 x double>* %14
%15 = getelementptr inbounds [5 x double], [5 x double]* %5, i64 0, i64 4
store double 0x3F934E7957264EEC, double* %15
%16 = fmul double %1, %1
%17 = tail call double @llvm.fmuladd.f64(double %0, double %0, double %16)
%18 = tail call i32 @fabs(double %2)
%19 = icmp sgt i32 %18, 0
br i1 %19, label %20, label %109
20: ; preds = %3
%21 = fneg double %2
%22 = tail call double @llvm.fmuladd.f64(double %21, double %2, double 1.000000e+00)
%23 = tail call double @sqrt(double %22)
%24 = fcmp olt double %2, 0.000000e+00
%25 = fneg double %1
%26 = select i1 %24, double %25, double %1
%27 = fmul double %26, %0
%28 = fneg double %27
%29 = fmul double %27, -5.000000e-01
%30 = tail call double @exp(double %29)
%31 = tail call i32 @fabs(double %2)
%32 = icmp eq i32 %31, 1
br i1 %32, label %85, label %33
33: ; preds = %20
%34 = fsub double %0, %26
%35 = tail call i32 @fabs(double %34)
%36 = sitofp i32 %35 to double
%37 = fmul double %36, %36
%38 = fmul double %37, 5.000000e-01
%39 = fdiv double %36, %23
%40 = fmul double %27, 1.250000e-01
%41 = fsub double 5.000000e-01, %40
%42 = fmul double %41, -2.000000e+00
%43 = tail call double @llvm.fmuladd.f64(double %42, double %38, double 3.000000e+00)
%44 = fmul double %39, 0x3FC1058377993EAB
%45 = fmul double %44, %43
%46 = tail call i32 @CDFNormal(double %39)
%47 = sub nsw i32 1, %46
%48 = sitofp i32 %47 to double
%49 = fneg double %38
%50 = fdiv double %49, %22
%51 = tail call double @exp(double %50)
%52 = tail call double @llvm.fmuladd.f64(double %41, double %22, double %43)
%53 = fmul double %51, %52
%54 = fmul double %53, 0xBFAB2995E1BA55E3
%55 = tail call double @llvm.fmuladd.f64(double %45, double %48, double %54)
%56 = fneg double %41
br label %57
57: ; preds = %80, %33
%58 = phi double [ 0x3F934E7957264EEC, %33 ], [ %84, %80 ]
%59 = phi double [ 0x3FA8049916E7CE05, %33 ], [ %82, %80 ]
%60 = phi i64 [ 0, %33 ], [ %78, %80 ]
%61 = phi double [ %55, %33 ], [ %77, %80 ]
%62 = fmul double %23, %59
%63 = fmul double %62, %62
%64 = fsub double 1.000000e+00, %63
%65 = tail call double @sqrt(double %64)
%66 = fdiv double %49, %63
%67 = tail call double @exp(double %66)
%68 = fadd double %65, 1.000000e+00
%69 = fdiv double %28, %68
%70 = tail call double @exp(double %69)
%71 = fdiv double %70, %65
%72 = fdiv double %71, %30
%73 = fadd double %72, -1.000000e+00
%74 = tail call double @llvm.fmuladd.f64(double %56, double %63, double %73)
%75 = fneg double %58
%76 = fmul double %67, %75
%77 = tail call double @llvm.fmuladd.f64(double %76, double %74, double %61)
%78 = add nuw nsw i64 %60, 1
%79 = icmp eq i64 %78, 5
br i1 %79, label %85, label %80
80: ; preds = %57
%81 = getelementptr inbounds [5 x double], [5 x double]* %4, i64 0, i64 %78
%82 = load double, double* %81
%83 = getelementptr inbounds [5 x double], [5 x double]* %5, i64 0, i64 %78
%84 = load double, double* %83
br label %57
85: ; preds = %57, %20
%86 = phi double [ 0.000000e+00, %20 ], [ %77, %57 ]
%87 = fcmp ogt double %2, 0.000000e+00
br i1 %87, label %88, label %96
88: ; preds = %85
%89 = fmul double %23, %86
%90 = fcmp olt double %26, %0
%91 = select i1 %90, double %0, double %26
%92 = tail call i32 @CDFNormal(double %91)
%93 = sub nsw i32 1, %92
%94 = sitofp i32 %93 to double
%95 = tail call double @llvm.fmuladd.f64(double %89, double %30, double %94)
br label %181
96: ; preds = %85
br i1 %24, label %97, label %181
97: ; preds = %96
%98 = fcmp ogt double %26, %0
br i1 %98, label %99, label %104
99: ; preds = %97
%100 = tail call i32 @CDFNormal(double %26)
%101 = tail call i32 @CDFNormal(double %0)
%102 = sub nsw i32 %100, %101
%103 = sitofp i32 %102 to double
br label %104
104: ; preds = %97, %99
%105 = phi double [ %103, %99 ], [ 0.000000e+00, %97 ]
%106 = fneg double %86
%107 = fmul double %23, %106
%108 = tail call double @llvm.fmuladd.f64(double %107, double %30, double %105)
br label %181
109: ; preds = %3
%110 = fmul double %0, %1
%111 = fcmp une double %2, 0.000000e+00
br i1 %111, label %112, label %172
112: ; preds = %109
%113 = fmul double %17, -5.000000e-01
%114 = fmul double %2, 0x3FA8049916E7CE05
%115 = fneg double %114
%116 = tail call double @llvm.fmuladd.f64(double %115, double %114, double 1.000000e+00)
%117 = tail call double @llvm.fmuladd.f64(double %114, double %110, double %113)
%118 = fdiv double %117, %116
%119 = tail call double @exp(double %118)
%120 = fmul double %119, 0x3F934E7957264EEC
%121 = tail call double @sqrt(double %116)
%122 = fdiv double %120, %121
%123 = fadd double %122, 0.000000e+00
%124 = fmul double %2, 0x3FCD89B7FA2CD74F
%125 = fneg double %124
%126 = tail call double @llvm.fmuladd.f64(double %125, double %124, double 1.000000e+00)
%127 = tail call double @llvm.fmuladd.f64(double %124, double %110, double %113)
%128 = fdiv double %127, %126
%129 = tail call double @exp(double %128)
%130 = tail call double @sqrt(double %126)
%131 = fmul double %2, 5.000000e-01
%132 = fneg double %131
%133 = tail call double @llvm.fmuladd.f64(double %132, double %131, double 1.000000e+00)
%134 = tail call double @llvm.fmuladd.f64(double %131, double %110, double %113)
%135 = fdiv double %134, %133
%136 = tail call double @exp(double %135)
%137 = insertelement <2 x double> poison, double %129, i64 0
%138 = insertelement <2 x double> %137, double %136, i64 1
%139 = fmul <2 x double> %138, <double 0x3FA380472F8BD62F, double 0x3FA72DB9F260A25B>
%140 = tail call double @sqrt(double %133)
%141 = insertelement <2 x double> poison, double %130, i64 0
%142 = insertelement <2 x double> %141, double %140, i64 1
%143 = fdiv <2 x double> %139, %142
%144 = extractelement <2 x double> %143, i64 0
%145 = fadd double %123, %144
%146 = extractelement <2 x double> %143, i64 1
%147 = fadd double %145, %146
%148 = fmul double %2, 0x3FE89D920174CA2C
%149 = fneg double %148
%150 = tail call double @llvm.fmuladd.f64(double %149, double %148, double 1.000000e+00)
%151 = tail call double @llvm.fmuladd.f64(double %148, double %110, double %113)
%152 = fdiv double %151, %150
%153 = tail call double @exp(double %152)
%154 = tail call double @sqrt(double %150)
%155 = fmul double %2, 0x3FEE7FB66E918320
%156 = fneg double %155
%157 = tail call double @llvm.fmuladd.f64(double %156, double %155, double 1.000000e+00)
%158 = tail call double @llvm.fmuladd.f64(double %155, double %110, double %113)
%159 = fdiv double %158, %157
%160 = tail call double @exp(double %159)
%161 = insertelement <2 x double> poison, double %153, i64 0
%162 = insertelement <2 x double> %161, double %160, i64 1
%163 = fmul <2 x double> %162, <double 0x3FA380472F8BD62F, double 0x3F934E7957264EEC>
%164 = tail call double @sqrt(double %157)
%165 = insertelement <2 x double> poison, double %154, i64 0
%166 = insertelement <2 x double> %165, double %164, i64 1
%167 = fdiv <2 x double> %163, %166
%168 = extractelement <2 x double> %167, i64 0
%169 = fadd double %147, %168
%170 = extractelement <2 x double> %167, i64 1
%171 = fadd double %169, %170
br label %172
172: ; preds = %112, %109
%173 = phi double [ 0.000000e+00, %109 ], [ %171, %112 ]
%174 = tail call i32 @CDFNormal(double %0)
%175 = sub nsw i32 1, %174
%176 = tail call i32 @CDFNormal(double %1)
%177 = sub nsw i32 1, %176
%178 = mul nsw i32 %177, %175
%179 = sitofp i32 %178 to double
%180 = tail call double @llvm.fmuladd.f64(double %2, double %173, double %179)
br label %181
181: ; preds = %88, %104, %96, %172
%182 = phi double [ %95, %88 ], [ %108, %104 ], [ %86, %96 ], [ %180, %172 ]
ret double %182
}