#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 M_PI;
int /*<<< orphan*/ efi_1d(double *, double *, int, int, double, double, double,
                          double);
double exp(double);
int /*<<< orphan*/ fgamma_set(int, double, double *);
void efi(double x1, double y1, double z1, double norm1, int l1, int m1, int n1,
         double alpha1, double x2, double y2, double z2, double norm2, int l2,
         int m2, int n2, double alpha2, double x3, double y3, double z3,
         double *ex, double *ey, double *ez) {
  double eta, xp, yp, zp, sum, rab2, rcp2;
  double Ax[2 * 8], Ay[2 * 8], Az[2 * 8];
  double Axp[2 * 8], Ayp[2 * 8], Azp[2 * 8];
  double F[2 * 8];
  int kX, kY, kZ;
  eta = 1.0 / (alpha1 + alpha2);
  xp = (alpha1 * x1 + alpha2 * x2) * eta;
  yp = (alpha1 * y1 + alpha2 * y2) * eta;
  zp = (alpha1 * z1 + alpha2 * z2) * eta;
  rab2 =
      ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2));
  rcp2 =
      ((x3 - xp) * (x3 - xp) + (y3 - yp) * (y3 - yp) + (z3 - zp) * (z3 - zp));
  efi_1d(Ax, Axp, l1, l2, xp - x1, xp - x2, xp - x3, eta);
  efi_1d(Ay, Ayp, m1, m2, yp - y1, yp - y2, yp - y3, eta);
  efi_1d(Az, Azp, n1, n2, zp - z1, zp - z2, zp - z3, eta);
  fgamma_set(l1 + l2 + m1 + m2 + n1 + n2 + 1, rcp2 / eta, F);
  *ex = 0.0;
  *ey = 0.0;
  *ez = 0.0;
  for (kX = 0; kX < l1 + l2 + 1; kX++)
    for (kY = 0; kY < m1 + m2 + 1; kY++)
      for (kZ = 0; kZ < n1 + n2 + 1; kZ++) {
        *ex += Axp[kX] * Ay[kY] * Az[kZ] * F[kX + kY + kZ];
        *ey += Ax[kX] * Ayp[kY] * Az[kZ] * F[kX + kY + kZ];
        *ez += Ax[kX] * Ay[kY] * Azp[kZ] * F[kX + kY + kZ];
      }
  sum = 0.0;
  for (kX = 0; kX < l1 + l2 + 1; kX++)
    for (kY = 0; kY < m1 + m2 + 1; kY++)
      for (kZ = 0; kZ < n1 + n2 + 1; kZ++)
        sum += Ax[kX] * Ay[kY] * Az[kZ] * F[kX + kY + kZ + 1];
  *ex -= sum * 2.0 * (x3 - xp) / eta;
  *ey -= sum * 2.0 * (y3 - yp) / eta;
  *ez -= sum * 2.0 * (z3 - zp) / eta;
  sum = -norm1 * norm2 * 2.0 * M_PI * eta * exp(-alpha1 * alpha2 * rab2 * eta);
  *ex = *ex * sum;
  *ey = *ey * sum;
  *ez = *ez * sum;
}


