#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 const);
double fgamma_0(double);
double sqrt(double const);
double contr_ssss(int lena, const double *aexps, const double *acoefs,
                  const double *anorms, double xa, double ya, double za,
                  int lenb, const double *bexps, const double *bcoefs,
                  const double *bnorms, double xb, double yb, double zb,
                  int lenc, const double *cexps, const double *ccoefs,
                  const double *cnorms, double xc, double yc, double zc,
                  int lend, const double *dexps, const double *dcoefs,
                  const double *dnorms, double xd, double yd, double zd) {
  double val = 0.;
  int i, j, k, l;
  double EE, F;
  double rab2, rcd2, rpq2, xp, yp, zp, xq, yq, zq;
  double eta1, eta2, zeta;
  double t;
  rab2 =
      ((xa - xb) * (xa - xb) + (ya - yb) * (ya - yb) + (za - zb) * (za - zb));
  rcd2 =
      ((xc - xd) * (xc - xd) + (yc - yd) * (yc - yd) + (zc - zd) * (zc - zd));
  for (i = 0; i < lena; i++)
    for (j = 0; j < lenb; j++) {
      eta1 = 1.0 / (aexps[i] + bexps[j]);
      xp = (aexps[i] * xa + bexps[j] * xb) * eta1;
      yp = (aexps[i] * ya + bexps[j] * yb) * eta1;
      zp = (aexps[i] * za + bexps[j] * zb) * eta1;
      for (k = 0; k < lenc; k++)
        for (l = 0; l < lend; l++) {
          eta2 = 1.0 / (cexps[k] + dexps[l]);
          xq = (cexps[k] * xc + dexps[l] * xd) * eta2;
          yq = (cexps[k] * yc + dexps[l] * yd) * eta2;
          zq = (cexps[k] * zc + dexps[l] * zd) * eta2;
          rpq2 = ((xp - xq) * (xp - xq) + (yp - yq) * (yp - yq) +
                  (zp - zq) * (zp - zq));
          zeta = 4.0 * (aexps[i] + bexps[j]) * (cexps[k] + dexps[l]) /
                 (aexps[i] + bexps[j] + cexps[k] + dexps[l]);
          t = 0.25 * rpq2 * zeta;
          F = fgamma_0(t);
          EE = 34.986836655249725 * F * eta1 * eta2 /
               sqrt(aexps[i] + bexps[j] + cexps[k] + dexps[l]) *
               exp(-aexps[i] * bexps[j] * rab2 * eta1 -
                   cexps[k] * dexps[l] * rcd2 * eta2) *
               acoefs[i] * bcoefs[j] * ccoefs[k] * dcoefs[l] * anorms[i] *
               bnorms[j] * cnorms[k] * dnorms[l];
          val += EE;
        }
    }
  return val;
}


