double Int1d(double t, int i, int j, int k, int l, double xi, double xj,
             double xk, double xl, double alphai, double alphaj, double alphak,
             double alphal, double G[][7]) {
  int n, m, a, b;
  double A, B, Px, Qx;
  n = i + j;
  m = k + l;
  A = alphai + alphaj;
  B = alphak + alphal;
  Px = (alphai * xi + alphaj * xj) / A;
  Qx = (alphak * xk + alphal * xl) / B;
  double xij = xi - xj;
  double xkl = xk - xl;
  double fff, B00, B1, B1p, C, Cp;
  double inv_t1 = 1.0 / (1 + t);
  fff = t / (A + B) * inv_t1;
  B00 = 0.5 * fff;
  B1 = 0.5 / A * inv_t1 + B00;
  B1p = 0.5 / B * inv_t1 + B00;
  C = (Px - xi) * inv_t1 + (B * (Qx - xi) + A * (Px - xi)) * fff;
  Cp = (Qx - xk) * inv_t1 + (B * (Qx - xk) + A * (Px - xk)) * fff;
  G[0][0] =
      3.14159265358979323846 *
      exp(-alphai * alphaj * xij * xij / A - alphak * alphal * xkl * xkl / B) /
      sqrt(A * B);
  if (n > 0)
    G[1][0] = C * G[0][0];
  if (m > 0)
    G[0][1] = Cp * G[0][0];
  for (a = 2; a < n + 1; a++)
    G[a][0] = B1 * (a - 1) * G[a - 2][0] + C * G[a - 1][0];
  for (b = 2; b < m + 1; b++)
    G[0][b] = B1p * (b - 1) * G[0][b - 2] + Cp * G[0][b - 1];
  if ((m > 0) && (n > 0)) {
    for (a = 1; a < n + 1; a++) {
      G[a][1] = a * B00 * G[a - 1][0] + Cp * G[a][0];
      for (b = 2; b < m + 1; b++)
        G[a][b] = B1p * (b - 1) * G[a][b - 2] + a * B00 * G[a - 1][b - 1] +
                  Cp * G[a][b - 1];
    }
  }
  double ijkl = 0.0;
  for (m = 0; m < l + 1; m++) {
    double ijm0 = 0.0;
    for (n = 0; n < j + 1; n++)
      ijm0 += binomial(j, n) * pow(xij, j - n) * G[n + i][m + k];
    ijkl += binomial(l, m) * pow(xkl, l - m) * ijm0;
  }
  return ijkl;
}


