#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);
double rxnparam_erfccD(double);
double sqrt(double);
void rdfdiffuse(double *r, double *rdfa, double *rdfd, int n, double step) {
  int i, j;
  double grn, sum, f0, f1, rr, r0, r1, alpha, beta, a2, erfcdif, erfcsum;
  alpha = beta = 0;
  for (i = (int)(0.9 * n); i < n; i++) {
    alpha += 1.0 / r[i] / r[i];
    beta += (rdfa[i] - 1.0) / r[i];
  }
  a2 = beta / alpha / step;
  grn = 0;
  if (r[i = 0] == 0) {
    rr = r1 = f1 = sum = 0;
    for (j = 1; j < n; j++) {
      r0 = r1;
      f0 = f1;
      r1 = r[j] / step;
      grn =
          exp(-r1 * r1 / 2.0) / (2.0 * 3.14159265358979323846 * 2.50662827462);
      f1 = (rdfa[j] - rdfa[0]) * grn;
      sum +=
          3.14159265358979323846 * (f1 - f0) * (r1 + r0) * (r1 * r1 + r0 * r0) +
          4.0 * 3.14159265358979323846 / 3.0 * (r1 * f0 - r0 * f1) *
              (r1 * r1 + r1 * r0 + r0 * r0);
    }
    sum += (1.0 - rdfa[0]) * (4.0 * 3.14159265358979323846 * r1 * grn +
                              rxnparam_erfccD(r1 / sqrt(2.0)));
    rdfd[i++] = sum + rdfa[0];
  }
  for (; i < n; i++) {
    rr = r[i] / step;
    r1 = 0;
    grn = exp(-rr * rr / 2.0) / (2.0 * 3.14159265358979323846 * 2.50662827462);
    f1 = (rdfa[0] - rdfa[i]) * grn;
    sum = 0;
    for (j = (r[0] == 0 ? 1 : 0); j < n; j++) {
      r0 = r1;
      f0 = f1;
      r1 = r[j] / step;
      grn = 1.0 / rr / r1 *
            (exp(-(rr - r1) * (rr - r1) / 2.0) -
             exp(-(rr + r1) * (rr + r1) / 2.0)) /
            (4.0 * 3.14159265358979323846 * 2.50662827462);
      f1 = (rdfa[j] - rdfa[i]) * grn;
      sum +=
          3.14159265358979323846 * (f1 - f0) * (r1 + r0) * (r1 * r1 + r0 * r0) +
          4.0 * 3.14159265358979323846 / 3.0 * (r1 * f0 - r0 * f1) *
              (r1 * r1 + r1 * r0 + r0 * r0);
    }
    erfcdif = rxnparam_erfccD((r1 - rr) / sqrt(2.0));
    erfcsum = rxnparam_erfccD((r1 + rr) / sqrt(2.0));
    sum += (1.0 - rdfa[i]) * (4.0 * 3.14159265358979323846 * r1 * grn +
                              1.0 / 2.0 * (erfcdif + erfcsum)) +
           a2 / 2.0 / rr * (erfcdif - erfcsum);
    rdfd[i] = sum + rdfa[i];
  }
  return;
}


