#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);
int pow(double, int);
int rq_pricing_cumul_norm_dist(double);
double sqrt(double);
double rq_pricing_cumul_bivar_norm_dist(double a, double b, double rho) {
  double x[] = {0.24840615, 0.39233107, 0.21141819, 0.03324666, 0.00082485334};
  double y[] = {0.10024215, 0.48281397, 1.0609498, 1.7797294, 2.6697604};
  double rho1;
  double rho2;
  double delta;
  int i;
  int j;
  double r = 0;
  if (a <= 0 && b <= 0 && rho <= 0) {
    double rho_sqr = rho * rho;
    double two_x_1_minus_rho_sqr = 2.0 * (1.0 - rho_sqr);
    double sqrt_2_x_1_minus_rho_sqr;
    double a1;
    double b1;
    double sum = 0;
    sqrt_2_x_1_minus_rho_sqr = sqrt(two_x_1_minus_rho_sqr);
    a1 = a / sqrt_2_x_1_minus_rho_sqr;
    b1 = b / sqrt_2_x_1_minus_rho_sqr;
    for (i = 0; i < 5; i++) {
      for (j = 0; j < 5; j++) {
        sum = sum + x[i] * x[j] *
                        exp(a1 * (2 * y[i] - a1) + b1 * (2 * y[j] - b1) +
                            2 * rho * (y[i] - a1) * (y[j] - b1));
      }
    }
    r = sqrt(1 - pow(rho, 2)) / 3.141592653589793238462643 * sum;
  } else if (a <= 0 && b >= 0 && rho >= 0)
    r = rq_pricing_cumul_norm_dist(a) -
        rq_pricing_cumul_bivar_norm_dist(a, -b, -rho);
  else if (a >= 0 && b <= 0 && rho >= 0)
    r = rq_pricing_cumul_norm_dist(b) -
        rq_pricing_cumul_bivar_norm_dist(-a, b, -rho);
  else if (a >= 0 && b >= 0 && rho <= 0)
    r = rq_pricing_cumul_norm_dist(a) + rq_pricing_cumul_norm_dist(b) - 1 +
        rq_pricing_cumul_bivar_norm_dist(-a, -b, rho);
  else if (a * b * rho > 0) {
    double b_sqr = b * b;
    double a_sqr = a * a;
    double a_sqr_b_sqr = a_sqr - 2 * rho * a * b + b_sqr;
    rho1 = (rho * a - b) * ((a) >= 0.0 ? 1.0 : -1.0) / sqrt(a_sqr_b_sqr);
    rho2 = (rho * b - a) * ((b) >= 0.0 ? 1.0 : -1.0) / sqrt(a_sqr_b_sqr);
    delta = (1 - ((a) >= 0.0 ? 1.0 : -1.0) * ((b) >= 0.0 ? 1.0 : -1.0)) / 4;
    r = rq_pricing_cumul_bivar_norm_dist(a, 0, rho1) +
        rq_pricing_cumul_bivar_norm_dist(b, 0, rho2) - delta;
  }
  return r;
}