x86 assembly (clang, -O0):
<Int1d>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x8(%rbp)
mov    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
mov    %r8,-0x58(%rbp)
mov    -0xc(%rbp),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  0x10(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x10(%rbp),%xmm1
mulsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xddc(%rip),%xmm1
addsd  -0x8(%rbp),%xmm1
movsd  0xdcf(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xd90(%rip),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xd78(%rip),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xd4b(%rip),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm4
subsd  -0x20(%rbp),%xmm4
movsd  -0x70(%rbp),%xmm3
movsd  -0x80(%rbp),%xmm5
subsd  -0x20(%rbp),%xmm5
mulsd  %xmm5,%xmm3
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
mulsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
subsd  -0x30(%rbp),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm4
ff
subsd  -0x30(%rbp),%xmm4
movsd  -0x70(%rbp),%xmm3
movsd  -0x80(%rbp),%xmm5
subsd  -0x30(%rbp),%xmm5
mulsd  %xmm5,%xmm3
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
mulsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
divsd  -0x70(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  0x10(%rbp),%xmm1
mulsd  -0x98(%rbp),%xmm1
ff
mulsd  -0x98(%rbp),%xmm1
ff
divsd  -0x78(%rbp),%xmm1
subsd  %xmm1,%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  0xc04(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
call   1060 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xe8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,-0x5c(%rbp)
jle    1451 <Int1d+0x311>
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x58(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,0x38(%rax)
cmpl   $0x0,-0x60(%rbp)
jle    1474 <Int1d+0x334>
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x58(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movl   $0x2,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1503 <Int1d+0x3c3>
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x64(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
movsd  (%rax),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mov    -0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
mulsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movslq -0x64(%rbp),%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
movsd  %xmm0,(%rax)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    147b <Int1d+0x33b>
movl   $0x2,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    -0x60(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1580 <Int1d+0x440>
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x68(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
mov    -0x68(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mov    -0x58(%rbp),%rax
mov    -0x68(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    150a <Int1d+0x3ca>
cmpl   $0x0,-0x60(%rbp)
jle    16f5 <Int1d+0x5b5>
cmpl   $0x0,-0x5c(%rbp)
jle    16f5 <Int1d+0x5b5>
movl   $0x1,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    16f0 <Int1d+0x5b0>
cvtsi2sdl -0x64(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
mov    -0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
movsd  (%rax),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mov    -0x58(%rbp),%rax
movslq -0x64(%rbp),%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
mulsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movslq -0x64(%rbp),%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
movsd  %xmm0,0x8(%rax)
movl   $0x2,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    -0x60(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    16dd <Int1d+0x59d>
movsd  -0xb8(%rbp),%xmm1
ff
mov    -0x68(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
mulsd  %xmm0,%xmm1
mov    -0x58(%rbp),%rax
movslq -0x64(%rbp),%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
mov    -0x68(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
cvtsi2sdl -0x64(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
mov    -0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
mov    -0x68(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x58(%rbp),%rax
movslq -0x64(%rbp),%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
mov    -0x68(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movslq -0x64(%rbp),%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    160f <Int1d+0x4cf>
jmp    16e2 <Int1d+0x5a2>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    159b <Int1d+0x45b>
jmp    16f5 <Int1d+0x5b5>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    182f <Int1d+0x6ef>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movl   $0x0,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    17c2 <Int1d+0x682>
mov    -0x10(%rbp),%edi
mov    -0x5c(%rbp),%esi
mov    $0x0,%al
call   1030 <binomial@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%eax
sub    -0x5c(%rbp),%eax
cvtsi2sd %eax,%xmm1
call   1050 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    -0xc(%rbp),%ecx
movslq %ecx,%rcx
imul   $0x38,%rcx,%rcx
add    %rcx,%rax
mov    -0x60(%rbp),%ecx
add    -0x14(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    172a <Int1d+0x5ea>
mov    -0x18(%rbp),%edi
mov    -0x60(%rbp),%esi
mov    $0x0,%al
call   1030 <binomial@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x18(%rbp),%eax
sub    -0x60(%rbp),%eax
cvtsi2sd %eax,%xmm1
call   1050 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    1707 <Int1d+0x5c7>
movsd  -0xd8(%rbp),%xmm0
ff
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Int1d>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %r8,%r15
movapd %xmm5,%xmm8
mov    %ecx,%ebp
mov    %edx,%r12d
mov    %edi,%r13d
movsd  0xc0(%rsp),%xmm9
mov    %rsi,0x18(%rsp)
lea    (%rsi,%r13,1),%r14d
addsd  %xmm6,%xmm5
movapd %xmm5,%xmm13
movapd %xmm7,%xmm5
addsd  %xmm9,%xmm5
movapd %xmm5,%xmm14
movapd %xmm1,%xmm10
subsd  %xmm2,%xmm10
mulsd  %xmm6,%xmm2
movapd %xmm8,%xmm12
mulsd  %xmm1,%xmm12
addsd  %xmm2,%xmm12
divsd  %xmm13,%xmm12
movapd %xmm3,%xmm11
subsd  %xmm4,%xmm11
mulsd  %xmm9,%xmm4
movapd %xmm7,%xmm5
mulsd  %xmm3,%xmm5
addsd  %xmm4,%xmm5
divsd  %xmm14,%xmm5
movsd  0xe2a(%rip),%xmm15
movapd %xmm0,%xmm2
addsd  %xmm15,%xmm2
divsd  %xmm2,%xmm15
movapd %xmm13,%xmm2
addsd  %xmm14,%xmm2
divsd  %xmm2,%xmm0
mulsd  %xmm15,%xmm0
movapd %xmm12,%xmm2
subsd  %xmm1,%xmm2
movapd %xmm5,%xmm4
subsd  %xmm1,%xmm4
movapd %xmm13,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm14,%xmm4
addsd  %xmm1,%xmm4
movsd  %xmm0,0x10(%rsp)
mulsd  %xmm0,%xmm4
movsd  %xmm4,0x48(%rsp)
movsd  %xmm15,0x50(%rsp)
mulsd  %xmm15,%xmm2
movapd %xmm2,0x70(%rsp)
subsd  %xmm3,%xmm5
subsd  %xmm3,%xmm12
movapd %xmm13,0x20(%rsp)
mulsd  %xmm13,%xmm12
movsd  %xmm14,(%rsp)
movapd %xmm14,%xmm0
movsd  %xmm5,0x8(%rsp)
mulsd  %xmm5,%xmm0
addsd  %xmm12,%xmm0
movsd  %xmm0,0x40(%rsp)
xorpd  0xda6(%rip),%xmm8
mulsd  %xmm6,%xmm8
mulsd  %xmm10,%xmm8
movsd  %xmm10,0x68(%rsp)
mulsd  %xmm10,%xmm8
divsd  %xmm13,%xmm8
mulsd  %xmm9,%xmm7
mulsd  %xmm11,%xmm7
movsd  %xmm11,0x60(%rsp)
mulsd  %xmm11,%xmm7
divsd  %xmm14,%xmm7
subsd  %xmm7,%xmm8
movapd %xmm8,%xmm0
call   1040 <exp@plt>
movapd %xmm0,%xmm6
mulsd  0xd45(%rip),%xmm6
movapd 0x20(%rsp),%xmm0
mulsd  (%rsp),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     12e6 <Int1d+0x1a6>
sqrtsd %xmm0,%xmm0
jmp    12f7 <Int1d+0x1b7>
movsd  %xmm6,0x38(%rsp)
call   1060 <sqrt@plt>
movsd  0x38(%rsp),%xmm6
divsd  %xmm0,%xmm6
movsd  0xd05(%rip),%xmm1
movsd  0x10(%rsp),%xmm8
movsd  0x40(%rsp),%xmm2
mulsd  %xmm8,%xmm2
movsd  0x8(%rsp),%xmm7
movsd  0x50(%rsp),%xmm3
mulsd  %xmm3,%xmm7
lea    0x0(%rbp,%r12,1),%eax
movapd 0x70(%rsp),%xmm9
addsd  0x48(%rsp),%xmm9
movsd  %xmm6,(%r15)
test   %r14d,%r14d
jle    1351 <Int1d+0x211>
movapd %xmm9,%xmm0
mulsd  %xmm6,%xmm0
movsd  %xmm0,0x38(%r15)
movapd %xmm1,%xmm0
divsd  (%rsp),%xmm0
addsd  %xmm2,%xmm7
test   %eax,%eax
jle    1370 <Int1d+0x230>
movapd %xmm7,%xmm2
mulsd  %xmm6,%xmm2
movsd  %xmm2,0x8(%r15)
mulsd  %xmm1,%xmm8
mulsd  %xmm3,%xmm0
cmp    $0x2,%r14d
jl     146a <Int1d+0x32a>
divsd  0x20(%rsp),%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm8,%xmm1
lea    0x1(%r14),%r8d
movsd  0x38(%r15),%xmm4
mov    $0x2,%ecx
cmp    $0x3,%r8d
jne    13b4 <Int1d+0x274>
movapd %xmm4,%xmm3
movapd %xmm6,%xmm2
jmp    143e <Int1d+0x2fe>
lea    -0x2(%r8),%rsi
lea    0xa8(%r15),%rdi
and    $0xfffffffffffffffe,%rsi
neg    %rsi
mov    $0x2,%ecx
mov    $0x1,%ebx
movapd %xmm6,%xmm2
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xorps  %xmm3,%xmm3
cvtsi2sd %ebx,%xmm3
mulsd  %xmm1,%xmm3
mulsd  %xmm2,%xmm3
movapd %xmm9,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,-0x38(%rdi)
xorps  %xmm3,%xmm3
cvtsi2sd %ecx,%xmm3
mulsd  %xmm1,%xmm3
movapd %xmm9,%xmm5
mulsd  %xmm2,%xmm5
mulsd  %xmm4,%xmm3
addsd  %xmm5,%xmm3
movsd  %xmm3,(%rdi)
add    $0x70,%rdi
add    $0x2,%ebx
lea    (%rsi,%rcx,1),%rdx
add    $0x2,%rdx
add    $0x2,%rcx
movapd %xmm3,%xmm4
cmp    $0x2,%rdx
jne    13e0 <Int1d+0x2a0>
test   $0x1,%r8b
je     146a <Int1d+0x32a>
lea    -0x1(%rcx),%edx
xorps  %xmm4,%xmm4
cvtsi2sd %edx,%xmm4
mulsd  %xmm4,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm3,%xmm9
addsd  %xmm1,%xmm9
imul   $0x38,%rcx,%rcx
movsd  %xmm9,(%r15,%rcx,1)
addsd  %xmm8,%xmm0
cmp    $0x2,%eax
jl     1531 <Int1d+0x3f1>
lea    0x1(%rax),%edx
movsd  0x8(%r15),%xmm3
mov    $0x2,%ecx
cmp    $0x3,%edx
jne    1495 <Int1d+0x355>
movapd %xmm3,%xmm2
movapd %xmm6,%xmm1
jmp    150c <Int1d+0x3cc>
lea    -0x2(%rdx),%rsi
and    $0xfffffffffffffffe,%rsi
neg    %rsi
mov    $0x2,%ecx
mov    $0x1,%edi
movapd %xmm6,%xmm1
xchg   %ax,%ax
xorps  %xmm2,%xmm2
cvtsi2sd %edi,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm7,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,(%r15,%rcx,8)
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm7,%xmm4
mulsd  %xmm1,%xmm4
mulsd  %xmm3,%xmm2
addsd  %xmm4,%xmm2
movsd  %xmm2,0x8(%r15,%rcx,8)
add    $0x2,%edi
lea    (%rsi,%rcx,1),%rbx
add    $0x2,%rbx
add    $0x2,%rcx
movapd %xmm2,%xmm3
cmp    $0x2,%rbx
jne    14b0 <Int1d+0x370>
test   $0x1,%dl
je     1531 <Int1d+0x3f1>
lea    -0x1(%rcx),%edx
xorps  %xmm3,%xmm3
cvtsi2sd %edx,%xmm3
mulsd  %xmm0,%xmm3
mulsd  %xmm1,%xmm3
mulsd  %xmm7,%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,(%r15,%rcx,8)
test   %eax,%eax
jle    15f3 <Int1d+0x4b3>
test   %r14d,%r14d
jle    15f3 <Int1d+0x4b3>
add    $0x1,%r14d
mov    %eax,%ecx
lea    0x48(%r15),%rdx
add    $0xffffffffffffffff,%rcx
mov    $0x1,%esi
jmp    1571 <Int1d+0x431>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rsi
add    $0x38,%rdx
cmp    %r14,%rsi
je     15f3 <Int1d+0x4b3>
movapd %xmm6,%xmm2
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
imul   $0x38,%rsi,%rdi
mulsd  %xmm8,%xmm1
movsd  (%r15,%rdi,1),%xmm6
movapd %xmm7,%xmm3
mulsd  %xmm6,%xmm3
mulsd  %xmm1,%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,0x8(%r15,%rdi,1)
cmp    $0x2,%eax
jl     1560 <Int1d+0x420>
xor    %edi,%edi
movapd %xmm6,%xmm3
nopl   (%rax)
lea    0x1(%rdi),%rbx
xorps  %xmm4,%xmm4
cvtsi2sd %ebx,%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm3,%xmm4
movapd %xmm2,%xmm3
movsd  -0x40(%rdx,%rdi,8),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movapd %xmm7,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm5,%xmm2
movsd  %xmm2,(%rdx,%rdi,8)
mov    %rbx,%rdi
cmp    %rbx,%rcx
jne    15b0 <Int1d+0x470>
jmp    1560 <Int1d+0x420>
test   %ebp,%ebp
js     1727 <Int1d+0x5e7>
movslq %r13d,%rax
mov    0x18(%rsp),%rdx
lea    0x1(%rdx),%ebx
movslq %r12d,%rcx
lea    0x1(%rbp),%esi
mov    %rsi,0x8(%rsp)
imul   $0x38,%rax,%rax
add    %rax,%r15
lea    (%r15,%rcx,8),%r13
xorpd  %xmm0,%xmm0
xor    %r15d,%r15d
mov    %rbp,0x58(%rsp)
jmp    169b <Int1d+0x55b>
nopw   0x0(%rax,%rax,1)
movsd  %xmm0,(%rsp)
mov    0x58(%rsp),%rbp
mov    %ebp,%edi
mov    %r15d,%esi
xor    %eax,%eax
call   1030 <binomial@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x20(%rsp)
mov    %ebp,%eax
sub    %r15d,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0x60(%rsp),%xmm0
call   1050 <pow@plt>
mov    0x18(%rsp),%rdx
mulsd  0x20(%rsp),%xmm0
mulsd  (%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
add    $0x1,%r15
add    $0x8,%r13
cmp    0x8(%rsp),%r15
je     172b <Int1d+0x5eb>
movsd  %xmm0,0x10(%rsp)
xorpd  %xmm0,%xmm0
test   %edx,%edx
js     1630 <Int1d+0x4f0>
xorpd  %xmm0,%xmm0
mov    %r13,%r14
mov    %edx,%r12d
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
movsd  %xmm0,(%rsp)
mov    0x18(%rsp),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1030 <binomial@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x20(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r12d,%xmm1
movsd  0x68(%rsp),%xmm0
call   1050 <pow@plt>
mulsd  0x20(%rsp),%xmm0
mulsd  (%r14),%xmm0
movsd  (%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movsd  (%rsp),%xmm0
add    $0x1,%rbp
add    $0xffffffff,%r12d
add    $0x38,%r14
cmp    %rbp,%rbx
jne    16c0 <Int1d+0x580>
jmp    1630 <Int1d+0x4f0>
xorpd  %xmm0,%xmm0
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define double @Int1d(double %0, i32 %1, i32 %2, i32 %3, i32 %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12, [7 x double]* %13) {
%15 = alloca double
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%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 [7 x double]*
%29 = alloca i32
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
%46 = alloca double
%47 = alloca double
store double %0, double* %15
store i32 %1, i32* %16
store i32 %2, i32* %17
store i32 %3, i32* %18
store i32 %4, i32* %19
store double %5, double* %20
store double %6, double* %21
store double %7, double* %22
store double %8, double* %23
store double %9, double* %24
store double %10, double* %25
store double %11, double* %26
store double %12, double* %27
store [7 x double]* %13, [7 x double]** %28
%48 = load i32, i32* %16
%49 = load i32, i32* %17
%50 = add nsw i32 %48, %49
store i32 %50, i32* %29
%51 = load i32, i32* %18
%52 = load i32, i32* %19
%53 = add nsw i32 %51, %52
store i32 %53, i32* %30
%54 = load double, double* %24
%55 = load double, double* %25
%56 = fadd double %54, %55
store double %56, double* %33
%57 = load double, double* %26
%58 = load double, double* %27
%59 = fadd double %57, %58
store double %59, double* %34
%60 = load double, double* %24
%61 = load double, double* %20
%62 = load double, double* %25
%63 = load double, double* %21
%64 = fmul double %62, %63
%65 = call double @llvm.fmuladd.f64(double %60, double %61, double %64)
%66 = load double, double* %33
%67 = fdiv double %65, %66
store double %67, double* %35
%68 = load double, double* %26
%69 = load double, double* %22
%70 = load double, double* %27
%71 = load double, double* %23
%72 = fmul double %70, %71
%73 = call double @llvm.fmuladd.f64(double %68, double %69, double %72)
%74 = load double, double* %34
%75 = fdiv double %73, %74
store double %75, double* %36
%76 = load double, double* %20
%77 = load double, double* %21
%78 = fsub double %76, %77
store double %78, double* %37
%79 = load double, double* %22
%80 = load double, double* %23
%81 = fsub double %79, %80
store double %81, double* %38
%82 = load double, double* %15
%83 = fadd double 1.000000e+00, %82
%84 = fdiv double 1.000000e+00, %83
store double %84, double* %45
%85 = load double, double* %15
%86 = load double, double* %33
%87 = load double, double* %34
%88 = fadd double %86, %87
%89 = fdiv double %85, %88
%90 = load double, double* %45
%91 = fmul double %89, %90
store double %91, double* %39
%92 = load double, double* %39
%93 = fmul double 5.000000e-01, %92
store double %93, double* %40
%94 = load double, double* %33
%95 = fdiv double 5.000000e-01, %94
%96 = load double, double* %45
%97 = load double, double* %40
%98 = call double @llvm.fmuladd.f64(double %95, double %96, double %97)
store double %98, double* %41
%99 = load double, double* %34
%100 = fdiv double 5.000000e-01, %99
%101 = load double, double* %45
%102 = load double, double* %40
%103 = call double @llvm.fmuladd.f64(double %100, double %101, double %102)
store double %103, double* %42
%104 = load double, double* %35
%105 = load double, double* %20
%106 = fsub double %104, %105
%107 = load double, double* %45
%108 = load double, double* %34
%109 = load double, double* %36
%110 = load double, double* %20
%111 = fsub double %109, %110
%112 = load double, double* %33
%113 = load double, double* %35
%114 = load double, double* %20
%115 = fsub double %113, %114
%116 = fmul double %112, %115
%117 = call double @llvm.fmuladd.f64(double %108, double %111, double %116)
%118 = load double, double* %39
%119 = fmul double %117, %118
%120 = call double @llvm.fmuladd.f64(double %106, double %107, double %119)
store double %120, double* %43
%121 = load double, double* %36
%122 = load double, double* %22
%123 = fsub double %121, %122
%124 = load double, double* %45
%125 = load double, double* %34
%126 = load double, double* %36
%127 = load double, double* %22
%128 = fsub double %126, %127
%129 = load double, double* %33
%130 = load double, double* %35
%131 = load double, double* %22
%132 = fsub double %130, %131
%133 = fmul double %129, %132
%134 = call double @llvm.fmuladd.f64(double %125, double %128, double %133)
%135 = load double, double* %39
%136 = fmul double %134, %135
%137 = call double @llvm.fmuladd.f64(double %123, double %124, double %136)
store double %137, double* %44
%138 = load double, double* %24
%139 = fneg double %138
%140 = load double, double* %25
%141 = fmul double %139, %140
%142 = load double, double* %37
%143 = fmul double %141, %142
%144 = load double, double* %37
%145 = fmul double %143, %144
%146 = load double, double* %33
%147 = fdiv double %145, %146
%148 = load double, double* %26
%149 = load double, double* %27
%150 = fmul double %148, %149
%151 = load double, double* %38
%152 = fmul double %150, %151
%153 = load double, double* %38
%154 = fmul double %152, %153
%155 = load double, double* %34
%156 = fdiv double %154, %155
%157 = fsub double %147, %156
%158 = call double @exp(double %157)
%159 = fmul double 0x400921FB54442D18, %158
%160 = load double, double* %33
%161 = load double, double* %34
%162 = fmul double %160, %161
%163 = call double @sqrt(double %162)
%164 = fdiv double %159, %163
%165 = load [7 x double]*, [7 x double]** %28
%166 = getelementptr inbounds [7 x double], [7 x double]* %165, i64 0
%167 = getelementptr inbounds [7 x double], [7 x double]* %166, i64 0, i64 0
store double %164, double* %167
%168 = load i32, i32* %29
%169 = icmp sgt i32 %168, 0
br i1 %169, label %170, label %180
170: ; preds = %14
%171 = load double, double* %43
%172 = load [7 x double]*, [7 x double]** %28
%173 = getelementptr inbounds [7 x double], [7 x double]* %172, i64 0
%174 = getelementptr inbounds [7 x double], [7 x double]* %173, i64 0, i64 0
%175 = load double, double* %174
%176 = fmul double %171, %175
%177 = load [7 x double]*, [7 x double]** %28
%178 = getelementptr inbounds [7 x double], [7 x double]* %177, i64 1
%179 = getelementptr inbounds [7 x double], [7 x double]* %178, i64 0, i64 0
store double %176, double* %179
br label %180
180: ; preds = %170, %14
%181 = load i32, i32* %30
%182 = icmp sgt i32 %181, 0
br i1 %182, label %183, label %193
183: ; preds = %180
%184 = load double, double* %44
%185 = load [7 x double]*, [7 x double]** %28
%186 = getelementptr inbounds [7 x double], [7 x double]* %185, i64 0
%187 = getelementptr inbounds [7 x double], [7 x double]* %186, i64 0, i64 0
%188 = load double, double* %187
%189 = fmul double %184, %188
%190 = load [7 x double]*, [7 x double]** %28
%191 = getelementptr inbounds [7 x double], [7 x double]* %190, i64 0
%192 = getelementptr inbounds [7 x double], [7 x double]* %191, i64 0, i64 1
store double %189, double* %192
br label %193
193: ; preds = %183, %180
store i32 2, i32* %31
br label %194
194: ; preds = %227, %193
%195 = load i32, i32* %31
%196 = load i32, i32* %29
%197 = add nsw i32 %196, 1
%198 = icmp slt i32 %195, %197
br i1 %198, label %199, label %230
199: ; preds = %194
%200 = load double, double* %41
%201 = load i32, i32* %31
%202 = sub nsw i32 %201, 1
%203 = sitofp i32 %202 to double
%204 = fmul double %200, %203
%205 = load [7 x double]*, [7 x double]** %28
%206 = load i32, i32* %31
%207 = sub nsw i32 %206, 2
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds [7 x double], [7 x double]* %205, i64 %208
%210 = getelementptr inbounds [7 x double], [7 x double]* %209, i64 0, i64 0
%211 = load double, double* %210
%212 = load double, double* %43
%213 = load [7 x double]*, [7 x double]** %28
%214 = load i32, i32* %31
%215 = sub nsw i32 %214, 1
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds [7 x double], [7 x double]* %213, i64 %216
%218 = getelementptr inbounds [7 x double], [7 x double]* %217, i64 0, i64 0
%219 = load double, double* %218
%220 = fmul double %212, %219
%221 = call double @llvm.fmuladd.f64(double %204, double %211, double %220)
%222 = load [7 x double]*, [7 x double]** %28
%223 = load i32, i32* %31
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds [7 x double], [7 x double]* %222, i64 %224
%226 = getelementptr inbounds [7 x double], [7 x double]* %225, i64 0, i64 0
store double %221, double* %226
br label %227
227: ; preds = %199
%228 = load i32, i32* %31
%229 = add nsw i32 %228, 1
store i32 %229, i32* %31
br label %194
230: ; preds = %194
store i32 2, i32* %32
br label %231
231: ; preds = %264, %230
%232 = load i32, i32* %32
%233 = load i32, i32* %30
%234 = add nsw i32 %233, 1
%235 = icmp slt i32 %232, %234
br i1 %235, label %236, label %267
236: ; preds = %231
%237 = load double, double* %42
%238 = load i32, i32* %32
%239 = sub nsw i32 %238, 1
%240 = sitofp i32 %239 to double
%241 = fmul double %237, %240
%242 = load [7 x double]*, [7 x double]** %28
%243 = getelementptr inbounds [7 x double], [7 x double]* %242, i64 0
%244 = load i32, i32* %32
%245 = sub nsw i32 %244, 2
%246 = sext i32 %245 to i64
%247 = getelementptr inbounds [7 x double], [7 x double]* %243, i64 0, i64 %246
%248 = load double, double* %247
%249 = load double, double* %44
%250 = load [7 x double]*, [7 x double]** %28
%251 = getelementptr inbounds [7 x double], [7 x double]* %250, i64 0
%252 = load i32, i32* %32
%253 = sub nsw i32 %252, 1
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds [7 x double], [7 x double]* %251, i64 0, i64 %254
%256 = load double, double* %255
%257 = fmul double %249, %256
%258 = call double @llvm.fmuladd.f64(double %241, double %248, double %257)
%259 = load [7 x double]*, [7 x double]** %28
%260 = getelementptr inbounds [7 x double], [7 x double]* %259, i64 0
%261 = load i32, i32* %32
%262 = sext i32 %261 to i64
%263 = getelementptr inbounds [7 x double], [7 x double]* %260, i64 0, i64 %262
store double %258, double* %263
br label %264
264: ; preds = %236
%265 = load i32, i32* %32
%266 = add nsw i32 %265, 1
store i32 %266, i32* %32
br label %231
267: ; preds = %231
%268 = load i32, i32* %30
%269 = icmp sgt i32 %268, 0
br i1 %269, label %270, label %367
270: ; preds = %267
%271 = load i32, i32* %29
%272 = icmp sgt i32 %271, 0
br i1 %272, label %273, label %367
273: ; preds = %270
store i32 1, i32* %31
br label %274
274: ; preds = %363, %273
%275 = load i32, i32* %31
%276 = load i32, i32* %29
%277 = add nsw i32 %276, 1
%278 = icmp slt i32 %275, %277
br i1 %278, label %279, label %366
279: ; preds = %274
%280 = load i32, i32* %31
%281 = sitofp i32 %280 to double
%282 = load double, double* %40
%283 = fmul double %281, %282
%284 = load [7 x double]*, [7 x double]** %28
%285 = load i32, i32* %31
%286 = sub nsw i32 %285, 1
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds [7 x double], [7 x double]* %284, i64 %287
%289 = getelementptr inbounds [7 x double], [7 x double]* %288, i64 0, i64 0
%290 = load double, double* %289
%291 = load double, double* %44
%292 = load [7 x double]*, [7 x double]** %28
%293 = load i32, i32* %31
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds [7 x double], [7 x double]* %292, i64 %294
%296 = getelementptr inbounds [7 x double], [7 x double]* %295, i64 0, i64 0
%297 = load double, double* %296
%298 = fmul double %291, %297
%299 = call double @llvm.fmuladd.f64(double %283, double %290, double %298)
%300 = load [7 x double]*, [7 x double]** %28
%301 = load i32, i32* %31
%302 = sext i32 %301 to i64
%303 = getelementptr inbounds [7 x double], [7 x double]* %300, i64 %302
%304 = getelementptr inbounds [7 x double], [7 x double]* %303, i64 0, i64 1
store double %299, double* %304
store i32 2, i32* %32
br label %305
305: ; preds = %359, %279
%306 = load i32, i32* %32
%307 = load i32, i32* %30
%308 = add nsw i32 %307, 1
%309 = icmp slt i32 %306, %308
br i1 %309, label %310, label %362
310: ; preds = %305
%311 = load double, double* %42
%312 = load i32, i32* %32
%313 = sub nsw i32 %312, 1
%314 = sitofp i32 %313 to double
%315 = fmul double %311, %314
%316 = load [7 x double]*, [7 x double]** %28
%317 = load i32, i32* %31
%318 = sext i32 %317 to i64
%319 = getelementptr inbounds [7 x double], [7 x double]* %316, i64 %318
%320 = load i32, i32* %32
%321 = sub nsw i32 %320, 2
%322 = sext i32 %321 to i64
%323 = getelementptr inbounds [7 x double], [7 x double]* %319, i64 0, i64 %322
%324 = load double, double* %323
%325 = load i32, i32* %31
%326 = sitofp i32 %325 to double
%327 = load double, double* %40
%328 = fmul double %326, %327
%329 = load [7 x double]*, [7 x double]** %28
%330 = load i32, i32* %31
%331 = sub nsw i32 %330, 1
%332 = sext i32 %331 to i64
%333 = getelementptr inbounds [7 x double], [7 x double]* %329, i64 %332
%334 = load i32, i32* %32
%335 = sub nsw i32 %334, 1
%336 = sext i32 %335 to i64
%337 = getelementptr inbounds [7 x double], [7 x double]* %333, i64 0, i64 %336
%338 = load double, double* %337
%339 = fmul double %328, %338
%340 = call double @llvm.fmuladd.f64(double %315, double %324, double %339)
%341 = load double, double* %44
%342 = load [7 x double]*, [7 x double]** %28
%343 = load i32, i32* %31
%344 = sext i32 %343 to i64
%345 = getelementptr inbounds [7 x double], [7 x double]* %342, i64 %344
%346 = load i32, i32* %32
%347 = sub nsw i32 %346, 1
%348 = sext i32 %347 to i64
%349 = getelementptr inbounds [7 x double], [7 x double]* %345, i64 0, i64 %348
%350 = load double, double* %349
%351 = call double @llvm.fmuladd.f64(double %341, double %350, double %340)
%352 = load [7 x double]*, [7 x double]** %28
%353 = load i32, i32* %31
%354 = sext i32 %353 to i64
%355 = getelementptr inbounds [7 x double], [7 x double]* %352, i64 %354
%356 = load i32, i32* %32
%357 = sext i32 %356 to i64
%358 = getelementptr inbounds [7 x double], [7 x double]* %355, i64 0, i64 %357
store double %351, double* %358
br label %359
359: ; preds = %310
%360 = load i32, i32* %32
%361 = add nsw i32 %360, 1
store i32 %361, i32* %32
br label %305
362: ; preds = %305
br label %363
363: ; preds = %362
%364 = load i32, i32* %31
%365 = add nsw i32 %364, 1
store i32 %365, i32* %31
br label %274
366: ; preds = %274
br label %367
367: ; preds = %366, %270, %267
store double 0.000000e+00, double* %46
store i32 0, i32* %30
br label %368
368: ; preds = %423, %367
%369 = load i32, i32* %30
%370 = load i32, i32* %19
%371 = add nsw i32 %370, 1
%372 = icmp slt i32 %369, %371
br i1 %372, label %373, label %426
373: ; preds = %368
store double 0.000000e+00, double* %47
store i32 0, i32* %29
br label %374
374: ; preds = %405, %373
%375 = load i32, i32* %29
%376 = load i32, i32* %17
%377 = add nsw i32 %376, 1
%378 = icmp slt i32 %375, %377
br i1 %378, label %379, label %408
379: ; preds = %374
%380 = load i32, i32* %17
%381 = load i32, i32* %29
%382 = call i32 (i32, i32, ...) bitcast (i32 (...)* @binomial to i32 (i32, i32, ...)*)(i32 %380, i32 %381)
%383 = sitofp i32 %382 to double
%384 = load double, double* %37
%385 = load i32, i32* %17
%386 = load i32, i32* %29
%387 = sub nsw i32 %385, %386
%388 = sitofp i32 %387 to double
%389 = call double @pow(double %384, double %388)
%390 = fmul double %383, %389
%391 = load [7 x double]*, [7 x double]** %28
%392 = load i32, i32* %29
%393 = load i32, i32* %16
%394 = add nsw i32 %392, %393
%395 = sext i32 %394 to i64
%396 = getelementptr inbounds [7 x double], [7 x double]* %391, i64 %395
%397 = load i32, i32* %30
%398 = load i32, i32* %18
%399 = add nsw i32 %397, %398
%400 = sext i32 %399 to i64
%401 = getelementptr inbounds [7 x double], [7 x double]* %396, i64 0, i64 %400
%402 = load double, double* %401
%403 = load double, double* %47
%404 = call double @llvm.fmuladd.f64(double %390, double %402, double %403)
store double %404, double* %47
br label %405
405: ; preds = %379
%406 = load i32, i32* %29
%407 = add nsw i32 %406, 1
store i32 %407, i32* %29
br label %374
408: ; preds = %374
%409 = load i32, i32* %19
%410 = load i32, i32* %30
%411 = call i32 (i32, i32, ...) bitcast (i32 (...)* @binomial to i32 (i32, i32, ...)*)(i32 %409, i32 %410)
%412 = sitofp i32 %411 to double
%413 = load double, double* %38
%414 = load i32, i32* %19
%415 = load i32, i32* %30
%416 = sub nsw i32 %414, %415
%417 = sitofp i32 %416 to double
%418 = call double @pow(double %413, double %417)
%419 = fmul double %412, %418
%420 = load double, double* %47
%421 = load double, double* %46
%422 = call double @llvm.fmuladd.f64(double %419, double %420, double %421)
store double %422, double* %46
br label %423
423: ; preds = %408
%424 = load i32, i32* %30
%425 = add nsw i32 %424, 1
store i32 %425, i32* %30
br label %368
426: ; preds = %368
%427 = load double, double* %46
ret double %427
}

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