x86 assembly (clang, -O0):
<contr_ssss>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
movsd  0x78(%rbp),%xmm8
movsd  0x70(%rbp),%xmm8
movsd  0x68(%rbp),%xmm8
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%eax
movsd  0x40(%rbp),%xmm8
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,-0x28(%rbp)
movsd  %xmm1,-0x30(%rbp)
movsd  %xmm2,-0x38(%rbp)
mov    %r8d,-0x3c(%rbp)
mov    %r9,-0x48(%rbp)
movsd  %xmm3,-0x50(%rbp)
movsd  %xmm4,-0x58(%rbp)
movsd  %xmm5,-0x60(%rbp)
movsd  %xmm6,-0x68(%rbp)
movsd  %xmm7,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x28(%rbp),%xmm1
subsd  -0x50(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
subsd  -0x50(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm3
subsd  -0x58(%rbp),%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
subsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
subsd  0x68(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm2
subsd  0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm0
subsd  0x70(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm3
subsd  0x70(%rbp),%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x40(%rbp),%xmm0
subsd  0x78(%rbp),%xmm0
movsd  0x40(%rbp),%xmm2
subsd  0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movl   $0x0,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    17e8 <contr_ssss+0x6b8>
movl   $0x0,-0x80(%rbp)
mov    -0x80(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    17d5 <contr_ssss+0x6a5>
mov    -0x10(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x48(%rbp),%rax
movslq -0x80(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xd48(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x28(%rbp),%xmm2
mov    -0x48(%rbp),%rax
movslq -0x80(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x30(%rbp),%xmm2
mov    -0x48(%rbp),%rax
movslq -0x80(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm2
mov    -0x48(%rbp),%rax
movslq -0x80(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movl   $0x0,-0x84(%rbp)
mov    -0x84(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    17c2 <contr_ssss+0x692>
movl   $0x0,-0x88(%rbp)
mov    -0x88(%rbp),%eax
cmp    0x48(%rbp),%eax
jge    17a9 <contr_ssss+0x679>
mov    0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x50(%rbp),%rax
movslq -0x88(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xc2e(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x68(%rbp),%xmm2
mov    0x50(%rbp),%rax
movslq -0x88(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
mov    0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    0x50(%rbp),%rax
movslq -0x88(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
mov    0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0x40(%rbp),%xmm2
mov    0x50(%rbp),%rax
movslq -0x88(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
subsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xb8(%rbp),%xmm2
ff
subsd  -0xd0(%rbp),%xmm2
ff
movsd  -0xc0(%rbp),%xmm0
ff
subsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm3
ff
subsd  -0xd8(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
subsd  -0xe0(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm2
ff
subsd  -0xe0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x48(%rbp),%rax
movslq -0x80(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xad6(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x50(%rbp),%rax
movslq -0x88(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x48(%rbp),%rax
movslq -0x80(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    0x50(%rbp),%rax
movslq -0x88(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  0xa58(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
call   1030 <fgamma_0@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xa1b(%rip),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x48(%rbp),%rax
movslq -0x80(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x50(%rbp),%rax
movslq -0x88(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x110(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x48(%rbp),%rax
movslq -0x80(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xe8(%rbp),%xmm2
ff
mov    0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x50(%rbp),%rax
movslq -0x88(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  -0xf0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x108(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x7c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x80(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x30(%rbp),%rax
movslq -0x84(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x58(%rbp),%rax
movslq -0x88(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x7c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x18(%rbp),%rax
movslq -0x80(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x38(%rbp),%rax
movslq -0x84(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x60(%rbp),%rax
movslq -0x88(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x88(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
jmp    139b <contr_ssss+0x26b>
jmp    17ae <contr_ssss+0x67e>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    1382 <contr_ssss+0x252>
jmp    17c7 <contr_ssss+0x697>
mov    -0x80(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
jmp    128a <contr_ssss+0x15a>
jmp    17da <contr_ssss+0x6aa>
mov    -0x7c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
jmp    1277 <contr_ssss+0x147>
movsd  -0x78(%rbp),%xmm0
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<contr_ssss>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xd8,%rsp
mov    %rcx,0x98(%rsp)
mov    %rdx,0x90(%rsp)
test   %edi,%edi
jle    162f <contr_ssss+0x4ff>
mov    %rsi,0x8(%rsp)
mov    %r9,0x10(%rsp)
movsd  0x140(%rsp),%xmm8
movsd  %xmm0,0x38(%rsp)
subsd  %xmm3,%xmm0
movsd  %xmm1,0x40(%rsp)
subsd  %xmm4,%xmm1
mulsd  %xmm1,%xmm1
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movapd %xmm2,%xmm1
subsd  %xmm5,%xmm1
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x78(%rsp)
movapd %xmm6,%xmm0
subsd  0x168(%rsp),%xmm0
movapd %xmm7,%xmm1
subsd  0x170(%rsp),%xmm1
mulsd  %xmm1,%xmm1
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
subsd  0x178(%rsp),%xmm8
mulsd  %xmm8,%xmm8
addsd  %xmm0,%xmm8
movsd  %xmm8,0x70(%rsp)
mov    %edi,%eax
mov    %rax,0x30(%rsp)
mov    %r8d,%eax
mov    %rax,0x48(%rsp)
xor    %ecx,%ecx
xorpd  %xmm1,%xmm1
movsd  %xmm5,0x68(%rsp)
movsd  %xmm4,0x60(%rsp)
movsd  %xmm3,0x58(%rsp)
mov    %r8d,0x24(%rsp)
movsd  %xmm2,0x50(%rsp)
movsd  %xmm7,0x88(%rsp)
movsd  %xmm6,0x80(%rsp)
jmp    1244 <contr_ssss+0x114>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rcx
cmp    0x30(%rsp),%rcx
mov    0x24(%rsp),%r8d
je     1633 <contr_ssss+0x503>
test   %r8d,%r8d
jle    1230 <contr_ssss+0x100>
xor    %r12d,%r12d
mov    %rcx,(%rsp)
jmp    126f <contr_ssss+0x13f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r12
cmp    0x48(%rsp),%r12
mov    (%rsp),%rcx
je     1230 <contr_ssss+0x100>
cmpl   $0x0,0x120(%rsp)
jle    1260 <contr_ssss+0x130>
mov    0x8(%rsp),%rax
movsd  (%rax,%rcx,8),%xmm10
mov    0x10(%rsp),%rax
movsd  (%rax,%r12,8),%xmm8
movapd %xmm10,%xmm9
addsd  %xmm8,%xmm9
movsd  0xd5f(%rip),%xmm0
divsd  %xmm9,%xmm0
movapd %xmm8,%xmm9
mulsd  %xmm3,%xmm9
movapd %xmm10,%xmm3
mulsd  0x38(%rsp),%xmm3
addsd  %xmm9,%xmm3
mulsd  %xmm0,%xmm3
movsd  %xmm3,0xa8(%rsp)
movapd %xmm8,%xmm3
mulsd  %xmm4,%xmm3
movapd %xmm10,%xmm4
mulsd  0x40(%rsp),%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm4
movsd  %xmm4,0xa0(%rsp)
mulsd  %xmm5,%xmm8
mulsd  %xmm2,%xmm10
addsd  %xmm8,%xmm10
movsd  %xmm0,0xb0(%rsp)
mulsd  %xmm0,%xmm10
movsd  %xmm10,0xb8(%rsp)
xor    %ebp,%ebp
mov    %r12,0xc0(%rsp)
jmp    135c <contr_ssss+0x22c>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rbp
mov    0x120(%rsp),%eax
cmp    %rax,%rbp
movsd  0x68(%rsp),%xmm5
movsd  0x60(%rsp),%xmm4
movsd  0x58(%rsp),%xmm3
movsd  0x50(%rsp),%xmm2
je     1260 <contr_ssss+0x130>
cmpl   $0x0,0x148(%rsp)
jle    1330 <contr_ssss+0x200>
xor    %r14d,%r14d
mov    0x150(%rsp),%rbx
mov    0x128(%rsp),%r15
mov    (%rsp),%r13
mov    %rbp,0xc8(%rsp)
jmp    14d4 <contr_ssss+0x3a4>
nopw   0x0(%rax,%rax,1)
movsd  %xmm1,0x18(%rsp)
call   1050 <sqrt@plt>
movsd  0x18(%rsp),%xmm1
movsd  0x28(%rsp),%xmm3
movsd  0xb0(%rsp),%xmm2
mulsd  %xmm2,%xmm1
mulsd  %xmm3,%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
mov    (%rsp),%r13
mov    0x8(%rsp),%rax
movsd  (%rax,%r13,8),%xmm0
xorpd  0xc57(%rip),%xmm0
mov    0xc0(%rsp),%r12
mov    0x10(%rsp),%rax
mulsd  (%rax,%r12,8),%xmm0
mulsd  0x78(%rsp),%xmm0
mov    0x150(%rsp),%rbx
movsd  (%rbx,%r14,8),%xmm1
mov    0x128(%rsp),%r15
mov    0xc8(%rsp),%rbp
mulsd  (%r15,%rbp,8),%xmm1
mulsd  0x70(%rsp),%xmm1
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
subsd  %xmm1,%xmm0
call   1040 <exp@plt>
mulsd  0x18(%rsp),%xmm0
mov    0x90(%rsp),%rax
mulsd  (%rax,%r13,8),%xmm0
mov    0x110(%rsp),%rax
mulsd  (%rax,%r12,8),%xmm0
mov    0x130(%rsp),%rax
mulsd  (%rax,%rbp,8),%xmm0
mov    0x158(%rsp),%rax
mulsd  (%rax,%r14,8),%xmm0
mov    0x98(%rsp),%rax
mulsd  (%rax,%r13,8),%xmm0
mov    0x118(%rsp),%rax
mulsd  (%rax,%r12,8),%xmm0
mov    0x138(%rsp),%rax
mulsd  (%rax,%rbp,8),%xmm0
mov    0x160(%rsp),%rax
mulsd  (%rax,%r14,8),%xmm0
movsd  0xd0(%rsp),%xmm1
addsd  %xmm0,%xmm1
add    $0x1,%r14
mov    0x148(%rsp),%eax
cmp    %r14,%rax
movsd  0x88(%rsp),%xmm7
movsd  0x80(%rsp),%xmm6
je     1330 <contr_ssss+0x200>
movsd  %xmm1,0xd0(%rsp)
movsd  (%r15,%rbp,8),%xmm9
movsd  (%rbx,%r14,8),%xmm2
movapd %xmm9,%xmm4
movapd %xmm9,%xmm5
movapd %xmm9,%xmm8
addsd  %xmm2,%xmm8
movsd  0xafb(%rip),%xmm0
divsd  %xmm8,%xmm0
movapd %xmm2,%xmm1
movapd %xmm2,%xmm3
mulsd  0x168(%rsp),%xmm3
mulsd  %xmm6,%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm4
movsd  0xa8(%rsp),%xmm3
subsd  %xmm4,%xmm3
mulsd  0x170(%rsp),%xmm1
mulsd  %xmm7,%xmm5
addsd  %xmm1,%xmm5
mulsd  %xmm0,%xmm5
movsd  0xa0(%rsp),%xmm4
subsd  %xmm5,%xmm4
mov    0x8(%rsp),%rbx
movsd  (%rbx,%r13,8),%xmm5
mov    0x10(%rsp),%r15
addsd  (%r15,%r12,8),%xmm5
movapd %xmm5,%xmm6
addsd  %xmm9,%xmm5
addsd  %xmm2,%xmm5
movapd %xmm2,%xmm1
movapd %xmm9,%xmm7
mulsd  0x178(%rsp),%xmm1
mulsd  0x140(%rsp),%xmm7
addsd  %xmm1,%xmm7
movsd  %xmm0,0x28(%rsp)
mulsd  %xmm0,%xmm7
movsd  0xb8(%rsp),%xmm0
subsd  %xmm7,%xmm0
mulsd  %xmm4,%xmm4
mulsd  %xmm3,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm0,%xmm0
addsd  %xmm3,%xmm0
mulsd  0xa3d(%rip),%xmm6
mulsd  %xmm8,%xmm6
divsd  %xmm5,%xmm6
mulsd  0xa34(%rip),%xmm0
mulsd  %xmm6,%xmm0
call   1030 <fgamma_0@plt>
movapd %xmm0,%xmm1
mulsd  0xa27(%rip),%xmm1
movsd  (%rbx,%r13,8),%xmm0
addsd  (%r15,%r12,8),%xmm0
mov    0x128(%rsp),%rax
addsd  (%rax,%rbp,8),%xmm0
mov    0x150(%rsp),%rax
addsd  (%rax,%r14,8),%xmm0
ucomisd 0xa00(%rip),%xmm0
jb     1390 <contr_ssss+0x260>
sqrtsd %xmm0,%xmm0
jmp    13a1 <contr_ssss+0x271>
xorpd  %xmm1,%xmm1
movapd %xmm1,%xmm0
add    $0xd8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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