x86 assembly (clang, -O0):
<efi>:
push   %rbp
mov    %rsp,%rbp
sub    $0x440,%rsp
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
movsd  0x30(%rbp),%xmm8
movsd  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
mov    %edi,-0x24(%rbp)
mov    %esi,-0x28(%rbp)
mov    %edx,-0x2c(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
mov    %ecx,-0x54(%rbp)
mov    %r8d,-0x58(%rbp)
mov    %r9d,-0x5c(%rbp)
movsd  -0x38(%rbp),%xmm1
addsd  0x18(%rbp),%xmm1
movsd  0xe4d(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  0x18(%rbp),%xmm1
mulsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x18(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0x18(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x8(%rbp),%xmm1
subsd  -0x40(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm2
subsd  -0x40(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm3
subsd  -0x48(%rbp),%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x18(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
subsd  -0x50(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0x20(%rbp),%xmm1
subsd  -0x70(%rbp),%xmm1
movsd  0x20(%rbp),%xmm2
subsd  -0x70(%rbp),%xmm2
movsd  0x28(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  0x28(%rbp),%xmm3
subsd  -0x78(%rbp),%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x30(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  0x30(%rbp),%xmm2
subsd  -0x80(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
lea    -0x120(%rbp),%rdi
lea    -0x2a0(%rbp),%rsi
mov    -0x24(%rbp),%edx
mov    -0x54(%rbp),%ecx
movsd  -0x70(%rbp),%xmm0
subsd  -0x8(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
subsd  -0x40(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm2
subsd  0x20(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm3
call   1050 <efi_1d@plt>
lea    -0x1a0(%rbp),%rdi
lea    -0x320(%rbp),%rsi
mov    -0x28(%rbp),%edx
mov    -0x58(%rbp),%ecx
movsd  -0x78(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
subsd  -0x48(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
subsd  0x28(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm3
call   1050 <efi_1d@plt>
lea    -0x220(%rbp),%rdi
lea    -0x3a0(%rbp),%rsi
mov    -0x2c(%rbp),%edx
mov    -0x5c(%rbp),%ecx
movsd  -0x80(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm1
subsd  -0x50(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
subsd  0x30(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm3
call   1050 <efi_1d@plt>
mov    -0x24(%rbp),%edi
add    -0x54(%rbp),%edi
add    -0x28(%rbp),%edi
add    -0x58(%rbp),%edi
add    -0x2c(%rbp),%edi
add    -0x5c(%rbp),%edi
add    $0x1,%edi
movsd  -0x98(%rbp),%xmm0
ff
divsd  -0x68(%rbp),%xmm0
lea    -0x420(%rbp),%rsi
call   1030 <fgamma_set@plt>
mov    0x38(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x40(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x48(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x424(%rbp)
mov    -0x424(%rbp),%eax
mov    -0x24(%rbp),%ecx
add    -0x54(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    15ad <efi+0x47d>
movl   $0x0,-0x428(%rbp)
mov    -0x428(%rbp),%eax
mov    -0x28(%rbp),%ecx
add    -0x58(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1594 <efi+0x464>
movl   $0x0,-0x42c(%rbp)
mov    -0x42c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    -0x5c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    157b <efi+0x44b>
movslq -0x424(%rbp),%rax
movsd  -0x2a0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x428(%rbp),%rax
mulsd  -0x1a0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x42c(%rbp),%rax
mulsd  -0x220(%rbp,%rax,8),%xmm0
ff ff
mov    -0x424(%rbp),%eax
add    -0x428(%rbp),%eax
add    -0x42c(%rbp),%eax
cltq
movsd  -0x420(%rbp,%rax,8),%xmm2
ff ff
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movslq -0x424(%rbp),%rax
movsd  -0x120(%rbp,%rax,8),%xmm0
ff ff
movslq -0x428(%rbp),%rax
mulsd  -0x320(%rbp,%rax,8),%xmm0
ff ff
movslq -0x42c(%rbp),%rax
mulsd  -0x220(%rbp,%rax,8),%xmm0
ff ff
mov    -0x424(%rbp),%eax
add    -0x428(%rbp),%eax
add    -0x42c(%rbp),%eax
cltq
movsd  -0x420(%rbp,%rax,8),%xmm2
ff ff
mov    0x40(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movslq -0x424(%rbp),%rax
movsd  -0x120(%rbp,%rax,8),%xmm0
ff ff
movslq -0x428(%rbp),%rax
mulsd  -0x1a0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x42c(%rbp),%rax
mulsd  -0x3a0(%rbp,%rax,8),%xmm0
ff ff
mov    -0x424(%rbp),%eax
add    -0x428(%rbp),%eax
add    -0x42c(%rbp),%eax
cltq
movsd  -0x420(%rbp,%rax,8),%xmm2
ff ff
mov    0x48(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x42c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x42c(%rbp)
jmp    142d <efi+0x2fd>
jmp    1580 <efi+0x450>
mov    -0x428(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x428(%rbp)
jmp    140c <efi+0x2dc>
jmp    1599 <efi+0x469>
mov    -0x424(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x424(%rbp)
jmp    13eb <efi+0x2bb>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x0,-0x424(%rbp)
mov    -0x424(%rbp),%eax
mov    -0x24(%rbp),%ecx
add    -0x54(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    16c9 <efi+0x599>
movl   $0x0,-0x428(%rbp)
mov    -0x428(%rbp),%eax
mov    -0x28(%rbp),%ecx
add    -0x58(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    16b0 <efi+0x580>
movl   $0x0,-0x42c(%rbp)
mov    -0x42c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    -0x5c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1697 <efi+0x567>
movslq -0x424(%rbp),%rax
movsd  -0x120(%rbp,%rax,8),%xmm0
ff ff
movslq -0x428(%rbp),%rax
mulsd  -0x1a0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x42c(%rbp),%rax
mulsd  -0x220(%rbp,%rax,8),%xmm0
ff ff
mov    -0x424(%rbp),%eax
add    -0x428(%rbp),%eax
add    -0x42c(%rbp),%eax
add    $0x1,%eax
cltq
movsd  -0x420(%rbp,%rax,8),%xmm2
ff ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x42c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x42c(%rbp)
jmp    1604 <efi+0x4d4>
jmp    169c <efi+0x56c>
mov    -0x428(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x428(%rbp)
jmp    15e3 <efi+0x4b3>
jmp    16b5 <efi+0x585>
mov    -0x424(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x424(%rbp)
jmp    15c2 <efi+0x492>
movsd  0x937(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  0x20(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
mulsd  %xmm0,%xmm1
divsd  -0x68(%rbp),%xmm1
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  0x904(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  0x28(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
mulsd  %xmm0,%xmm1
divsd  -0x68(%rbp),%xmm1
mov    0x40(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  0x8d1(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  0x30(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
mulsd  %xmm0,%xmm1
divsd  -0x68(%rbp),%xmm1
mov    0x48(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  0x10(%rbp),%xmm0
movsd  0x87d(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x2852(%rip),%rax
mulsd  (%rax),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x438(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  0x18(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x438(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
mov    0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x40(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    0x40(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x48(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    0x48(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x440,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<efi>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x458,%rsp
mov    %r9,0x70(%rsp)
mov    %r8d,%r12d
mov    %rcx,0x20(%rsp)
movsd  %xmm7,0x30(%rsp)
movsd  %xmm6,0x40(%rsp)
mov    %rdx,0x10(%rsp)
mov    %esi,%ebx
mov    %rbx,0x28(%rsp)
mov    %edi,%edx
mov    %edi,0x18(%rsp)
movaps %xmm3,0x50(%rsp)
movapd %xmm2,%xmm10
movsd  %xmm2,0x48(%rsp)
movsd  %xmm1,0x38(%rsp)
movapd %xmm0,%xmm9
movsd  0x498(%rsp),%xmm11
movsd  0x4a8(%rsp),%xmm12
movsd  0x4a0(%rsp),%xmm8
movapd %xmm4,%xmm0
addsd  %xmm11,%xmm0
movsd  0xe4a(%rip),%xmm3
divsd  %xmm0,%xmm3
movapd %xmm5,%xmm0
mulsd  %xmm11,%xmm0
movapd %xmm4,%xmm2
mulsd  %xmm9,%xmm2
addsd  %xmm0,%xmm2
mulsd  %xmm3,%xmm2
movapd %xmm6,%xmm0
mulsd  %xmm11,%xmm0
movapd %xmm4,%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm0,%xmm6
mulsd  %xmm3,%xmm6
movapd %xmm6,0xa0(%rsp)
movapd %xmm7,%xmm0
mulsd  %xmm11,%xmm0
movapd %xmm4,0xc0(%rsp)
mulsd  %xmm10,%xmm4
addsd  %xmm0,%xmm4
movapd %xmm8,%xmm1
subsd  %xmm2,%xmm1
movapd %xmm12,%xmm0
subsd  %xmm6,%xmm0
movsd  %xmm0,0x88(%rsp)
mulsd  %xmm0,%xmm0
movsd  %xmm1,0x78(%rsp)
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm3,0x8(%rsp)
mulsd  %xmm3,%xmm4
movapd %xmm4,0xb0(%rsp)
movsd  0x4b0(%rsp),%xmm0
subsd  %xmm4,%xmm0
movsd  %xmm0,0x80(%rsp)
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x68(%rsp)
movapd %xmm2,%xmm0
movapd %xmm2,%xmm1
subsd  %xmm8,%xmm2
mov    0x4c8(%rsp),%r15
mov    0x4c0(%rsp),%r13
mov    0x4b8(%rsp),%r14
movsd  %xmm9,0x98(%rsp)
subsd  %xmm9,%xmm0
movsd  %xmm5,0x90(%rsp)
subsd  %xmm5,%xmm1
lea    0x250(%rsp),%rdi
lea    0x3d0(%rsp),%rsi
call   1050 <efi_1d@plt>
movapd 0xa0(%rsp),%xmm3
movapd %xmm3,%xmm0
subsd  0x38(%rsp),%xmm0
movapd %xmm3,%xmm1
subsd  0x40(%rsp),%xmm1
subsd  0x4a8(%rsp),%xmm3
movapd %xmm3,%xmm2
lea    0x1d0(%rsp),%rdi
lea    0x350(%rsp),%rsi
mov    %ebx,%edx
mov    %r12d,%ecx
movsd  0x8(%rsp),%xmm3
call   1050 <efi_1d@plt>
movapd 0xb0(%rsp),%xmm3
movapd %xmm3,%xmm0
subsd  0x48(%rsp),%xmm0
movapd %xmm3,%xmm1
subsd  0x30(%rsp),%xmm1
subsd  0x4b0(%rsp),%xmm3
movapd %xmm3,%xmm2
lea    0xd0(%rsp),%rdi
lea    0x2d0(%rsp),%rsi
mov    0x10(%rsp),%rbx
mov    %ebx,%edx
mov    0x70(%rsp),%rbp
mov    %ebp,%ecx
movsd  0x8(%rsp),%xmm3
call   1050 <efi_1d@plt>
mov    0x20(%rsp),%rdx
add    0x18(%rsp),%edx
mov    %r12,0x20(%rsp)
mov    0x28(%rsp),%rcx
lea    (%r12,%rcx,1),%eax
mov    %rax,0x18(%rsp)
lea    (%rbx,%rax,1),%edi
add    $0x1,%edi
add    %edx,%edi
mov    %rdx,%rbx
mov    %rbp,%r12
add    %ebp,%edi
movsd  0x68(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
lea    0x150(%rsp),%rbp
mov    %rbp,%rsi
call   1030 <fgamma_set@plt>
mov    %rbx,%r10
movq   $0x0,(%r14)
movq   $0x0,0x0(%r13)
movq   $0x0,(%r15)
xorpd  %xmm0,%xmm0
test   %r10d,%r10d
js     15ec <efi+0x4bc>
mov    0x20(%rsp),%rax
mov    0x28(%rsp),%rcx
add    %ecx,%eax
add    $0x1,%eax
mov    0x10(%rsp),%rcx
lea    (%r12,%rcx,1),%r11d
add    %r12d,%ecx
add    $0x1,%ecx
lea    0x1(%r10),%r9d
mov    %eax,%r8d
xor    %edx,%edx
mov    0x18(%rsp),%rsi
jmp    1421 <efi+0x2f1>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rdx
add    $0x8,%rbp
cmp    %r9,%rdx
je     14e1 <efi+0x3b1>
test   %esi,%esi
js     1410 <efi+0x2e0>
mov    %rbp,%rdi
xor    %ebx,%ebx
jmp    143d <efi+0x30d>
nopl   0x0(%rax)
add    $0x1,%rbx
add    $0x8,%rdi
cmp    %r8,%rbx
je     1410 <efi+0x2e0>
test   %r11d,%r11d
js     1430 <efi+0x300>
movsd  0x1d0(%rsp,%rbx,8),%xmm1
movsd  0x3d0(%rsp,%rdx,8),%xmm2
mulsd  %xmm1,%xmm2
movsd  0x250(%rsp,%rdx,8),%xmm4
movsd  0x350(%rsp,%rbx,8),%xmm3
mulsd  %xmm4,%xmm3
mulsd  %xmm4,%xmm1
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  0xd0(%rsp,%rax,8),%xmm4
movapd %xmm2,%xmm5
mulsd  %xmm4,%xmm5
movsd  (%rdi,%rax,8),%xmm6
mulsd  %xmm6,%xmm5
addsd  (%r14),%xmm5
movsd  %xmm5,(%r14)
mulsd  %xmm3,%xmm4
mulsd  %xmm6,%xmm4
addsd  0x0(%r13),%xmm4
movsd  %xmm4,0x0(%r13)
movsd  0x2d0(%rsp,%rax,8),%xmm4
mulsd  %xmm1,%xmm4
mulsd  %xmm6,%xmm4
addsd  (%r15),%xmm4
movsd  %xmm4,(%r15)
add    $0x1,%rax
cmp    %rax,%rcx
jne    1480 <efi+0x350>
jmp    1430 <efi+0x300>
test   %r10d,%r10d
js     15ec <efi+0x4bc>
mov    %ecx,%edi
and    $0xfffffffe,%edi
xorpd  %xmm0,%xmm0
xor    %r10d,%r10d
mov    %r9,0x10(%rsp)
jmp    1513 <efi+0x3e3>
nopl   (%rax)
mov    %r9,%r10
cmp    0x10(%rsp),%r9
mov    0x18(%rsp),%rsi
je     15ec <efi+0x4bc>
test   %esi,%esi
js     15e0 <efi+0x4b0>
lea    0x1(%r10),%r9
lea    0x2(%r10),%rdx
mov    %r9,%rbx
xor    %ebp,%ebp
jmp    1541 <efi+0x411>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rbp
add    $0x1,%rdx
add    $0x1,%rbx
cmp    %r8,%rbp
je     1500 <efi+0x3d0>
test   %r11d,%r11d
js     1530 <efi+0x400>
movsd  0x250(%rsp,%r10,8),%xmm1
mulsd  0x1d0(%rsp,%rbp,8),%xmm1
je     15b0 <efi+0x480>
xor    %eax,%eax
nopl   (%rax)
movsd  0xd0(%rsp,%rax,8),%xmm2
mulsd  %xmm1,%xmm2
lea    (%rbx,%rax,1),%r12d
mulsd  0x150(%rsp,%r12,8),%xmm2
addsd  %xmm0,%xmm2
movsd  0xd8(%rsp,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
lea    (%rdx,%rax,1),%esi
mulsd  0x150(%rsp,%rsi,8),%xmm0
addsd  %xmm2,%xmm0
add    $0x2,%rax
cmp    %rax,%rdi
jne    1560 <efi+0x430>
test   $0x1,%cl
je     1530 <efi+0x400>
jmp    15bb <efi+0x48b>
nopl   0x0(%rax)
xor    %eax,%eax
test   $0x1,%cl
je     1530 <efi+0x400>
lea    (%r9,%rbp,1),%rsi
mulsd  0xd0(%rsp,%rax,8),%xmm1
add    %eax,%esi
mulsd  0x150(%rsp,%rsi,8),%xmm1
addsd  %xmm1,%xmm0
jmp    1530 <efi+0x400>
nopl   0x0(%rax)
add    $0x1,%r10
mov    %r10,%r9
jmp    1503 <efi+0x3d3>
movsd  0x48(%rsp),%xmm2
subsd  0x30(%rsp),%xmm2
movsd  0x98(%rsp),%xmm1
subsd  0x90(%rsp),%xmm1
movsd  0x38(%rsp),%xmm3
subsd  0x40(%rsp),%xmm3
mulsd  %xmm3,%xmm3
mulsd  %xmm1,%xmm1
addsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm0,%xmm0
movsd  0x78(%rsp),%xmm4
mulsd  %xmm0,%xmm4
movsd  0x8(%rsp),%xmm3
divsd  %xmm3,%xmm4
movsd  (%r14),%xmm1
subsd  %xmm4,%xmm1
movsd  %xmm1,(%r14)
movsd  0x88(%rsp),%xmm4
mulsd  %xmm0,%xmm4
divsd  %xmm3,%xmm4
movsd  0x0(%r13),%xmm1
subsd  %xmm4,%xmm1
movsd  %xmm1,0x0(%r13)
movsd  0x80(%rsp),%xmm1
mulsd  %xmm0,%xmm1
divsd  %xmm3,%xmm1
movsd  (%r15),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r15)
movapd 0x978(%rip),%xmm1
movapd 0x50(%rsp),%xmm0
xorpd  %xmm1,%xmm0
mulsd  0x490(%rsp),%xmm0
addsd  %xmm0,%xmm0
mov    0x2932(%rip),%rax
mulsd  (%rax),%xmm0
mulsd  %xmm3,%xmm0
movapd %xmm0,0x50(%rsp)
movapd 0xc0(%rsp),%xmm0
xorpd  %xmm1,%xmm0
mulsd  0x498(%rsp),%xmm0
mulsd  %xmm2,%xmm0
mulsd  %xmm3,%xmm0
call   1040 <exp@plt>
mulsd  0x50(%rsp),%xmm0
movsd  (%r14),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%r14)
movsd  0x0(%r13),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x0(%r13)
mulsd  (%r15),%xmm0
movsd  %xmm0,(%r15)
add    $0x458,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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