#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(int /*<<< orphan*/);
double log(double);
int /*<<< orphan*/ rec_interp1d(double, double, double *, unsigned int, double);
void fplus_from_fminus(double fplus[311], double fplus_Ly[],
                       double **logfminus_hist, double *logfminus_Ly_hist[],
                       double TR, double zstart, double dlna, unsigned iz,
                       double z, double Eb_tab[311]) {
  unsigned b;
  double ainv, lna_start, zp1;
  zp1 = 1. + z;
  lna_start = -log(1. + zstart);
  for (b = 0; b < 140 - 1; b++) {
    ainv = zp1 * Eb_tab[b + 1] / Eb_tab[b];
    fplus[b] = exp(
        rec_interp1d(lna_start, dlna, logfminus_hist[b + 1], iz, -log(ainv)));
  }
  b = 140 - 1;
  ainv = zp1 * 10.198714553953742 / Eb_tab[b];
  fplus[b] =
      exp(rec_interp1d(lna_start, dlna, logfminus_Ly_hist[0], iz, -log(ainv)));
  b = 140;
  ainv = zp1 * Eb_tab[b] / 10.198714553953742;
  fplus_Ly[0] =
      exp(rec_interp1d(lna_start, dlna, logfminus_hist[b], iz, -log(ainv)));
  for (b = 140; b < 271 - 1; b++) {
    ainv = zp1 * Eb_tab[b + 1] / Eb_tab[b];
    fplus[b] = exp(
        rec_interp1d(lna_start, dlna, logfminus_hist[b + 1], iz, -log(ainv)));
  }
  b = 271 - 1;
  ainv = zp1 * 12.087365397278509 / Eb_tab[b];
  fplus[b] =
      exp(rec_interp1d(lna_start, dlna, logfminus_Ly_hist[1], iz, -log(ainv)));
  b = 271;
  ainv = zp1 * Eb_tab[b] / 12.087365397278509;
  fplus_Ly[1] =
      exp(rec_interp1d(lna_start, dlna, logfminus_hist[b], iz, -log(ainv)));
  for (b = 271; b < 311 - 1; b++) {
    ainv = zp1 * Eb_tab[b + 1] / Eb_tab[b];
    fplus[b] = exp(
        rec_interp1d(lna_start, dlna, logfminus_hist[b + 1], iz, -log(ainv)));
  }
  b = 311 - 1;
  ainv = zp1 * 12.748393192442178 / Eb_tab[b];
  fplus[b] =
      exp(rec_interp1d(lna_start, dlna, logfminus_Ly_hist[2], iz, -log(ainv)));
}


