#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double exp(double);
double fabs(double);
double rq_pricing_cumul_norm_dist(double);
double sqrt(double);
double rq_pricing_cumul_bivar_norm_dist2(double a, double b, double r) {
  double ret = 0.0;
  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 h1 = a;
  double h2 = b;
  double h12 = (h1 * h1 + h2 * h2) / 2.0;
  int i;
  if (fabs(r) >= 0.7) {
    double r2 = 1.0 - r * r;
    double r3 = sqrt(r2);
    if (r < 0.0) {
      double h2 = -b;
      double h3 = h1 * h2;
      double h7 = exp(-h3 / 2.0);
      double LH = 0.0;
      if (fabs(r) < 1.0) {
        double h6 = fabs(h1 - h2);
        double h5 = h6 * h6 / 2.0;
        double AA = 0.5 - h3 / 8.0;
        double ab = 3.0 - 2.0 * AA * h5;
        h6 = h6 / r3;
        LH = 0.13298076 * h6 * ab * (1.0 - rq_pricing_cumul_norm_dist(h6)) -
             exp(-h5 / r2) * (ab + AA * r2) * 0.053051647;
        for (i = 0; i < 5; i++) {
          double r1 = r3 * x[i];
          double rr = r1 * r1;
          double r2 = sqrt(1 - rr);
          double h8 = h7 == 0.0 ? 0.0 : exp(-h3 / (1 + r2)) / r2 / h7;
          LH = LH - W[i] * exp(-h5 / rr) * (h8 - 1 - AA * rr);
        }
      }
      ret = LH * r3 * h7 + rq_pricing_cumul_norm_dist((h1 < h2) ? h1 : h2);
      if (r < 0.0) {
        ret = rq_pricing_cumul_norm_dist(h1) - ret;
      }
    }
  } else {
    double h3 = h1 * h2;
    double LH = 0.0;
    if (r != 0.0) {
      for (i = 0; i < 5; i++) {
        double r1 = r * x[i];
        double r2 = 1.0 - r1 * r1;
        LH = LH + W[i] * exp((r1 * h3 - h12) / r2) / sqrt(r2);
      }
    }
    ret = rq_pricing_cumul_norm_dist(h1) * rq_pricing_cumul_norm_dist(h2) +
          r * LH;
  }
  return ret;
}