x86 assembly (clang, -O0):
<rq_pricing_cumul_bivar_norm_dist>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
lea    -0x40(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1050 <memset@plt>
movsd  0xeb6(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xea1(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe8c(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xe77(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe62(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
lea    -0x70(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1050 <memset@plt>
movsd  0xe3d(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe28(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xe13(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xdfe(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xde9(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jb     148f <rq_pricing_cumul_bivar_norm_dist+0x32f>
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     148f <rq_pricing_cumul_bivar_norm_dist+0x32f>
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jb     148f <rq_pricing_cumul_bivar_norm_dist+0x32f>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xded(%rip),%xmm1
subsd  -0xa0(%rbp),%xmm1
ff
movsd  0xded(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1080 <sqrt@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
divsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
divsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movl   $0x0,-0x8c(%rbp)
cmpl   $0x5,-0x8c(%rbp)
jge    144d <rq_pricing_cumul_bivar_norm_dist+0x2ed>
movl   $0x0,-0x90(%rbp)
cmpl   $0x5,-0x90(%rbp)
jge    1434 <rq_pricing_cumul_bivar_norm_dist+0x2d4>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movslq -0x8c(%rbp),%rax
movsd  -0x40(%rbp,%rax,8),%xmm0
movslq -0x90(%rbp),%rax
mulsd  -0x40(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movslq -0x8c(%rbp),%rax
movsd  -0x70(%rbp,%rax,8),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  %xmm2,%xmm2
addsd  %xmm0,%xmm2
movsd  -0xc0(%rbp),%xmm0
ff
movslq -0x90(%rbp),%rax
movsd  -0x70(%rbp,%rax,8),%xmm3
movsd  -0xc0(%rbp),%xmm4
ff
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
addsd  %xmm3,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xcab(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
movslq -0x8c(%rbp),%rax
movsd  -0x70(%rbp,%rax,8),%xmm2
subsd  -0xb8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
movslq -0x90(%rbp),%rax
movsd  -0x70(%rbp,%rax,8),%xmm2
subsd  -0xc0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1060 <exp@plt>
movsd  -0xf0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x90(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
jmp    12f2 <rq_pricing_cumul_bivar_norm_dist+0x192>
jmp    1439 <rq_pricing_cumul_bivar_norm_dist+0x2d9>
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    12db <rq_pricing_cumul_bivar_norm_dist+0x17b>
movsd  -0x18(%rbp),%xmm0
mov    $0x2,%edi
call   1070 <pow@plt>
mov    %eax,%ecx
mov    $0x1,%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
call   1080 <sqrt@plt>
movsd  0xbfa(%rip),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    192c <rq_pricing_cumul_bivar_norm_dist+0x7cc>
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jb     1535 <rq_pricing_cumul_bivar_norm_dist+0x3d5>
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1535 <rq_pricing_cumul_bivar_norm_dist+0x3d5>
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1535 <rq_pricing_cumul_bivar_norm_dist+0x3d5>
movsd  -0x8(%rbp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1927 <rq_pricing_cumul_bivar_norm_dist+0x7c7>
movsd  -0x8(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     15db <rq_pricing_cumul_bivar_norm_dist+0x47b>
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     15db <rq_pricing_cumul_bivar_norm_dist+0x47b>
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     15db <rq_pricing_cumul_bivar_norm_dist+0x47b>
movsd  -0x10(%rbp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x10(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movaps %xmm0,%xmm1
movsd  -0x100(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1922 <rq_pricing_cumul_bivar_norm_dist+0x7c2>
movsd  -0x8(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     169e <rq_pricing_cumul_bivar_norm_dist+0x53e>
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     169e <rq_pricing_cumul_bivar_norm_dist+0x53e>
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jb     169e <rq_pricing_cumul_bivar_norm_dist+0x53e>
movsd  -0x8(%rbp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
mov    %eax,-0x10c(%rbp)
movsd  -0x10(%rbp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
mov    %eax,%ecx
mov    -0x10c(%rbp),%eax
add    %ecx,%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm2
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movaps %xmm0,%xmm1
movsd  -0x108(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    191d <rq_pricing_cumul_bivar_norm_dist+0x7bd>
movsd  -0x8(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1918 <rq_pricing_cumul_bivar_norm_dist+0x7b8>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm1
ff
movsd  0x97a(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  0x8f1(%rip),%xmm4
movsd  0x8f1(%rip),%xmm3
xorps  %xmm1,%xmm1
cmplesd %xmm2,%xmm1
movaps %xmm1,%xmm2
andpd  %xmm4,%xmm2
andnpd %xmm3,%xmm1
orpd   %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
call   1080 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x86a(%rip),%xmm4
movsd  0x86a(%rip),%xmm3
xorps  %xmm1,%xmm1
cmplesd %xmm2,%xmm1
movaps %xmm1,%xmm2
andpd  %xmm4,%xmm2
andnpd %xmm3,%xmm1
orpd   %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
call   1080 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x120(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  0x811(%rip),%xmm3
movsd  0x811(%rip),%xmm2
xorps  %xmm0,%xmm0
cmplesd %xmm1,%xmm0
movaps %xmm0,%xmm1
andpd  %xmm3,%xmm1
andnpd %xmm2,%xmm0
orpd   %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x7e5(%rip),%xmm4
movsd  0x7e5(%rip),%xmm3
xorps  %xmm1,%xmm1
cmplesd %xmm2,%xmm1
movaps %xmm1,%xmm2
andpd  %xmm4,%xmm2
andnpd %xmm3,%xmm1
orpd   %xmm2,%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x7a3(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0x78f(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
xorps  %xmm1,%xmm1
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
xorps  %xmm1,%xmm1
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movaps %xmm0,%xmm1
movsd  -0x118(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    191d <rq_pricing_cumul_bivar_norm_dist+0x7bd>
jmp    1922 <rq_pricing_cumul_bivar_norm_dist+0x7c2>
jmp    1927 <rq_pricing_cumul_bivar_norm_dist+0x7c7>
jmp    192c <rq_pricing_cumul_bivar_norm_dist+0x7cc>
movsd  -0x98(%rbp),%xmm0
ff
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rq_pricing_cumul_bivar_norm_dist>:
push   %rbx
sub    $0x130,%rsp
movapd %xmm2,%xmm3
movapd %xmm0,%xmm4
movaps 0xe99(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
movaps 0xe9a(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movabs $0x3f4b075f0f451a79,%rax
07 4b 3f
mov    %rax,0x120(%rsp)
movaps 0xe89(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movapd 0xe89(%rip),%xmm0
movapd %xmm0,0xe0(%rsp)
movabs $0x40055bab57313f3d,%rax
5b 05 40
mov    %rax,0xf0(%rsp)
xorpd  %xmm0,%xmm0
ucomisd %xmm4,%xmm0
movapd %xmm2,0x40(%rsp)
jb     1209 <rq_pricing_cumul_bivar_norm_dist+0xb9>
ucomisd %xmm1,%xmm0
jb     1209 <rq_pricing_cumul_bivar_norm_dist+0xb9>
xorpd  %xmm5,%xmm5
ucomisd %xmm3,%xmm5
jb     1209 <rq_pricing_cumul_bivar_norm_dist+0xb9>
movapd %xmm3,%xmm2
mulsd  %xmm3,%xmm2
movsd  0xe76(%rip),%xmm0
subsd  %xmm2,%xmm0
addsd  %xmm0,%xmm0
ucomisd %xmm5,%xmm0
jb     1274 <rq_pricing_cumul_bivar_norm_dist+0x124>
sqrtsd %xmm0,%xmm0
jmp    1297 <rq_pricing_cumul_bivar_norm_dist+0x147>
ucomisd %xmm4,%xmm0
movapd %xmm4,0x50(%rsp)
movapd %xmm1,0x20(%rsp)
jb     15b3 <rq_pricing_cumul_bivar_norm_dist+0x463>
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jb     15b3 <rq_pricing_cumul_bivar_norm_dist+0x463>
ucomisd %xmm0,%xmm3
jb     15b3 <rq_pricing_cumul_bivar_norm_dist+0x463>
movapd %xmm4,%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x8(%rsp)
movapd 0xdfb(%rip),%xmm0
movapd 0x20(%rsp),%xmm1
xorpd  %xmm0,%xmm1
movapd 0x40(%rsp),%xmm2
xorpd  %xmm0,%xmm2
movapd 0x50(%rsp),%xmm0
jmp    1605 <rq_pricing_cumul_bivar_norm_dist+0x4b5>
movapd %xmm4,0x50(%rsp)
movapd %xmm1,0x20(%rsp)
call   1070 <sqrt@plt>
movapd 0x20(%rsp),%xmm1
movapd 0x50(%rsp),%xmm4
movapd 0x40(%rsp),%xmm3
divsd  %xmm0,%xmm4
divsd  %xmm0,%xmm1
movapd 0xda9(%rip),%xmm0
xorpd  %xmm4,%xmm0
movapd %xmm0,0xc0(%rsp)
addsd  %xmm3,%xmm3
movapd %xmm3,0xb0(%rsp)
movsd  0xdaf(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0xa8(%rsp)
movsd  0xd9e(%rip),%xmm2
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0xa0(%rsp)
movsd  0xd8d(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x98(%rsp)
movsd  0xd7c(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x90(%rsp)
movsd  0xd6f(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x88(%rsp)
movsd  0xd5e(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x80(%rsp)
movsd  0xd51(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x78(%rsp)
movsd  0xd43(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x70(%rsp)
movsd  0xd39(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x68(%rsp)
movsd  0xd2b(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x60(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0xd17(%rip),%xmm0
xor    %ebx,%ebx
movapd %xmm4,0x50(%rsp)
nopl   0x0(%rax)
movsd  %xmm0,0x20(%rsp)
movapd %xmm2,%xmm1
addsd  %xmm2,%xmm1
addsd  0xc0(%rsp),%xmm1
subsd  %xmm4,%xmm2
mulsd  0xb0(%rsp),%xmm2
movsd  %xmm2,0x18(%rsp)
mulsd  0xcd6(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
mulsd  %xmm4,%xmm1
movsd  %xmm1,0x30(%rsp)
addsd  0xa8(%rsp),%xmm1
movapd %xmm2,%xmm0
mulsd  0xa0(%rsp),%xmm0
addsd  %xmm1,%xmm0
call   1050 <exp@plt>
mulsd  0x10(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x20(%rsp),%xmm0
mulsd  0xc8f(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x30(%rsp),%xmm1
addsd  0x98(%rsp),%xmm1
movsd  0x18(%rsp),%xmm0
mulsd  0x90(%rsp),%xmm0
addsd  %xmm1,%xmm0
call   1050 <exp@plt>
mulsd  0x10(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x20(%rsp),%xmm0
mulsd  0xc4a(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x30(%rsp),%xmm1
addsd  0x88(%rsp),%xmm1
movsd  0x18(%rsp),%xmm0
mulsd  0x80(%rsp),%xmm0
addsd  %xmm1,%xmm0
call   1050 <exp@plt>
mulsd  0x10(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x20(%rsp),%xmm0
mulsd  0xc05(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x30(%rsp),%xmm1
addsd  0x78(%rsp),%xmm1
movsd  0x18(%rsp),%xmm0
mulsd  0x70(%rsp),%xmm0
addsd  %xmm1,%xmm0
call   1050 <exp@plt>
mulsd  0x10(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x20(%rsp),%xmm0
mulsd  0xbc6(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x30(%rsp),%xmm0
addsd  0x68(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  0x60(%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1050 <exp@plt>
mulsd  0x20(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
cmp    $0x4,%rbx
movsd  %xmm0,0x8(%rsp)
je     1586 <rq_pricing_cumul_bivar_norm_dist+0x436>
movsd  0x108(%rsp,%rbx,8),%xmm0
movsd  0xd8(%rsp,%rbx,8),%xmm2
add    $0x1,%rbx
movapd 0x50(%rsp),%xmm4
jmp    13c0 <rq_pricing_cumul_bivar_norm_dist+0x270>
movaps 0x40(%rsp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
mov    $0x1,%ecx
sub    %eax,%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1616 <rq_pricing_cumul_bivar_norm_dist+0x4c6>
sqrtsd %xmm0,%xmm0
jmp    161b <rq_pricing_cumul_bivar_norm_dist+0x4cb>
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm4
jb     163a <rq_pricing_cumul_bivar_norm_dist+0x4ea>
ucomisd %xmm1,%xmm0
jb     163a <rq_pricing_cumul_bivar_norm_dist+0x4ea>
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm3
jb     163a <rq_pricing_cumul_bivar_norm_dist+0x4ea>
movapd %xmm1,%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x8(%rsp)
movapd 0xa65(%rip),%xmm1
movapd 0x50(%rsp),%xmm0
xorpd  %xmm1,%xmm0
movapd 0x40(%rsp),%xmm2
xorpd  %xmm1,%xmm2
movapd 0x20(%rsp),%xmm1
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  0x8(%rsp),%xmm2
subsd  %xmm0,%xmm2
jmp    162d <rq_pricing_cumul_bivar_norm_dist+0x4dd>
call   1070 <sqrt@plt>
movsd  0x8(%rsp),%xmm2
divsd  0xac7(%rip),%xmm0
mulsd  %xmm0,%xmm2
movapd %xmm2,%xmm0
add    $0x130,%rsp
pop    %rbx
ret
ucomisd %xmm0,%xmm4
jb     16a6 <rq_pricing_cumul_bivar_norm_dist+0x556>
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jb     16a6 <rq_pricing_cumul_bivar_norm_dist+0x556>
ucomisd %xmm3,%xmm0
jb     16a6 <rq_pricing_cumul_bivar_norm_dist+0x556>
movapd %xmm4,%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
mov    %eax,%ebx
movaps 0x20(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
add    %ebx,%eax
add    $0xffffffff,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x30(%rsp)
movapd 0x9d1(%rip),%xmm2
movapd 0x50(%rsp),%xmm0
xorpd  %xmm2,%xmm0
movapd 0x20(%rsp),%xmm1
xorpd  %xmm2,%xmm1
movaps 0x40(%rsp),%xmm2
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movapd %xmm0,%xmm2
jmp    1826 <rq_pricing_cumul_bivar_norm_dist+0x6d6>
movapd %xmm4,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm3,%xmm0
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
jbe    162d <rq_pricing_cumul_bivar_norm_dist+0x4dd>
xorpd  %xmm5,%xmm5
xor    %eax,%eax
ucomisd %xmm5,%xmm4
setae  %al
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm4,%xmm2
mulsd  %xmm4,%xmm2
movsd  0x97b(%rip),%xmm6
mulsd  %xmm3,%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm2,%xmm6
addsd  %xmm0,%xmm6
movapd %xmm3,%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm1,%xmm2
lea    0x934(%rip),%rbx
movsd  (%rbx,%rax,8),%xmm0
movsd  %xmm0,0x18(%rsp)
mulsd  %xmm0,%xmm2
sqrtsd %xmm6,%xmm7
ucomisd %xmm5,%xmm6
movapd %xmm7,%xmm0
jae    176c <rq_pricing_cumul_bivar_norm_dist+0x61c>
movapd %xmm6,%xmm0
movapd %xmm2,0x30(%rsp)
movsd  %xmm6,0x8(%rsp)
movsd  %xmm7,0x10(%rsp)
call   1070 <sqrt@plt>
movsd  0x10(%rsp),%xmm7
movsd  0x8(%rsp),%xmm6
xorpd  %xmm5,%xmm5
movapd 0x30(%rsp),%xmm2
movapd 0x20(%rsp),%xmm1
movapd 0x50(%rsp),%xmm4
movapd 0x40(%rsp),%xmm3
xor    %eax,%eax
ucomisd %xmm5,%xmm1
divsd  %xmm0,%xmm2
setae  %al
mulsd  %xmm1,%xmm3
subsd  %xmm4,%xmm3
movsd  (%rbx,%rax,8),%xmm1
mulsd  %xmm1,%xmm3
ucomisd %xmm5,%xmm6
jae    17c7 <rq_pricing_cumul_bivar_norm_dist+0x677>
movapd %xmm6,%xmm0
movapd %xmm3,0x40(%rsp)
movapd %xmm2,0x30(%rsp)
movsd  %xmm1,0x8(%rsp)
call   1070 <sqrt@plt>
movsd  0x8(%rsp),%xmm1
movapd 0x30(%rsp),%xmm2
movapd 0x50(%rsp),%xmm4
movapd 0x40(%rsp),%xmm3
movapd %xmm0,%xmm7
divsd  %xmm7,%xmm3
movapd %xmm3,0x40(%rsp)
movsd  0x18(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x885(%rip),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x881(%rip),%xmm1
movsd  %xmm1,0x30(%rsp)
xorpd  %xmm1,%xmm1
movapd %xmm4,%xmm0
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  %xmm0,0x18(%rsp)
xorpd  %xmm1,%xmm1
movapd 0x20(%rsp),%xmm0
movaps 0x40(%rsp),%xmm2
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movapd %xmm0,%xmm2
addsd  0x18(%rsp),%xmm2
addsd  0x30(%rsp),%xmm2
jmp    162d <rq_pricing_cumul_bivar_norm_dist+0x4dd>

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

LLVM IR (-O2):
define double @rq_pricing_cumul_bivar_norm_dist(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 0x3FCFCBC5D13008DC, double 0x3FD91BF3C6B6B330>, <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 0x3FCB0FC051EA2D86, double 0x3FA105B4CACD6E32>, <2 x double>* %9
%10 = getelementptr inbounds [5 x double], [5 x double]* %4, i64 0, i64 4
store double 0x3F4B075F0F451A79, 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 0x3FB9A97833EE4416, double 0x3FDEE66C90CCEC57>, <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 0x3FF0F9A67F5B29F2, double 0x3FFC79C5890BACDC>, <2 x double>* %14
%15 = getelementptr inbounds [5 x double], [5 x double]* %5, i64 0, i64 4
store double 0x40055BAB57313F3D, double* %15
%16 = fcmp ole double %0, 0.000000e+00
%17 = fcmp ole double %1, 0.000000e+00
%18 = and i1 %16, %17
%19 = fcmp ole double %2, 0.000000e+00
%20 = and i1 %18, %19
br i1 %20, label %21, label %92
21: ; preds = %3
%22 = fmul double %2, %2
%23 = fsub double 1.000000e+00, %22
%24 = fmul double %23, 2.000000e+00
%25 = tail call double @sqrt(double %24)
%26 = fdiv double %0, %25
%27 = fdiv double %1, %25
%28 = fneg double %26
%29 = fmul double %2, 2.000000e+00
%30 = fsub double 0x3FC9A97833EE4416, %27
%31 = fmul double %27, %30
%32 = fsub double 0x3FB9A97833EE4416, %27
%33 = fsub double 0x3FEEE66C90CCEC57, %27
%34 = fmul double %27, %33
%35 = fsub double 0x3FDEE66C90CCEC57, %27
%36 = fsub double 0x4000F9A67F5B29F2, %27
%37 = fmul double %27, %36
%38 = fsub double 0x3FF0F9A67F5B29F2, %27
%39 = fsub double 0x400C79C5890BACDC, %27
%40 = fmul double %27, %39
%41 = fsub double 0x3FFC79C5890BACDC, %27
%42 = fsub double 0x40155BAB57313F3D, %27
%43 = fmul double %27, %42
%44 = fsub double 0x40055BAB57313F3D, %27
br label %45
45: ; preds = %80, %21
%46 = phi double [ 0x3FB9A97833EE4416, %21 ], [ %84, %80 ]
%47 = phi double [ 0x3FCFCBC5D13008DC, %21 ], [ %82, %80 ]
%48 = phi i64 [ 0, %21 ], [ %78, %80 ]
%49 = phi double [ 0.000000e+00, %21 ], [ %77, %80 ]
%50 = tail call double @llvm.fmuladd.f64(double %46, double 2.000000e+00, double %28)
%51 = fsub double %46, %26
%52 = fmul double %29, %51
%53 = fmul double %47, 0x3FCFCBC5D13008DC
%54 = tail call double @llvm.fmuladd.f64(double %26, double %50, double %31)
%55 = tail call double @llvm.fmuladd.f64(double %52, double %32, double %54)
%56 = tail call double @exp(double %55)
%57 = tail call double @llvm.fmuladd.f64(double %53, double %56, double %49)
%58 = fmul double %47, 0x3FD91BF3C6B6B330
%59 = tail call double @llvm.fmuladd.f64(double %26, double %50, double %34)
%60 = tail call double @llvm.fmuladd.f64(double %52, double %35, double %59)
%61 = tail call double @exp(double %60)
%62 = tail call double @llvm.fmuladd.f64(double %58, double %61, double %57)
%63 = fmul double %47, 0x3FCB0FC051EA2D86
%64 = tail call double @llvm.fmuladd.f64(double %26, double %50, double %37)
%65 = tail call double @llvm.fmuladd.f64(double %52, double %38, double %64)
%66 = tail call double @exp(double %65)
%67 = tail call double @llvm.fmuladd.f64(double %63, double %66, double %62)
%68 = fmul double %47, 0x3FA105B4CACD6E32
%69 = tail call double @llvm.fmuladd.f64(double %26, double %50, double %40)
%70 = tail call double @llvm.fmuladd.f64(double %52, double %41, double %69)
%71 = tail call double @exp(double %70)
%72 = tail call double @llvm.fmuladd.f64(double %68, double %71, double %67)
%73 = fmul double %47, 0x3F4B075F0F451A79
%74 = tail call double @llvm.fmuladd.f64(double %26, double %50, double %43)
%75 = tail call double @llvm.fmuladd.f64(double %52, double %44, double %74)
%76 = tail call double @exp(double %75)
%77 = tail call double @llvm.fmuladd.f64(double %73, double %76, double %72)
%78 = add nuw nsw i64 %48, 1
%79 = icmp eq i64 %78, 5
br i1 %79, label %85, label %80
80: ; preds = %45
%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 %45
85: ; preds = %45
%86 = tail call i32 @pow(double %2, i32 2)
%87 = sub nsw i32 1, %86
%88 = sitofp i32 %87 to double
%89 = tail call double @sqrt(double %88)
%90 = fdiv double %89, 0x400921FB54442D18
%91 = fmul double %77, %90
br label %158
92: ; preds = %3
%93 = fcmp oge double %1, 0.000000e+00
%94 = and i1 %16, %93
%95 = fcmp oge double %2, 0.000000e+00
%96 = and i1 %94, %95
br i1 %96, label %97, label %104
97: ; preds = %92
%98 = tail call i32 @rq_pricing_cumul_norm_dist(double %0)
%99 = sitofp i32 %98 to double
%100 = fneg double %1
%101 = fneg double %2
%102 = tail call double @rq_pricing_cumul_bivar_norm_dist(double %0, double %100, double %101)
%103 = fsub double %99, %102
br label %158
104: ; preds = %92
%105 = fcmp oge double %0, 0.000000e+00
%106 = and i1 %105, %17
%107 = and i1 %106, %95
br i1 %107, label %108, label %115
108: ; preds = %104
%109 = tail call i32 @rq_pricing_cumul_norm_dist(double %1)
%110 = sitofp i32 %109 to double
%111 = fneg double %0
%112 = fneg double %2
%113 = tail call double @rq_pricing_cumul_bivar_norm_dist(double %111, double %1, double %112)
%114 = fsub double %110, %113
br label %158
115: ; preds = %104
%116 = and i1 %105, %93
%117 = and i1 %116, %19
br i1 %117, label %118, label %128
118: ; preds = %115
%119 = tail call i32 @rq_pricing_cumul_norm_dist(double %0)
%120 = tail call i32 @rq_pricing_cumul_norm_dist(double %1)
%121 = add i32 %119, -1
%122 = add i32 %121, %120
%123 = sitofp i32 %122 to double
%124 = fneg double %0
%125 = fneg double %1
%126 = tail call double @rq_pricing_cumul_bivar_norm_dist(double %124, double %125, double %2)
%127 = fadd double %126, %123
br label %158
128: ; preds = %115
%129 = fmul double %0, %1
%130 = fmul double %129, %2
%131 = fcmp ogt double %130, 0.000000e+00
br i1 %131, label %132, label %158
132: ; preds = %128
%133 = fmul double %1, %1
%134 = fmul double %0, %0
%135 = fmul double %2, -2.000000e+00
%136 = fmul double %135, %0
%137 = tail call double @llvm.fmuladd.f64(double %136, double %1, double %134)
%138 = fadd double %133, %137
%139 = fneg double %1
%140 = tail call double @llvm.fmuladd.f64(double %2, double %0, double %139)
%141 = select i1 %105, double 1.000000e+00, double -1.000000e+00
%142 = fmul double %141, %140
%143 = tail call double @sqrt(double %138)
%144 = fdiv double %142, %143
%145 = fneg double %0
%146 = tail call double @llvm.fmuladd.f64(double %2, double %1, double %145)
%147 = select i1 %93, double 1.000000e+00, double -1.000000e+00
%148 = fmul double %146, %147
%149 = tail call double @sqrt(double %138)
%150 = fdiv double %148, %149
%151 = fneg double %141
%152 = tail call double @llvm.fmuladd.f64(double %151, double %147, double 1.000000e+00)
%153 = fmul double %152, 2.500000e-01
%154 = tail call double @rq_pricing_cumul_bivar_norm_dist(double %0, double 0.000000e+00, double %144)
%155 = tail call double @rq_pricing_cumul_bivar_norm_dist(double %1, double 0.000000e+00, double %150)
%156 = fadd double %154, %155
%157 = fsub double %156, %153
br label %158
158: ; preds = %97, %118, %132, %128, %108, %85
%159 = phi double [ %91, %85 ], [ %103, %97 ], [ %114, %108 ], [ %127, %118 ], [ %157, %132 ], [ 0.000000e+00, %128 ]
ret double %159
}