#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 Int1d(double, int, int, int, int, double, double, double, double, double,
             double, double, double, double **);
int /*<<< orphan*/ Roots(int, double, double *, double *);
double dist2(double, double, double, double, double, double);
double product_center_1D(double, double, double, double);
int sqrt(double);
double rys_coulomb_repulsion(double xa, double ya, double za, double norma,
                             int la, int ma, int na, double alphaa, double xb,
                             double yb, double zb, double normb, int lb, int mb,
                             int nb, double alphab, double xc, double yc,
                             double zc, double normc, int lc, int mc, int nc,
                             double alphac, double xd, double yd, double zd,
                             double normd, int ld, int md, int nd,
                             double alphad) {
  int norder, i;
  double A, B, xp, yp, zp, xq, yq, zq, rpq2, X, rho, sum, t, Ix, Iy, Iz;
  norder = (la + ma + na + lb + nb + mb + lc + mc + nc + ld + md + nd) / 2 + 1;
  A = alphaa + alphab;
  B = alphac + alphad;
  rho = A * B / (A + B);
  xp = product_center_1D(alphaa, xa, alphab, xb);
  yp = product_center_1D(alphaa, ya, alphab, yb);
  zp = product_center_1D(alphaa, za, alphab, zb);
  xq = product_center_1D(alphac, xc, alphad, xd);
  yq = product_center_1D(alphac, yc, alphad, yd);
  zq = product_center_1D(alphac, zc, alphad, zd);
  rpq2 = dist2(xp, yp, zp, xq, yq, zq);
  X = rpq2 * rho;
  double roots[norder], weights[norder];
  double G[la + lb + ma + mb + na + nb + 1][7];
  Roots(norder, X, roots, weights);
  sum = 0.;
  for (i = 0; i < norder; i++) {
    t = roots[i];
    Ix = Int1d(t, la, lb, lc, ld, xa, xb, xc, xd, alphaa, alphab, alphac,
               alphad, G);
    Iy = Int1d(t, ma, mb, mc, md, ya, yb, yc, yd, alphaa, alphab, alphac,
               alphad, G);
    Iz = Int1d(t, na, nb, nc, nd, za, zb, zc, zd, alphaa, alphab, alphac,
               alphad, G);
    sum = sum + Ix * Iy * Iz * weights[i];
  }
  return 2 * sqrt(rho / 3.14159265358979323846) * norma * normb * normc *
         normd * sum;
}