x86 assembly (clang, -O0):
<fplus_from_fminus>:
push   %rbp
mov    %rsp,%rbp
sub    $0x170,%rsp
mov    %rdi,-0x8(%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)
movsd  %xmm3,-0x48(%rbp)
mov    %r9,-0x50(%rbp)
movsd  0xe91(%rip),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe7f(%rip),%xmm0
addsd  -0x30(%rbp),%xmm0
call   1050 <log@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x0,-0x54(%rbp)
cmpl   $0x8b,-0x54(%rbp)
jae    1277 <fplus_from_fminus+0x147>
movsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
divsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x88(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x7c(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1050 <log@plt>
movsd  -0x90(%rbp),%xmm1
ff
mov    -0x88(%rbp),%rdi
mov    -0x7c(%rbp),%esi
movaps %xmm0,%xmm2
movsd  -0x78(%rbp),%xmm0
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    -0x8(%rbp),%rax
mov    -0x54(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    11ae <fplus_from_fminus+0x7e>
movl   $0x8b,-0x54(%rbp)
movsd  0xd82(%rip),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
divsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0xc8(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0xbc(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1050 <log@plt>
movsd  -0xd0(%rbp),%xmm1
ff
mov    -0xc8(%rbp),%rdi
mov    -0xbc(%rbp),%esi
movaps %xmm0,%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    -0x8(%rbp),%rax
mov    -0x54(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x8c,-0x54(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
mulsd  (%rax,%rcx,8),%xmm0
movsd  0xcc2(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    -0x54(%rbp),%ecx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0xa8(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x9c(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1050 <log@plt>
movsd  -0xb0(%rbp),%xmm1
ff
mov    -0xa8(%rbp),%rdi
mov    -0x9c(%rbp),%esi
movaps %xmm0,%xmm2
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x8c,-0x54(%rbp)
cmpl   $0x10e,-0x54(%rbp)
jae    14b5 <fplus_from_fminus+0x385>
movsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
divsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0xe8(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0xdc(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1050 <log@plt>
movsd  -0xf0(%rbp),%xmm1
ff
mov    -0xe8(%rbp),%rdi
mov    -0xdc(%rbp),%esi
movaps %xmm0,%xmm2
movsd  -0xd8(%rbp),%xmm0
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    -0x8(%rbp),%rax
mov    -0x54(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13e0 <fplus_from_fminus+0x2b0>
movl   $0x10e,-0x54(%rbp)
movsd  0xb4c(%rip),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
divsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
mov    %rax,-0x128(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x11c(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1050 <log@plt>
movsd  -0x130(%rbp),%xmm1
ff
mov    -0x128(%rbp),%rdi
mov    -0x11c(%rbp),%esi
movaps %xmm0,%xmm2
movsd  -0x118(%rbp),%xmm0
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    -0x8(%rbp),%rax
mov    -0x54(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x10f,-0x54(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
mulsd  (%rax,%rcx,8),%xmm0
movsd  0xa8b(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    -0x54(%rbp),%ecx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x108(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0xfc(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1050 <log@plt>
movsd  -0x110(%rbp),%xmm1
ff
mov    -0x108(%rbp),%rdi
mov    -0xfc(%rbp),%esi
movaps %xmm0,%xmm2
movsd  -0xf8(%rbp),%xmm0
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movl   $0x10f,-0x54(%rbp)
cmpl   $0x136,-0x54(%rbp)
jae    16f5 <fplus_from_fminus+0x5c5>
movsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
divsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x148(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x13c(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1050 <log@plt>
movsd  -0x150(%rbp),%xmm1
ff
mov    -0x148(%rbp),%rdi
mov    -0x13c(%rbp),%esi
movaps %xmm0,%xmm2
movsd  -0x138(%rbp),%xmm0
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    -0x8(%rbp),%rax
mov    -0x54(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1620 <fplus_from_fminus+0x4f0>
movl   $0x136,-0x54(%rbp)
movsd  0x914(%rip),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x54(%rbp),%ecx
divsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
mov    %rax,-0x168(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x15c(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1050 <log@plt>
movsd  -0x170(%rbp),%xmm1
ff
mov    -0x168(%rbp),%rdi
mov    -0x15c(%rbp),%esi
movaps %xmm0,%xmm2
movsd  -0x158(%rbp),%xmm0
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    -0x8(%rbp),%rax
mov    -0x54(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
add    $0x170,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fplus_from_fminus>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r9,%r14
mov    %r8d,%r12d
movsd  %xmm2,0x8(%rsp)
mov    %rcx,0x20(%rsp)
mov    %rdx,%r15
mov    %rsi,0x28(%rsp)
mov    %rdi,0x30(%rsp)
movsd  0xe9c(%rip),%xmm0
addsd  %xmm0,%xmm3
movsd  %xmm3,(%rsp)
addsd  %xmm1,%xmm0
call   1050 <log@plt>
xorpd  0xea2(%rip),%xmm0
movapd %xmm0,0x10(%rsp)
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
lea    0x1(%rbx),%rbp
movsd  0x8(%r14,%rbx,8),%xmm0
mulsd  (%rsp),%xmm0
divsd  (%r14,%rbx,8),%xmm0
mov    0x8(%r15,%rbx,8),%r13
call   1050 <log@plt>
movapd %xmm0,%xmm2
xorpd  0xe64(%rip),%xmm2
movapd 0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mov    %r13,%rdi
mov    %r12d,%esi
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    0x30(%rsp),%rax
movsd  %xmm0,(%rax,%rbx,8)
mov    %rbp,%rbx
cmp    $0x8b,%rbp
jne    1190 <fplus_from_fminus+0x60>
movsd  (%rsp),%xmm0
mulsd  0xe0b(%rip),%xmm0
divsd  0x458(%r14),%xmm0
mov    0x20(%rsp),%rax
mov    (%rax),%r13
call   1050 <log@plt>
movapd %xmm0,%xmm2
xorpd  0xe01(%rip),%xmm2
movaps 0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mov    %r13,%rdi
mov    %r12d,%esi
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    0x30(%rsp),%rbx
movsd  %xmm0,0x458(%rbx)
movsd  0x460(%r14),%xmm0
mulsd  (%rsp),%xmm0
divsd  0xda9(%rip),%xmm0
mov    0x460(%r15),%r13
call   1050 <log@plt>
movapd %xmm0,%xmm2
xorpd  0xda9(%rip),%xmm2
movaps 0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mov    %r13,%rdi
mov    %rbx,%r13
mov    %r12d,%esi
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    0x28(%rsp),%rax
movsd  %xmm0,(%rax)
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  0x468(%r14,%rbx,8),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x460(%r14,%rbx,8),%xmm0
mov    0x468(%r15,%rbx,8),%rbp
call   1050 <log@plt>
movapd %xmm0,%xmm2
xorpd  0xd3e(%rip),%xmm2
movaps 0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mov    %rbp,%rdi
mov    %r12d,%esi
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
movsd  %xmm0,0x460(%r13,%rbx,8)
add    $0x1,%rbx
cmp    $0x82,%rbx
jne    12b0 <fplus_from_fminus+0x180>
movsd  (%rsp),%xmm0
mulsd  0xced(%rip),%xmm0
divsd  0x870(%r14),%xmm0
mov    0x20(%rsp),%rax
mov    0x8(%rax),%rbp
call   1050 <log@plt>
movapd %xmm0,%xmm2
movapd 0xcda(%rip),%xmm0
xorpd  %xmm0,%xmm2
movaps 0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mov    %rbp,%rdi
mov    %r12d,%esi
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
movsd  %xmm0,0x870(%r13)
movsd  0x878(%r14),%xmm0
mulsd  (%rsp),%xmm0
divsd  0xc8a(%rip),%xmm0
mov    0x878(%r15),%rbp
call   1050 <log@plt>
movapd 0xc86(%rip),%xmm2
xorpd  %xmm0,%xmm2
movaps 0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mov    %rbp,%rdi
mov    %r12d,%esi
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
mov    0x28(%rsp),%rax
movsd  %xmm0,0x8(%rax)
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
movsd  0x880(%r14,%rbx,8),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x878(%r14,%rbx,8),%xmm0
mov    0x880(%r15,%rbx,8),%rbp
call   1050 <log@plt>
movapd %xmm0,%xmm2
xorpd  0xc1e(%rip),%xmm2
movaps 0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mov    %rbp,%rdi
mov    %r12d,%esi
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
movsd  %xmm0,0x878(%r13,%rbx,8)
add    $0x1,%rbx
cmp    $0x27,%rbx
jne    13d0 <fplus_from_fminus+0x2a0>
movsd  (%rsp),%xmm0
mulsd  0xbd8(%rip),%xmm0
divsd  0x9b0(%r14),%xmm0
mov    0x20(%rsp),%rax
mov    0x10(%rax),%rbx
call   1050 <log@plt>
movapd %xmm0,%xmm2
xorpd  0xbbd(%rip),%xmm2
movaps 0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mov    %rbx,%rdi
mov    %r12d,%esi
call   1030 <rec_interp1d@plt>
mov    %eax,%edi
call   1040 <exp@plt>
movsd  %xmm0,0x9b0(%r13)
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @fplus_from_fminus(double* nocapture writeonly %0, double* nocapture writeonly %1, double** nocapture %2, double** nocapture %3, double %4, double %5, double %6, i32 %7, double %8, double* nocapture %9) {
%11 = fadd double %8, 1.000000e+00
%12 = fadd double %5, 1.000000e+00
%13 = tail call double @log(double %12)
%14 = fneg double %13
br label %15
15: ; preds = %10, %15
%16 = phi i64 [ 0, %10 ], [ %17, %15 ]
%17 = add nuw nsw i64 %16, 1
%18 = getelementptr inbounds double, double* %9, i64 %17
%19 = load double, double* %18
%20 = fmul double %11, %19
%21 = getelementptr inbounds double, double* %9, i64 %16
%22 = load double, double* %21
%23 = fdiv double %20, %22
%24 = getelementptr inbounds double*, double** %2, i64 %17
%25 = load double*, double** %24
%26 = tail call double @log(double %23)
%27 = fneg double %26
%28 = tail call i32 @rec_interp1d(double %14, double %6, double* %25, i32 %7, double %27)
%29 = tail call double @exp(i32 %28)
%30 = getelementptr inbounds double, double* %0, i64 %16
store double %29, double* %30
%31 = icmp eq i64 %17, 139
br i1 %31, label %32, label %15
32: ; preds = %15
%33 = fmul double %11, 0x402465BDE9FCF0EC
%34 = getelementptr inbounds double, double* %9, i64 139
%35 = load double, double* %34
%36 = fdiv double %33, %35
%37 = load double*, double** %3
%38 = tail call double @log(double %36)
%39 = fneg double %38
%40 = tail call i32 @rec_interp1d(double %14, double %6, double* %37, i32 %7, double %39)
%41 = tail call double @exp(i32 %40)
%42 = getelementptr inbounds double, double* %0, i64 139
store double %41, double* %42
%43 = getelementptr inbounds double, double* %9, i64 140
%44 = load double, double* %43
%45 = fmul double %11, %44
%46 = fdiv double %45, 0x402465BDE9FCF0EC
%47 = getelementptr inbounds double*, double** %2, i64 140
%48 = load double*, double** %47
%49 = tail call double @log(double %46)
%50 = fneg double %49
%51 = tail call i32 @rec_interp1d(double %14, double %6, double* %48, i32 %7, double %50)
%52 = tail call double @exp(i32 %51)
store double %52, double* %1
br label %53
53: ; preds = %32, %53
%54 = phi i64 [ 140, %32 ], [ %55, %53 ]
%55 = add nuw nsw i64 %54, 1
%56 = getelementptr inbounds double, double* %9, i64 %55
%57 = load double, double* %56
%58 = fmul double %11, %57
%59 = getelementptr inbounds double, double* %9, i64 %54
%60 = load double, double* %59
%61 = fdiv double %58, %60
%62 = getelementptr inbounds double*, double** %2, i64 %55
%63 = load double*, double** %62
%64 = tail call double @log(double %61)
%65 = fneg double %64
%66 = tail call i32 @rec_interp1d(double %14, double %6, double* %63, i32 %7, double %65)
%67 = tail call double @exp(i32 %66)
%68 = getelementptr inbounds double, double* %0, i64 %54
store double %67, double* %68
%69 = icmp eq i64 %55, 270
br i1 %69, label %70, label %53
70: ; preds = %53
%71 = fmul double %11, 0x40282CBB284839FB
%72 = getelementptr inbounds double, double* %9, i64 270
%73 = load double, double* %72
%74 = fdiv double %71, %73
%75 = getelementptr inbounds double*, double** %3, i64 1
%76 = load double*, double** %75
%77 = tail call double @log(double %74)
%78 = fneg double %77
%79 = tail call i32 @rec_interp1d(double %14, double %6, double* %76, i32 %7, double %78)
%80 = tail call double @exp(i32 %79)
%81 = getelementptr inbounds double, double* %0, i64 270
store double %80, double* %81
%82 = getelementptr inbounds double, double* %9, i64 271
%83 = load double, double* %82
%84 = fmul double %11, %83
%85 = fdiv double %84, 0x40282CBB284839FB
%86 = getelementptr inbounds double*, double** %2, i64 271
%87 = load double*, double** %86
%88 = tail call double @log(double %85)
%89 = fneg double %88
%90 = tail call i32 @rec_interp1d(double %14, double %6, double* %87, i32 %7, double %89)
%91 = tail call double @exp(i32 %90)
%92 = getelementptr inbounds double, double* %1, i64 1
store double %91, double* %92
br label %93
93: ; preds = %70, %93
%94 = phi i64 [ 271, %70 ], [ %95, %93 ]
%95 = add nuw nsw i64 %94, 1
%96 = getelementptr inbounds double, double* %9, i64 %95
%97 = load double, double* %96
%98 = fmul double %11, %97
%99 = getelementptr inbounds double, double* %9, i64 %94
%100 = load double, double* %99
%101 = fdiv double %98, %100
%102 = getelementptr inbounds double*, double** %2, i64 %95
%103 = load double*, double** %102
%104 = tail call double @log(double %101)
%105 = fneg double %104
%106 = tail call i32 @rec_interp1d(double %14, double %6, double* %103, i32 %7, double %105)
%107 = tail call double @exp(i32 %106)
%108 = getelementptr inbounds double, double* %0, i64 %94
store double %107, double* %108
%109 = icmp eq i64 %95, 310
br i1 %109, label %110, label %93
110: ; preds = %93
%111 = fmul double %11, 0x40297F2D647C2D27
%112 = getelementptr inbounds double, double* %9, i64 310
%113 = load double, double* %112
%114 = fdiv double %111, %113
%115 = getelementptr inbounds double*, double** %3, i64 2
%116 = load double*, double** %115
%117 = tail call double @log(double %114)
%118 = fneg double %117
%119 = tail call i32 @rec_interp1d(double %14, double %6, double* %116, i32 %7, double %118)
%120 = tail call double @exp(i32 %119)
%121 = getelementptr inbounds double, double* %0, i64 310
store double %120, double* %121
ret void
}