x86 assembly (clang, -O0):
<rdfdiffuse>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
cvtsi2sdl -0x1c(%rbp),%xmm1
movsd  0xe94(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    11ed <rdfdiffuse+0xbd>
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  0xe85(%rip),%xmm0
divsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xe54(%rip),%xmm1
subsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1177 <rdfdiffuse+0x47>
movsd  -0x78(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movl   $0x0,-0x2c(%rbp)
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    147d <rdfdiffuse+0x34d>
jp     147d <rdfdiffuse+0x34d>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    13bc <rdfdiffuse+0x28c>
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  0xd56(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1040 <exp@plt>
movsd  0xd5d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm1
subsd  -0x48(%rbp),%xmm1
movsd  0xd3b(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm3
movsd  -0x60(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x68(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x60(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm4,%xmm3
addsd  %xmm1,%xmm3
movsd  0xcca(%rip),%xmm1
mulsd  %xmm3,%xmm1
movsd  -0x68(%rbp),%xmm4
movsd  -0x68(%rbp),%xmm5
movsd  -0x68(%rbp),%xmm3
mulsd  -0x60(%rbp),%xmm3
mulsd  %xmm5,%xmm4
addsd  %xmm3,%xmm4
movsd  -0x60(%rbp),%xmm3
movsd  -0x60(%rbp),%xmm5
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1252 <rdfdiffuse+0x122>
mov    -0x10(%rbp),%rax
movsd  0xc50(%rip),%xmm0
subsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xc34(%rip),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xbfd(%rip),%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xb0(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
call   1030 <rxnparam_erfccD@plt>
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm3
ff
movaps %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
addsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x2c(%rbp)
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1482 <rdfdiffuse+0x352>
mov    -0x2c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1861 <rdfdiffuse+0x731>
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  0xb32(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1040 <exp@plt>
movsd  0xb39(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
xor    %eax,%eax
mov    $0x1,%ecx
ucomisd %xmm1,%xmm0
setnp  %sil
sete   %dl
test   %sil,%dl
cmovne %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1737 <rdfdiffuse+0x607>
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xa9c(%rip),%xmm0
divsd  -0x58(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x58(%rbp),%xmm1
subsd  -0x68(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa43(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x58(%rbp),%xmm1
addsd  -0x68(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9fb(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1040 <exp@plt>
movsd  -0xc0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa07(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm1
subsd  -0x48(%rbp),%xmm1
movsd  0x9c0(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm3
movsd  -0x60(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x68(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x60(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm4,%xmm3
addsd  %xmm1,%xmm3
movsd  0x94f(%rip),%xmm1
mulsd  %xmm3,%xmm1
movsd  -0x68(%rbp),%xmm4
movsd  -0x68(%rbp),%xmm5
movsd  -0x68(%rbp),%xmm3
mulsd  -0x60(%rbp),%xmm3
mulsd  %xmm5,%xmm4
addsd  %xmm3,%xmm4
movsd  -0x60(%rbp),%xmm3
movsd  -0x60(%rbp),%xmm5
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    153d <rdfdiffuse+0x40d>
movsd  -0x68(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0x8b7(%rip),%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
call   1030 <rxnparam_erfccD@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0x87c(%rip),%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
call   1030 <rxnparam_erfccD@plt>
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  0x85b(%rip),%xmm0
subsd  (%rax,%rcx,8),%xmm0
movsd  0x846(%rip),%xmm2
mulsd  -0x68(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
movsd  -0x88(%rbp),%xmm4
ff
addsd  -0x90(%rbp),%xmm4
ff
movsd  0x83c(%rip),%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x80(%rbp),%xmm1
movsd  0x803(%rip),%xmm3
divsd  %xmm3,%xmm1
divsd  -0x58(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm3
ff
subsd  -0x90(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1482 <rdfdiffuse+0x352>
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rdfdiffuse>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %ecx,%r15d
cvtsi2sd %ecx,%xmm1
mulsd  0xec3(%rip),%xmm1
movapd %xmm0,%xmm9
mov    %rdx,0x38(%rsp)
mov    %rsi,%rbx
mov    %rdi,%r12
cvttsd2si %xmm1,%eax
cmp    %ecx,%eax
jge    11b6 <rdfdiffuse+0x96>
cltq
movslq %r15d,%rcx
xorpd  %xmm7,%xmm7
movsd  0xeaa(%rip),%xmm0
movsd  0xeaa(%rip),%xmm1
xorpd  %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%r12,%rax,8),%xmm3
movapd %xmm0,%xmm4
divsd  %xmm3,%xmm4
divsd  %xmm3,%xmm4
movsd  (%rbx,%rax,8),%xmm5
addsd  %xmm1,%xmm5
addsd  %xmm4,%xmm2
divsd  %xmm3,%xmm5
addsd  %xmm5,%xmm7
add    $0x1,%rax
cmp    %rax,%rcx
jne    1180 <rdfdiffuse+0x60>
divsd  %xmm2,%xmm7
jmp    11be <rdfdiffuse+0x9e>
movsd  0xe4a(%rip),%xmm7
movsd  (%r12),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movsd  %xmm9,0x28(%rsp)
jne    1308 <rdfdiffuse+0x1e8>
jp     1308 <rdfdiffuse+0x1e8>
movsd  %xmm7,0x30(%rsp)
cmp    $0x1,%r15d
jle    1318 <rdfdiffuse+0x1f8>
mov    %r15d,%r14d
xorpd  %xmm1,%xmm1
mov    $0x1,%ebp
xorpd  %xmm2,%xmm2
xorpd  %xmm3,%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  %xmm2,0x20(%rsp)
movsd  %xmm1,0x18(%rsp)
movsd  %xmm3,(%rsp)
movsd  (%r12,%rbp,8),%xmm1
divsd  %xmm9,%xmm1
movsd  %xmm1,0x10(%rsp)
mulsd  %xmm1,%xmm1
movsd  %xmm1,0x8(%rsp)
movapd %xmm1,%xmm0
mulsd  0xdd8(%rip),%xmm0
call   1040 <exp@plt>
movsd  0x28(%rsp),%xmm9
divsd  0xdcc(%rip),%xmm0
movsd  (%rbx,%rbp,8),%xmm2
movsd  (%rbx),%xmm8
subsd  %xmm8,%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm2,%xmm3
movsd  0x20(%rsp),%xmm1
subsd  %xmm1,%xmm3
mulsd  0xdab(%rip),%xmm3
movsd  0x18(%rsp),%xmm7
movapd %xmm7,%xmm4
movsd  0x10(%rsp),%xmm10
addsd  %xmm10,%xmm4
mulsd  %xmm3,%xmm4
movapd %xmm7,%xmm3
mulsd  %xmm7,%xmm3
movsd  0x8(%rsp),%xmm6
movapd %xmm6,%xmm5
addsd  %xmm3,%xmm5
mulsd  %xmm4,%xmm5
movapd %xmm2,%xmm4
mulsd  %xmm7,%xmm4
mulsd  %xmm10,%xmm1
subsd  %xmm4,%xmm1
movapd %xmm10,%xmm4
mulsd  0xd61(%rip),%xmm1
mulsd  %xmm10,%xmm7
addsd  %xmm6,%xmm7
addsd  %xmm3,%xmm7
movsd  (%rsp),%xmm3
mulsd  %xmm1,%xmm7
addsd  %xmm5,%xmm7
addsd  %xmm7,%xmm3
add    $0x1,%rbp
movapd %xmm4,%xmm1
cmp    %rbp,%r14
jne    1210 <rdfdiffuse+0xf0>
jmp    1329 <rdfdiffuse+0x209>
xor    %eax,%eax
cmp    %r15d,%eax
jl     13a1 <rdfdiffuse+0x281>
jmp    1694 <rdfdiffuse+0x574>
movsd  (%rbx),%xmm8
xorpd  %xmm3,%xmm3
xorpd  %xmm4,%xmm4
xorpd  %xmm0,%xmm0
movsd  %xmm3,(%rsp)
movsd  0xcda(%rip),%xmm1
subsd  %xmm8,%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0xcf7(%rip),%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
divsd  0xce9(%rip),%xmm4
movapd %xmm4,%xmm0
call   1030 <rxnparam_erfccD@plt>
movsd  0x28(%rsp),%xmm9
addsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
addsd  (%rsp),%xmm0
addsd  (%rbx),%xmm0
mov    0x38(%rsp),%rax
movsd  %xmm0,(%rax)
mov    $0x1,%eax
movsd  0x30(%rsp),%xmm7
cmp    %r15d,%eax
jge    1694 <rdfdiffuse+0x574>
divsd  %xmm9,%xmm7
mulsd  0xca2(%rip),%xmm7
mov    %eax,%ebp
mov    %r15d,%r13d
movsd  %xmm7,0x30(%rsp)
jmp    149c <rdfdiffuse+0x37c>
xchg   %ax,%ax
xorpd  %xmm3,%xmm3
movsd  (%rsp),%xmm1
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  %xmm2,0x10(%rsp)
movsd  %xmm3,0x8(%rsp)
movapd %xmm3,%xmm0
subsd  %xmm1,%xmm0
movsd  0xc59(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1030 <rxnparam_erfccD@plt>
movsd  %xmm0,0x20(%rsp)
movsd  (%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
divsd  0xc37(%rip),%xmm0
call   1030 <rxnparam_erfccD@plt>
movsd  (%rbx,%rbp,8),%xmm1
movsd  0xbed(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  0x8(%rsp),%xmm3
mulsd  0xc0b(%rip),%xmm3
mulsd  0x10(%rsp),%xmm3
movapd %xmm3,%xmm5
movsd  0x20(%rsp),%xmm4
movapd %xmm4,%xmm3
addsd  %xmm0,%xmm3
mulsd  0xbfb(%rip),%xmm3
addsd  %xmm5,%xmm3
mulsd  %xmm2,%xmm3
movsd  0x30(%rsp),%xmm2
divsd  (%rsp),%xmm2
subsd  %xmm0,%xmm4
mulsd  %xmm2,%xmm4
addsd  %xmm3,%xmm4
addsd  0x18(%rsp),%xmm4
addsd  %xmm1,%xmm4
mov    0x38(%rsp),%rax
movsd  %xmm4,(%rax,%rbp,8)
add    $0x1,%rbp
cmp    %r13,%rbp
movsd  0x28(%rsp),%xmm9
je     1694 <rdfdiffuse+0x574>
movsd  (%r12,%rbp,8),%xmm0
divsd  %xmm9,%xmm0
movsd  %xmm0,(%rsp)
mulsd  %xmm0,%xmm0
mulsd  0xb68(%rip),%xmm0
call   1040 <exp@plt>
movapd %xmm0,%xmm2
divsd  0xb5f(%rip),%xmm2
movsd  (%r12),%xmm0
xorpd  %xmm1,%xmm1
cmpeqsd %xmm0,%xmm1
movq   %xmm1,%rax
and    $0x1,%eax
cmp    %r15d,%eax
jge    13c0 <rdfdiffuse+0x2a0>
xorpd  %xmm4,%xmm4
cmpeqsd %xmm4,%xmm0
movq   %xmm0,%r14
movsd  (%rbx),%xmm0
subsd  (%rbx,%rbp,8),%xmm0
and    $0x1,%r14d
mulsd  %xmm0,%xmm2
movsd  0xb00(%rip),%xmm0
movsd  (%rsp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x40(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
nopl   0x0(%rax)
movsd  %xmm4,0x50(%rsp)
movsd  %xmm2,0x20(%rsp)
movsd  (%r12,%r14,8),%xmm0
divsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x40(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x48(%rsp)
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
movapd 0xaed(%rip),%xmm2
xorpd  %xmm2,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xacd(%rip),%xmm1
mulsd  %xmm1,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm1
addsd  0x8(%rsp),%xmm1
movapd %xmm1,%xmm0
xorpd  0xab7(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  0xa9b(%rip),%xmm0
call   1040 <exp@plt>
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x48(%rsp),%xmm1
divsd  0xa86(%rip),%xmm1
movsd  (%rbx,%r14,8),%xmm0
subsd  (%rbx,%rbp,8),%xmm0
movsd  %xmm1,0x10(%rsp)
mulsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
movsd  0x20(%rsp),%xmm6
subsd  %xmm6,%xmm1
mulsd  0xa33(%rip),%xmm1
movsd  0x50(%rsp),%xmm7
movapd %xmm7,%xmm2
movsd  0x8(%rsp),%xmm4
addsd  %xmm4,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm7,%xmm1
mulsd  %xmm7,%xmm1
movapd %xmm4,%xmm3
movapd %xmm4,%xmm5
mulsd  %xmm4,%xmm3
movapd %xmm0,%xmm4
mulsd  %xmm7,%xmm4
mulsd  %xmm5,%xmm7
addsd  %xmm3,%xmm7
addsd  %xmm1,%xmm3
mulsd  %xmm2,%xmm3
movapd %xmm6,%xmm2
mulsd  %xmm5,%xmm2
subsd  %xmm4,%xmm2
mulsd  0x9e3(%rip),%xmm2
addsd  %xmm1,%xmm7
movsd  (%rsp),%xmm1
mulsd  %xmm2,%xmm7
addsd  %xmm3,%xmm7
movapd %xmm5,%xmm3
movsd  0x18(%rsp),%xmm2
addsd  %xmm7,%xmm2
movsd  %xmm2,0x18(%rsp)
add    $0x1,%r14
movapd %xmm5,%xmm4
movapd %xmm0,%xmm2
cmp    %r14,%r13
jne    1530 <rdfdiffuse+0x410>
jmp    13d9 <rdfdiffuse+0x2b9>
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @rdfdiffuse(double* %0, double* %1, double* %2, i32 %3, double %4) {
%6 = alloca double*
%7 = alloca double*
%8 = alloca double*
%9 = alloca i32
%10 = alloca double
%11 = alloca i32
%12 = alloca i32
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
store double* %0, double** %6
store double* %1, double** %7
store double* %2, double** %8
store i32 %3, i32* %9
store double %4, double* %10
store double 0.000000e+00, double* %21
store double 0.000000e+00, double* %20
%25 = load i32, i32* %9
%26 = sitofp i32 %25 to double
%27 = fmul double 9.000000e-01, %26
%28 = fptosi double %27 to i32
store i32 %28, i32* %11
br label %29
29: ; preds = %62, %5
%30 = load i32, i32* %11
%31 = load i32, i32* %9
%32 = icmp slt i32 %30, %31
br i1 %32, label %33, label %65
33: ; preds = %29
%34 = load double*, double** %6
%35 = load i32, i32* %11
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds double, double* %34, i64 %36
%38 = load double, double* %37
%39 = fdiv double 1.000000e+00, %38
%40 = load double*, double** %6
%41 = load i32, i32* %11
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds double, double* %40, i64 %42
%44 = load double, double* %43
%45 = fdiv double %39, %44
%46 = load double, double* %20
%47 = fadd double %46, %45
store double %47, double* %20
%48 = load double*, double** %7
%49 = load i32, i32* %11
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds double, double* %48, i64 %50
%52 = load double, double* %51
%53 = fsub double %52, 1.000000e+00
%54 = load double*, double** %6
%55 = load i32, i32* %11
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds double, double* %54, i64 %56
%58 = load double, double* %57
%59 = fdiv double %53, %58
%60 = load double, double* %21
%61 = fadd double %60, %59
store double %61, double* %21
br label %62
62: ; preds = %33
%63 = load i32, i32* %11
%64 = add nsw i32 %63, 1
store i32 %64, i32* %11
br label %29
65: ; preds = %29
%66 = load double, double* %21
%67 = load double, double* %20
%68 = fdiv double %66, %67
%69 = load double, double* %10
%70 = fdiv double %68, %69
store double %70, double* %22
store double 0.000000e+00, double* %13
%71 = load double*, double** %6
store i32 0, i32* %11
%72 = getelementptr inbounds double, double* %71, i64 0
%73 = load double, double* %72
%74 = fcmp oeq double %73, 0.000000e+00
br i1 %74, label %75, label %171
75: ; preds = %65
store double 0.000000e+00, double* %14
store double 0.000000e+00, double* %16
store double 0.000000e+00, double* %19
store double 0.000000e+00, double* %17
store i32 1, i32* %12
br label %76
76: ; preds = %143, %75
%77 = load i32, i32* %12
%78 = load i32, i32* %9
%79 = icmp slt i32 %77, %78
br i1 %79, label %80, label %146
80: ; preds = %76
%81 = load double, double* %19
store double %81, double* %18
%82 = load double, double* %16
store double %82, double* %15
%83 = load double*, double** %6
%84 = load i32, i32* %12
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds double, double* %83, i64 %85
%87 = load double, double* %86
%88 = load double, double* %10
%89 = fdiv double %87, %88
store double %89, double* %19
%90 = load double, double* %19
%91 = fneg double %90
%92 = load double, double* %19
%93 = fmul double %91, %92
%94 = fdiv double %93, 2.000000e+00
%95 = call double @exp(double %94)
%96 = fdiv double %95, 0x402F7FCCDFF2ACAF
store double %96, double* %13
%97 = load double*, double** %7
%98 = load i32, i32* %12
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds double, double* %97, i64 %99
%101 = load double, double* %100
%102 = load double*, double** %7
%103 = getelementptr inbounds double, double* %102, i64 0
%104 = load double, double* %103
%105 = fsub double %101, %104
%106 = load double, double* %13
%107 = fmul double %105, %106
store double %107, double* %16
%108 = load double, double* %16
%109 = load double, double* %15
%110 = fsub double %108, %109
%111 = fmul double 0x400921FB54442D18, %110
%112 = load double, double* %19
%113 = load double, double* %18
%114 = fadd double %112, %113
%115 = fmul double %111, %114
%116 = load double, double* %19
%117 = load double, double* %19
%118 = load double, double* %18
%119 = load double, double* %18
%120 = fmul double %118, %119
%121 = call double @llvm.fmuladd.f64(double %116, double %117, double %120)
%122 = load double, double* %19
%123 = load double, double* %15
%124 = load double, double* %18
%125 = load double, double* %16
%126 = fmul double %124, %125
%127 = fneg double %126
%128 = call double @llvm.fmuladd.f64(double %122, double %123, double %127)
%129 = fmul double 0x4010C152382D7365, %128
%130 = load double, double* %19
%131 = load double, double* %19
%132 = load double, double* %19
%133 = load double, double* %18
%134 = fmul double %132, %133
%135 = call double @llvm.fmuladd.f64(double %130, double %131, double %134)
%136 = load double, double* %18
%137 = load double, double* %18
%138 = call double @llvm.fmuladd.f64(double %136, double %137, double %135)
%139 = fmul double %129, %138
%140 = call double @llvm.fmuladd.f64(double %115, double %121, double %139)
%141 = load double, double* %14
%142 = fadd double %141, %140
store double %142, double* %14
br label %143
143: ; preds = %80
%144 = load i32, i32* %12
%145 = add nsw i32 %144, 1
store i32 %145, i32* %12
br label %76
146: ; preds = %76
%147 = load double*, double** %7
%148 = getelementptr inbounds double, double* %147, i64 0
%149 = load double, double* %148
%150 = fsub double 1.000000e+00, %149
%151 = load double, double* %19
%152 = fmul double 0x402921FB54442D18, %151
%153 = load double, double* %13
%154 = load double, double* %19
%155 = call double @sqrt(double 2.000000e+00)
%156 = fdiv double %154, %155
%157 = call double @rxnparam_erfccD(double %156)
%158 = call double @llvm.fmuladd.f64(double %152, double %153, double %157)
%159 = load double, double* %14
%160 = call double @llvm.fmuladd.f64(double %150, double %158, double %159)
store double %160, double* %14
%161 = load double, double* %14
%162 = load double*, double** %7
%163 = getelementptr inbounds double, double* %162, i64 0
%164 = load double, double* %163
%165 = fadd double %161, %164
%166 = load double*, double** %8
%167 = load i32, i32* %11
%168 = add nsw i32 %167, 1
store i32 %168, i32* %11
%169 = sext i32 %167 to i64
%170 = getelementptr inbounds double, double* %166, i64 %169
store double %165, double* %170
br label %171
171: ; preds = %146, %65
br label %172
172: ; preds = %349, %171
%173 = load i32, i32* %11
%174 = load i32, i32* %9
%175 = icmp slt i32 %173, %174
br i1 %175, label %176, label %352
176: ; preds = %172
%177 = load double*, double** %6
%178 = load i32, i32* %11
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds double, double* %177, i64 %179
%181 = load double, double* %180
%182 = load double, double* %10
%183 = fdiv double %181, %182
store double %183, double* %17
store double 0.000000e+00, double* %19
%184 = load double, double* %17
%185 = fneg double %184
%186 = load double, double* %17
%187 = fmul double %185, %186
%188 = fdiv double %187, 2.000000e+00
%189 = call double @exp(double %188)
%190 = fdiv double %189, 0x402F7FCCDFF2ACAF
store double %190, double* %13
%191 = load double*, double** %7
%192 = getelementptr inbounds double, double* %191, i64 0
%193 = load double, double* %192
%194 = load double*, double** %7
%195 = load i32, i32* %11
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds double, double* %194, i64 %196
%198 = load double, double* %197
%199 = fsub double %193, %198
%200 = load double, double* %13
%201 = fmul double %199, %200
store double %201, double* %16
store double 0.000000e+00, double* %14
%202 = load double*, double** %6
%203 = getelementptr inbounds double, double* %202, i64 0
%204 = load double, double* %203
%205 = fcmp oeq double %204, 0.000000e+00
%206 = zext i1 %205 to i64
%207 = select i1 %205, i32 1, i32 0
store i32 %207, i32* %12
br label %208
208: ; preds = %297, %176
%209 = load i32, i32* %12
%210 = load i32, i32* %9
%211 = icmp slt i32 %209, %210
br i1 %211, label %212, label %300
212: ; preds = %208
%213 = load double, double* %19
store double %213, double* %18
%214 = load double, double* %16
store double %214, double* %15
%215 = load double*, double** %6
%216 = load i32, i32* %12
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds double, double* %215, i64 %217
%219 = load double, double* %218
%220 = load double, double* %10
%221 = fdiv double %219, %220
store double %221, double* %19
%222 = load double, double* %17
%223 = fdiv double 1.000000e+00, %222
%224 = load double, double* %19
%225 = fdiv double %223, %224
%226 = load double, double* %17
%227 = load double, double* %19
%228 = fsub double %226, %227
%229 = fneg double %228
%230 = load double, double* %17
%231 = load double, double* %19
%232 = fsub double %230, %231
%233 = fmul double %229, %232
%234 = fdiv double %233, 2.000000e+00
%235 = call double @exp(double %234)
%236 = load double, double* %17
%237 = load double, double* %19
%238 = fadd double %236, %237
%239 = fneg double %238
%240 = load double, double* %17
%241 = load double, double* %19
%242 = fadd double %240, %241
%243 = fmul double %239, %242
%244 = fdiv double %243, 2.000000e+00
%245 = call double @exp(double %244)
%246 = fsub double %235, %245
%247 = fmul double %225, %246
%248 = fdiv double %247, 0x403F7FCCDFF2ACAF
store double %248, double* %13
%249 = load double*, double** %7
%250 = load i32, i32* %12
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds double, double* %249, i64 %251
%253 = load double, double* %252
%254 = load double*, double** %7
%255 = load i32, i32* %11
%256 = sext i32 %255 to i64
%257 = getelementptr inbounds double, double* %254, i64 %256
%258 = load double, double* %257
%259 = fsub double %253, %258
%260 = load double, double* %13
%261 = fmul double %259, %260
store double %261, double* %16
%262 = load double, double* %16
%263 = load double, double* %15
%264 = fsub double %262, %263
%265 = fmul double 0x400921FB54442D18, %264
%266 = load double, double* %19
%267 = load double, double* %18
%268 = fadd double %266, %267
%269 = fmul double %265, %268
%270 = load double, double* %19
%271 = load double, double* %19
%272 = load double, double* %18
%273 = load double, double* %18
%274 = fmul double %272, %273
%275 = call double @llvm.fmuladd.f64(double %270, double %271, double %274)
%276 = load double, double* %19
%277 = load double, double* %15
%278 = load double, double* %18
%279 = load double, double* %16
%280 = fmul double %278, %279
%281 = fneg double %280
%282 = call double @llvm.fmuladd.f64(double %276, double %277, double %281)
%283 = fmul double 0x4010C152382D7365, %282
%284 = load double, double* %19
%285 = load double, double* %19
%286 = load double, double* %19
%287 = load double, double* %18
%288 = fmul double %286, %287
%289 = call double @llvm.fmuladd.f64(double %284, double %285, double %288)
%290 = load double, double* %18
%291 = load double, double* %18
%292 = call double @llvm.fmuladd.f64(double %290, double %291, double %289)
%293 = fmul double %283, %292
%294 = call double @llvm.fmuladd.f64(double %269, double %275, double %293)
%295 = load double, double* %14
%296 = fadd double %295, %294
store double %296, double* %14
br label %297
297: ; preds = %212
%298 = load i32, i32* %12
%299 = add nsw i32 %298, 1
store i32 %299, i32* %12
br label %208
300: ; preds = %208
%301 = load double, double* %19
%302 = load double, double* %17
%303 = fsub double %301, %302
%304 = call double @sqrt(double 2.000000e+00)
%305 = fdiv double %303, %304
%306 = call double @rxnparam_erfccD(double %305)
store double %306, double* %23
%307 = load double, double* %19
%308 = load double, double* %17
%309 = fadd double %307, %308
%310 = call double @sqrt(double 2.000000e+00)
%311 = fdiv double %309, %310
%312 = call double @rxnparam_erfccD(double %311)
store double %312, double* %24
%313 = load double*, double** %7
%314 = load i32, i32* %11
%315 = sext i32 %314 to i64
%316 = getelementptr inbounds double, double* %313, i64 %315
%317 = load double, double* %316
%318 = fsub double 1.000000e+00, %317
%319 = load double, double* %19
%320 = fmul double 0x402921FB54442D18, %319
%321 = load double, double* %13
%322 = load double, double* %23
%323 = load double, double* %24
%324 = fadd double %322, %323
%325 = fmul double 5.000000e-01, %324
%326 = call double @llvm.fmuladd.f64(double %320, double %321, double %325)
%327 = load double, double* %22
%328 = fdiv double %327, 2.000000e+00
%329 = load double, double* %17
%330 = fdiv double %328, %329
%331 = load double, double* %23
%332 = load double, double* %24
%333 = fsub double %331, %332
%334 = fmul double %330, %333
%335 = call double @llvm.fmuladd.f64(double %318, double %326, double %334)
%336 = load double, double* %14
%337 = fadd double %336, %335
store double %337, double* %14
%338 = load double, double* %14
%339 = load double*, double** %7
%340 = load i32, i32* %11
%341 = sext i32 %340 to i64
%342 = getelementptr inbounds double, double* %339, i64 %341
%343 = load double, double* %342
%344 = fadd double %338, %343
%345 = load double*, double** %8
%346 = load i32, i32* %11
%347 = sext i32 %346 to i64
%348 = getelementptr inbounds double, double* %345, i64 %347
store double %344, double* %348
br label %349
349: ; preds = %300
%350 = load i32, i32* %11
%351 = add nsw i32 %350, 1
store i32 %351, i32* %11
br label %172
352: ; preds = %172
ret void
}

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