x86 assembly (clang, -O0):
<rys_coulomb_repulsion>:
push   %rbp
mov    %rsp,%rbp
sub    $0x120,%rsp
movsd  0x98(%rbp),%xmm8
mov    0x90(%rbp),%eax
mov    0x88(%rbp),%eax
mov    0x80(%rbp),%eax
movsd  0x78(%rbp),%xmm8
movsd  0x70(%rbp),%xmm8
movsd  0x68(%rbp),%xmm8
movsd  0x60(%rbp),%xmm8
movsd  0x58(%rbp),%xmm8
mov    0x50(%rbp),%eax
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%eax
movsd  0x38(%rbp),%xmm8
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)
mov    -0x24(%rbp),%eax
mov    -0x28(%rbp),%ecx
add    %ecx,%eax
mov    -0x2c(%rbp),%ecx
add    %ecx,%eax
mov    -0x54(%rbp),%ecx
add    %ecx,%eax
mov    -0x5c(%rbp),%ecx
add    %ecx,%eax
mov    -0x58(%rbp),%ecx
add    %ecx,%eax
mov    0x40(%rbp),%ecx
add    %ecx,%eax
mov    0x48(%rbp),%ecx
add    %ecx,%eax
mov    0x50(%rbp),%ecx
add    %ecx,%eax
mov    0x80(%rbp),%ecx
add    %ecx,%eax
mov    0x88(%rbp),%ecx
add    %ecx,%eax
mov    0x90(%rbp),%ecx
add    %ecx,%eax
mov    %eax,%ecx
shr    $0x1f,%ecx
add    %ecx,%eax
sar    %eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0x18(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0x58(%rbp),%xmm0
movsd  0x98(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
movaps %xmm1,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
movsd  0x18(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
movsd  0x18(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  0x18(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0x58(%rbp),%xmm0
movsd  0x20(%rbp),%xmm1
movsd  0x98(%rbp),%xmm2
movsd  0x60(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x58(%rbp),%xmm0
movsd  0x28(%rbp),%xmm1
movsd  0x98(%rbp),%xmm2
movsd  0x68(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0x58(%rbp),%xmm0
movsd  0x30(%rbp),%xmm1
movsd  0x98(%rbp),%xmm2
movsd  0x70(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x90(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm3
ff
movsd  -0xa0(%rbp),%xmm4
ff
movsd  -0xa8(%rbp),%xmm5
ff
call   1060 <dist2@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x60(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0xf0(%rbp)
lea    0xf(,%rax,8),%rcx
and    $0xfffffffffffffff0,%rcx
mov    %rsp,%rsi
sub    %rcx,%rsi
mov    %rsi,-0x120(%rbp)
mov    %rsi,%rsp
mov    %rax,-0xf8(%rbp)
mov    -0x60(%rbp),%eax
lea    0xf(,%rax,8),%rcx
and    $0xfffffffffffffff0,%rcx
mov    %rsp,%rdx
sub    %rcx,%rdx
mov    %rdx,-0x118(%rbp)
mov    %rdx,%rsp
mov    %rax,-0x100(%rbp)
mov    -0x24(%rbp),%edi
mov    -0x54(%rbp),%eax
add    %eax,%edi
mov    -0x28(%rbp),%eax
add    %eax,%edi
mov    -0x58(%rbp),%eax
add    %eax,%edi
mov    -0x2c(%rbp),%eax
add    %eax,%edi
mov    -0x5c(%rbp),%ecx
mov    %ecx,%eax
mov    %edi,%ecx
lea    0x1(%rax,%rcx,1),%eax
imul   $0x38,%rax,%rdi
add    $0xf,%rdi
and    $0xfffffffffffffff0,%rdi
mov    %rsp,%rcx
sub    %rdi,%rcx
mov    %rcx,-0x110(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x108(%rbp)
mov    -0x60(%rbp),%edi
movsd  -0xb8(%rbp),%xmm0
ff
call   1040 <Roots@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x60(%rbp),%eax
jge    1619 <rys_coulomb_repulsion+0x4c9>
mov    -0x110(%rbp),%r8
mov    -0x120(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x24(%rbp),%edi
mov    -0x54(%rbp),%esi
mov    0x40(%rbp),%edx
mov    0x80(%rbp),%ecx
movsd  -0x8(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm2
movsd  0x20(%rbp),%xmm3
movsd  0x60(%rbp),%xmm4
movsd  -0x38(%rbp),%xmm5
movsd  0x18(%rbp),%xmm6
movsd  0x58(%rbp),%xmm7
movsd  0x98(%rbp),%xmm8
sub    $0x10,%rsp
movsd  %xmm8,(%rsp)
call   1030 <Int1d@plt>
mov    -0x110(%rbp),%r8
add    $0x10,%rsp
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%edi
mov    -0x58(%rbp),%esi
mov    0x48(%rbp),%edx
mov    0x88(%rbp),%ecx
movsd  -0x10(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm2
movsd  0x28(%rbp),%xmm3
movsd  0x68(%rbp),%xmm4
movsd  -0x38(%rbp),%xmm5
movsd  0x18(%rbp),%xmm6
movsd  0x58(%rbp),%xmm7
movsd  0x98(%rbp),%xmm8
sub    $0x10,%rsp
movsd  %xmm8,(%rsp)
call   1030 <Int1d@plt>
mov    -0x110(%rbp),%r8
add    $0x10,%rsp
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x2c(%rbp),%edi
mov    -0x5c(%rbp),%esi
mov    0x50(%rbp),%edx
mov    0x90(%rbp),%ecx
movsd  -0x18(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm2
movsd  0x30(%rbp),%xmm3
movsd  0x70(%rbp),%xmm4
movsd  -0x38(%rbp),%xmm5
movsd  0x18(%rbp),%xmm6
movsd  0x58(%rbp),%xmm7
movsd  0x98(%rbp),%xmm8
sub    $0x10,%rsp
movsd  %xmm8,(%rsp)
call   1030 <Int1d@plt>
mov    -0x118(%rbp),%rax
add    $0x10,%rsp
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1478 <rys_coulomb_repulsion+0x328>
movsd  -0xc0(%rbp),%xmm0
ff
movsd  0x9d7(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1070 <sqrt@plt>
shl    $0x1,%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x20(%rbp),%xmm0
mulsd  0x10(%rbp),%xmm0
mulsd  0x38(%rbp),%xmm0
mulsd  0x78(%rbp),%xmm0
mulsd  -0xc8(%rbp),%xmm0
ff
mov    -0xf0(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rys_coulomb_repulsion>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x98,%rsp
mov    %r9,-0x90(%rbp)
movsd  %xmm7,-0x88(%rbp)
ff
movsd  %xmm6,-0x80(%rbp)
movsd  %xmm3,-0xa0(%rbp)
ff
movsd  %xmm2,-0x78(%rbp)
movsd  %xmm1,-0x70(%rbp)
movaps %xmm0,%xmm6
movsd  0x58(%rbp),%xmm3
movsd  0x18(%rbp),%xmm1
movsd  %xmm4,-0x38(%rbp)
movapd %xmm4,%xmm0
addsd  %xmm1,%xmm0
movapd %xmm1,%xmm2
movapd %xmm3,%xmm1
addsd  0x98(%rbp),%xmm1
movapd %xmm0,%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm0,%xmm1
divsd  %xmm1,%xmm3
movsd  %xmm3,-0x68(%rbp)
mov    %rsi,-0xb8(%rbp)
mov    %rdi,-0xb0(%rbp)
lea    (%rsi,%rdi,1),%r14d
mov    %edx,-0x54(%rbp)
add    %edx,%r14d
mov    %ecx,-0x58(%rbp)
add    %ecx,%r14d
mov    %r8d,-0x5c(%rbp)
add    %r8d,%r14d
lea    (%r14,%r9,1),%ebx
add    0x40(%rbp),%ebx
add    0x48(%rbp),%ebx
add    0x50(%rbp),%ebx
add    0x80(%rbp),%ebx
add    0x88(%rbp),%ebx
add    0x90(%rbp),%ebx
mov    %ebx,%r15d
shr    $0x1f,%r15d
add    %ebx,%r15d
sar    %r15d
add    $0x1,%r15d
movapd %xmm4,%xmm0
movsd  %xmm6,-0xa8(%rbp)
ff
movaps %xmm6,%xmm1
movsd  %xmm5,-0xc0(%rbp)
ff
movaps %xmm5,%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  0x18(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
movsd  0x18(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm3
ff
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  0x58(%rbp),%xmm0
movsd  0x20(%rbp),%xmm1
movsd  0x98(%rbp),%xmm2
movsd  0x60(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  0x58(%rbp),%xmm0
movsd  0x28(%rbp),%xmm1
movsd  0x98(%rbp),%xmm2
movsd  0x68(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x58(%rbp),%xmm0
movsd  0x30(%rbp),%xmm1
movsd  0x98(%rbp),%xmm2
movsd  0x70(%rbp),%xmm3
call   1050 <product_center_1D@plt>
movaps %xmm0,%xmm5
movsd  -0x40(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm3
movsd  -0x98(%rbp),%xmm4
call   1060 <dist2@plt>
mulsd  -0x68(%rbp),%xmm0
lea    0xf(,%r15,8),%rax
and    $0xfffffffffffffff0,%rax
mov    %rsp,%r12
sub    %rax,%r12
mov    %r12,%rsp
mov    %rsp,%r13
sub    %rax,%r13
mov    %r13,%rsp
mov    -0x90(%rbp),%rax
add    %r14d,%eax
add    $0x1,%eax
imul   $0x38,%rax,%rax
add    $0xf,%rax
and    $0xfffffffffffffff0,%rax
mov    %rsp,%r14
sub    %rax,%r14
mov    %r14,%rsp
mov    %r15d,%edi
mov    %r12,%rsi
mov    %r13,%rdx
call   1040 <Roots@plt>
xorpd  %xmm0,%xmm0
cmp    $0xffffffff,%ebx
jl     14c4 <rys_coulomb_repulsion+0x374>
xorpd  %xmm0,%xmm0
xor    %ebx,%ebx
nopl   0x0(%rax)
movsd  %xmm0,-0x30(%rbp)
movsd  (%r12,%rbx,8),%xmm1
movsd  %xmm1,-0x40(%rbp)
sub    $0x10,%rsp
movsd  0x98(%rbp),%xmm0
movsd  %xmm0,(%rsp)
movaps %xmm1,%xmm0
mov    -0xb0(%rbp),%rdi
mov    -0x58(%rbp),%esi
mov    0x40(%rbp),%edx
mov    0x80(%rbp),%ecx
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm2
ff
movsd  0x20(%rbp),%xmm3
movsd  0x60(%rbp),%xmm4
movsd  -0x38(%rbp),%xmm5
movsd  0x18(%rbp),%xmm6
movsd  0x58(%rbp),%xmm7
mov    %r14,%r8
call   1030 <Int1d@plt>
add    $0x10,%rsp
movsd  %xmm0,-0x50(%rbp)
sub    $0x10,%rsp
movsd  0x98(%rbp),%xmm0
movsd  %xmm0,(%rsp)
movsd  -0x40(%rbp),%xmm0
mov    -0xb8(%rbp),%rdi
mov    -0x5c(%rbp),%esi
mov    0x48(%rbp),%edx
mov    0x88(%rbp),%ecx
movsd  -0x70(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movsd  0x28(%rbp),%xmm3
movsd  0x68(%rbp),%xmm4
movsd  -0x38(%rbp),%xmm5
movsd  0x18(%rbp),%xmm6
movsd  0x58(%rbp),%xmm7
mov    %r14,%r8
call   1030 <Int1d@plt>
add    $0x10,%rsp
movsd  %xmm0,-0x48(%rbp)
sub    $0x10,%rsp
movsd  0x98(%rbp),%xmm0
movsd  %xmm0,(%rsp)
movsd  -0x40(%rbp),%xmm0
mov    -0x54(%rbp),%edi
mov    -0x90(%rbp),%rsi
mov    0x50(%rbp),%edx
mov    0x90(%rbp),%ecx
movsd  -0x78(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm2
ff
movsd  0x30(%rbp),%xmm3
movsd  0x70(%rbp),%xmm4
movsd  -0x38(%rbp),%xmm5
movsd  0x18(%rbp),%xmm6
movsd  0x58(%rbp),%xmm7
mov    %r14,%r8
call   1030 <Int1d@plt>
add    $0x10,%rsp
movsd  -0x48(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
mulsd  %xmm0,%xmm1
movsd  -0x30(%rbp),%xmm0
mulsd  0x0(%r13,%rbx,8),%xmm1
addsd  %xmm1,%xmm0
add    $0x1,%rbx
cmp    %rbx,%r15
jne    1370 <rys_coulomb_repulsion+0x220>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x68(%rbp),%xmm0
divsd  0xb2a(%rip),%xmm0
call   1070 <sqrt@plt>
add    %eax,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
mulsd  0x10(%rbp),%xmm0
mulsd  0x38(%rbp),%xmm0
mulsd  0x78(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define double @rys_coulomb_repulsion(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, i32 %20, i32 %21, i32 %22, double %23, double %24, double %25, double %26, double %27, i32 %28, i32 %29, i32 %30, double %31) {
%33 = add nsw i32 %5, %4
%34 = add nsw i32 %33, %6
%35 = add nsw i32 %34, %12
%36 = add i32 %35, %13
%37 = add i32 %36, %14
%38 = add i32 %37, %20
%39 = add i32 %38, %21
%40 = add i32 %39, %22
%41 = add i32 %40, %28
%42 = add i32 %41, %29
%43 = add i32 %42, %30
%44 = sdiv i32 %43, 2
%45 = add nsw i32 %44, 1
%46 = fadd double %7, %15
%47 = fadd double %23, %31
%48 = fmul double %46, %47
%49 = fadd double %46, %47
%50 = fdiv double %48, %49
%51 = tail call double @product_center_1D(double %7, double %0, double %15, double %8)
%52 = tail call double @product_center_1D(double %7, double %1, double %15, double %9)
%53 = tail call double @product_center_1D(double %7, double %2, double %15, double %10)
%54 = tail call double @product_center_1D(double %23, double %16, double %31, double %24)
%55 = tail call double @product_center_1D(double %23, double %17, double %31, double %25)
%56 = tail call double @product_center_1D(double %23, double %18, double %31, double %26)
%57 = tail call double @dist2(double %51, double %52, double %53, double %54, double %55, double %56)
%58 = fmul double %50, %57
%59 = zext i32 %45 to i64
%60 = alloca double, i64 %59
%61 = alloca double, i64 %59
%62 = add i32 %4, 1
%63 = add i32 %62, %5
%64 = add i32 %63, %6
%65 = add i32 %64, %12
%66 = add i32 %65, %13
%67 = add i32 %66, %14
%68 = zext i32 %67 to i64
%69 = mul nuw nsw i64 %68, 7
%70 = alloca double*, i64 %69
%71 = call i32 @Roots(i32 %45, double %58, double* %60, double* %61)
%72 = icmp slt i32 %43, -1
br i1 %72, label %88, label %73
73: ; preds = %32, %73
%74 = phi i64 [ %86, %73 ], [ 0, %32 ]
%75 = phi double [ %85, %73 ], [ 0.000000e+00, %32 ]
%76 = getelementptr inbounds double, double* %60, i64 %74
%77 = load double, double* %76
%78 = call double @Int1d(double %77, i32 %4, i32 %12, i32 %20, i32 %28, double %0, double %8, double %16, double %24, double %7, double %15, double %23, double %31, double** %70)
%79 = call double @Int1d(double %77, i32 %5, i32 %13, i32 %21, i32 %29, double %1, double %9, double %17, double %25, double %7, double %15, double %23, double %31, double** %70)
%80 = call double @Int1d(double %77, i32 %6, i32 %14, i32 %22, i32 %30, double %2, double %10, double %18, double %26, double %7, double %15, double %23, double %31, double** %70)
%81 = fmul double %78, %79
%82 = fmul double %81, %80
%83 = getelementptr inbounds double, double* %61, i64 %74
%84 = load double, double* %83
%85 = call double @llvm.fmuladd.f64(double %82, double %84, double %75)
%86 = add nuw nsw i64 %74, 1
%87 = icmp eq i64 %86, %59
br i1 %87, label %88, label %73
88: ; preds = %73, %32
%89 = phi double [ 0.000000e+00, %32 ], [ %85, %73 ]
%90 = fdiv double %50, 0x400921FB54442D18
%91 = call i32 @sqrt(double %90)
%92 = shl nsw i32 %91, 1
%93 = sitofp i32 %92 to double
%94 = fmul double %93, %3
%95 = fmul double %94, %11
%96 = fmul double %95, %19
%97 = fmul double %96, %27
%98 = fmul double %89, %97
ret double %98
}