x86 assembly (clang, -O0):
<rq_pricing_cumul_bivar_norm_dist2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x190,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
lea    -0x50(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1040 <memset@plt>
movsd  0xece(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xeb9(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xea4(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe8f(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe7a(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
lea    -0x80(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1040 <memset@plt>
movsd  0xe45(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xe40(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xe3b(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe26(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xe11(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
mulsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xdba(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movaps 0xe1a(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xd8e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     17c3 <rq_pricing_cumul_bivar_norm_dist2+0x683>
movsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xda7(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1060 <sqrt@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    17be <rq_pricing_cumul_bivar_norm_dist2+0x67e>
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xccd(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <exp@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x18(%rbp),%xmm1
movaps 0xd1d(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xce1(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1700 <rq_pricing_cumul_bivar_norm_dist2+0x5c0>
movsd  -0x88(%rbp),%xmm0
ff
subsd  -0xb8(%rbp),%xmm0
ff
movaps 0xcf0(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  0xc54(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  0xca0(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xc5c(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0xc18(%rip),%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc45(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
divsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xc11(%rip),%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
call   1030 <rq_pricing_cumul_norm_dist@plt>
movaps %xmm0,%xmm1
movsd  0xbd1(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
call   1050 <exp@plt>
movsd  -0x140(%rbp),%xmm2
ff
movaps %xmm0,%xmm1
movsd  -0x138(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm4
ff
movsd  -0xe8(%rbp),%xmm3
ff
movsd  -0xa8(%rbp),%xmm5
ff
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
movsd  0xb62(%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,-0xd0(%rbp)
ff
movl   $0x0,-0x9c(%rbp)
cmpl   $0x5,-0x9c(%rbp)
jge    16fb <rq_pricing_cumul_bivar_norm_dist2+0x5bb>
movsd  -0xb0(%rbp),%xmm0
ff
movslq -0x9c(%rbp),%rax
mulsd  -0x50(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  0xadb(%rip),%xmm0
subsd  -0x100(%rbp),%xmm0
ff
call   1060 <sqrt@plt>
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15b5 <rq_pricing_cumul_bivar_norm_dist2+0x475>
jp     15b5 <rq_pricing_cumul_bivar_norm_dist2+0x475>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
jmp    1605 <rq_pricing_cumul_bivar_norm_dist2+0x4c5>
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xa74(%rip),%xmm1
addsd  -0x108(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1050 <exp@plt>
divsd  -0x108(%rbp),%xmm0
ff
divsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x158(%rbp)
ff
movslq -0x9c(%rbp),%rax
movsd  -0x80(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x100(%rbp),%xmm0
ff
call   1050 <exp@plt>
movsd  -0x158(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x150(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
movsd  -0x110(%rbp),%xmm3
ff
movsd  0x9c3(%rip),%xmm2
subsd  %xmm2,%xmm3
movsd  -0xe8(%rbp),%xmm2
ff
movsd  -0x100(%rbp),%xmm4
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    152b <rq_pricing_cumul_bivar_norm_dist2+0x3eb>
jmp    1700 <rq_pricing_cumul_bivar_norm_dist2+0x5c0>
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0xb8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1757 <rq_pricing_cumul_bivar_norm_dist2+0x617>
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
jmp    1767 <rq_pricing_cumul_bivar_norm_dist2+0x627>
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  -0x160(%rbp),%xmm2
ff
movaps %xmm0,%xmm1
movsd  -0x168(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    17b9 <rq_pricing_cumul_bivar_norm_dist2+0x679>
movsd  -0x88(%rbp),%xmm0
ff
call   1030 <rq_pricing_cumul_norm_dist@plt>
subsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    17be <rq_pricing_cumul_bivar_norm_dist2+0x67e>
jmp    1983 <rq_pricing_cumul_bivar_norm_dist2+0x843>
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1803 <rq_pricing_cumul_bivar_norm_dist2+0x6c3>
jp     1803 <rq_pricing_cumul_bivar_norm_dist2+0x6c3>
jmp    193c <rq_pricing_cumul_bivar_norm_dist2+0x7fc>
movl   $0x0,-0x9c(%rbp)
cmpl   $0x5,-0x9c(%rbp)
jge    1937 <rq_pricing_cumul_bivar_norm_dist2+0x7f7>
movsd  -0x18(%rbp),%xmm0
movslq -0x9c(%rbp),%rax
mulsd  -0x50(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movsd  -0x128(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x7e9(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x120(%rbp),%xmm0
ff
movsd  %xmm0,-0x178(%rbp)
ff
movslq -0x9c(%rbp),%rax
movsd  -0x80(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movsd  -0x118(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x130(%rbp),%xmm0
ff
call   1050 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x188(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
call   1060 <sqrt@plt>
movsd  -0x180(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x178(%rbp),%xmm0
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    180d <rq_pricing_cumul_bivar_norm_dist2+0x6cd>
jmp    193c <rq_pricing_cumul_bivar_norm_dist2+0x7fc>
movsd  -0x88(%rbp),%xmm0
ff
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1030 <rq_pricing_cumul_norm_dist@plt>
movaps %xmm0,%xmm2
movsd  -0x190(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
mulsd  -0x120(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
add    $0x190,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rq_pricing_cumul_bivar_norm_dist2>:
push   %rbx
sub    $0x100,%rsp
movapd %xmm0,%xmm3
movaps 0xebd(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps 0xebe(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movabs $0x3fee7fb66e918320,%rax
7f ee 3f
mov    %rax,0xf0(%rsp)
movaps 0xead(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
movaps 0xeae(%rip),%xmm0
movaps %xmm0,0xb0(%rsp)
movabs $0x3f934e7957264eec,%rax
4e 93 3f
mov    %rax,0xc0(%rsp)
movapd 0xe9c(%rip),%xmm0
andpd  %xmm2,%xmm0
ucomisd 0xed0(%rip),%xmm0
movapd %xmm1,0x70(%rsp)
jae    1268 <rq_pricing_cumul_bivar_norm_dist2+0x138>
xorpd  %xmm4,%xmm4
ucomisd %xmm4,%xmm2
movapd %xmm2,0x30(%rsp)
jne    11d2 <rq_pricing_cumul_bivar_norm_dist2+0xa2>
jnp    17e8 <rq_pricing_cumul_bivar_norm_dist2+0x6b8>
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm3,%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm0,%xmm4
movsd  %xmm3,0x28(%rsp)
mulsd  %xmm1,%xmm3
mulsd  0xe98(%rip),%xmm4
movsd  0xec8(%rip),%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xe74(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%rsp)
movsd  %xmm3,0x20(%rsp)
mulsd  %xmm3,%xmm0
movsd  %xmm4,0x48(%rsp)
addsd  %xmm4,%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movapd %xmm0,%xmm1
mulsd  0xe91(%rip),%xmm1
xorpd  %xmm0,%xmm0
movsd  0x8(%rsp),%xmm2
ucomisd %xmm0,%xmm2
movapd %xmm2,%xmm0
jb     159d <rq_pricing_cumul_bivar_norm_dist2+0x46d>
sqrtsd %xmm0,%xmm0
jmp    15ae <rq_pricing_cumul_bivar_norm_dist2+0x47e>
movapd %xmm0,0x10(%rsp)
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
movsd  0xe0a(%rip),%xmm4
subsd  %xmm0,%xmm4
xorpd  %xmm5,%xmm5
ucomisd %xmm5,%xmm4
movsd  %xmm3,0x28(%rsp)
movsd  %xmm4,0x8(%rsp)
jb     12a1 <rq_pricing_cumul_bivar_norm_dist2+0x171>
xorps  %xmm0,%xmm0
sqrtsd %xmm4,%xmm0
jmp    12c6 <rq_pricing_cumul_bivar_norm_dist2+0x196>
movapd %xmm4,%xmm0
movapd %xmm2,0x30(%rsp)
call   1050 <sqrt@plt>
xorpd  %xmm5,%xmm5
movapd 0x30(%rsp),%xmm2
movapd 0x70(%rsp),%xmm1
movsd  0x28(%rsp),%xmm3
movsd  %xmm0,0x60(%rsp)
ucomisd %xmm2,%xmm5
jbe    1594 <rq_pricing_cumul_bivar_norm_dist2+0x464>
movapd %xmm1,%xmm0
xorpd  0xd6e(%rip),%xmm0
movapd %xmm0,0x80(%rsp)
movapd %xmm0,%xmm2
mulsd  %xmm3,%xmm2
movsd  0xd95(%rip),%xmm0
movapd %xmm2,0x50(%rsp)
mulsd  %xmm2,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,0x20(%rsp)
xorpd  %xmm2,%xmm2
movsd  0xd6c(%rip),%xmm0
ucomisd 0x10(%rsp),%xmm0
jbe    1549 <rq_pricing_cumul_bivar_norm_dist2+0x419>
movapd 0x50(%rsp),%xmm3
movapd %xmm3,%xmm0
movapd 0xd16(%rip),%xmm2
xorpd  %xmm2,%xmm0
movapd %xmm0,0x90(%rsp)
movapd 0x70(%rsp),%xmm2
addsd  0x28(%rsp),%xmm2
movapd 0xce5(%rip),%xmm0
andpd  %xmm2,%xmm0
mulsd  %xmm2,%xmm2
movsd  0xd2d(%rip),%xmm1
mulsd  %xmm1,%xmm2
movapd %xmm2,0x70(%rsp)
mulsd  0xd23(%rip),%xmm3
addsd  %xmm1,%xmm3
movapd %xmm3,0x50(%rsp)
movsd  0xd19(%rip),%xmm1
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm1
addsd  0xd11(%rip),%xmm1
movsd  %xmm1,0x30(%rsp)
divsd  0x60(%rsp),%xmm0
movsd  0xd05(%rip),%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x10(%rsp)
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  0xcba(%rip),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp)
movapd 0x70(%rsp),%xmm0
xorpd  0xc64(%rip),%xmm0
movapd %xmm0,0x70(%rsp)
divsd  0x8(%rsp),%xmm0
call   1040 <exp@plt>
movapd 0x50(%rsp),%xmm1
movsd  0x8(%rsp),%xmm2
mulsd  %xmm1,%xmm2
addsd  0x30(%rsp),%xmm2
mulsd  %xmm0,%xmm2
mulsd  0xca1(%rip),%xmm2
addsd  0x10(%rsp),%xmm2
xorpd  0xc23(%rip),%xmm1
movapd %xmm1,0x50(%rsp)
movsd  0xc8d(%rip),%xmm1
xor    %ebx,%ebx
nopl   (%rax)
mulsd  0x60(%rsp),%xmm1
mulsd  %xmm1,%xmm1
movsd  0xc36(%rip),%xmm0
subsd  %xmm1,%xmm0
ucomisd 0xc9a(%rip),%xmm0
movsd  %xmm2,0x30(%rsp)
movsd  %xmm1,0x8(%rsp)
jb     1480 <rq_pricing_cumul_bivar_norm_dist2+0x350>
xorps  %xmm3,%xmm3
sqrtsd %xmm0,%xmm3
jmp    1489 <rq_pricing_cumul_bivar_norm_dist2+0x359>
cs nopw 0x0(%rax,%rax,1)
nop
call   1050 <sqrt@plt>
movapd %xmm0,%xmm3
movapd 0x70(%rsp),%xmm1
xorpd  %xmm2,%xmm2
movsd  0x20(%rsp),%xmm0
ucomisd %xmm2,%xmm0
jne    14a1 <rq_pricing_cumul_bivar_norm_dist2+0x371>
jnp    14db <rq_pricing_cumul_bivar_norm_dist2+0x3ab>
movapd %xmm3,%xmm1
addsd  0xbdb(%rip),%xmm1
movapd 0x90(%rsp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm3,0x10(%rsp)
call   1040 <exp@plt>
movapd 0x70(%rsp),%xmm1
movapd %xmm0,%xmm2
divsd  0x10(%rsp),%xmm2
divsd  0x20(%rsp),%xmm2
movsd  %xmm2,0x48(%rsp)
movsd  0xa0(%rsp,%rbx,8),%xmm0
movsd  %xmm0,0x10(%rsp)
movapd %xmm1,%xmm0
divsd  0x8(%rsp),%xmm0
call   1040 <exp@plt>
movsd  0x48(%rsp),%xmm2
addsd  0xbc3(%rip),%xmm2
movsd  0x8(%rsp),%xmm1
mulsd  0x50(%rsp),%xmm1
addsd  %xmm2,%xmm1
mulsd  0x10(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x30(%rsp),%xmm2
subsd  %xmm0,%xmm2
cmp    $0x4,%rbx
je     1549 <rq_pricing_cumul_bivar_norm_dist2+0x419>
movsd  0xd8(%rsp,%rbx,8),%xmm1
add    $0x1,%rbx
jmp    1440 <rq_pricing_cumul_bivar_norm_dist2+0x310>
movsd  %xmm2,0x30(%rsp)
movsd  0x28(%rsp),%xmm0
minsd  0x80(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x28(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
movapd %xmm0,%xmm5
movsd  0x60(%rsp),%xmm0
mulsd  0x30(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
subsd  %xmm0,%xmm5
movapd %xmm5,%xmm0
jmp    181e <rq_pricing_cumul_bivar_norm_dist2+0x6ee>
movsd  %xmm1,0x8(%rsp)
call   1050 <sqrt@plt>
movsd  0x8(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0xb20(%rip),%xmm0
mulsd  0x30(%rsp),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xab2(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x10(%rsp)
mulsd  0x20(%rsp),%xmm0
addsd  0x48(%rsp),%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movapd %xmm0,0x60(%rsp)
movsd  0x10(%rsp),%xmm0
ucomisd 0xaef(%rip),%xmm0
jb     1611 <rq_pricing_cumul_bivar_norm_dist2+0x4e1>
sqrtsd %xmm0,%xmm0
jmp    1616 <rq_pricing_cumul_bivar_norm_dist2+0x4e6>
call   1050 <sqrt@plt>
movapd %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
addsd  0xace(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0xa60(%rip),%xmm0
mulsd  0x30(%rsp),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xa3a(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x50(%rsp)
mulsd  0x20(%rsp),%xmm0
addsd  0x48(%rsp),%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movapd 0x60(%rsp),%xmm1
unpcklpd %xmm0,%xmm1
mulpd  0x9e1(%rip),%xmm1
xorpd  %xmm0,%xmm0
movsd  0x50(%rsp),%xmm2
ucomisd %xmm0,%xmm2
movapd %xmm2,%xmm0
jb     1699 <rq_pricing_cumul_bivar_norm_dist2+0x569>
sqrtsd %xmm0,%xmm0
jmp    16aa <rq_pricing_cumul_bivar_norm_dist2+0x57a>
movapd %xmm1,0x60(%rsp)
call   1050 <sqrt@plt>
movapd 0x60(%rsp),%xmm1
movapd 0x10(%rsp),%xmm2
unpcklpd %xmm0,%xmm2
divpd  %xmm2,%xmm1
movsd  0x8(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rsp)
unpckhpd %xmm1,%xmm1
movapd %xmm1,0x60(%rsp)
movsd  0xa0e(%rip),%xmm0
mulsd  0x30(%rsp),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x998(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x50(%rsp)
mulsd  0x20(%rsp),%xmm0
addsd  0x48(%rsp),%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movapd %xmm0,0x10(%rsp)
movsd  0x50(%rsp),%xmm0
ucomisd 0x9d5(%rip),%xmm0
jb     172b <rq_pricing_cumul_bivar_norm_dist2+0x5fb>
sqrtsd %xmm0,%xmm0
jmp    1730 <rq_pricing_cumul_bivar_norm_dist2+0x600>
call   1050 <sqrt@plt>
movapd %xmm0,0x50(%rsp)
movsd  0x8(%rsp),%xmm0
addsd  0x60(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x9a0(%rip),%xmm0
mulsd  0x30(%rsp),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x922(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x60(%rsp)
mulsd  0x20(%rsp),%xmm0
addsd  0x48(%rsp),%xmm0
divsd  %xmm2,%xmm0
call   1040 <exp@plt>
movapd 0x10(%rsp),%xmm4
unpcklpd %xmm0,%xmm4
mulpd  0x8d9(%rip),%xmm4
xorpd  %xmm0,%xmm0
movsd  0x60(%rsp),%xmm1
ucomisd %xmm0,%xmm1
movapd %xmm1,%xmm0
jb     17b1 <rq_pricing_cumul_bivar_norm_dist2+0x681>
sqrtsd %xmm0,%xmm0
jmp    17c2 <rq_pricing_cumul_bivar_norm_dist2+0x692>
movapd %xmm4,0x10(%rsp)
call   1050 <sqrt@plt>
movapd 0x10(%rsp),%xmm4
movsd  0x28(%rsp),%xmm3
movapd 0x50(%rsp),%xmm2
unpcklpd %xmm0,%xmm2
divpd  %xmm2,%xmm4
movsd  0x8(%rsp),%xmm0
addsd  %xmm4,%xmm0
unpckhpd %xmm4,%xmm4
addsd  %xmm0,%xmm4
movapd %xmm4,0x10(%rsp)
movapd %xmm3,%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  %xmm0,0x8(%rsp)
movapd 0x70(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
movapd 0x10(%rsp),%xmm1
mulsd  0x30(%rsp),%xmm1
mulsd  0x8(%rsp),%xmm0
addsd  %xmm1,%xmm0
add    $0x100,%rsp
pop    %rbx
ret

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

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