double dcs_photonuclear_BBKS(double Z, double A, double m, double K, double q) {
  if ((Z <= 0) || (A <= 0) || (m <= 0) || (K <= 0))
    return 0.;
  const double M = 0.5 * (0.939565 + 0.938272);
  const double mpi = 0.13957018;
  if ((q <= mpi + 0.5 * mpi * mpi / M) || (q >= K + m - 0.5 * (M + m * m / M)))
    return 0.;
  const double m1 = 0.54;
  const double m2 = 1.80;
  const double sgn = dcs_photonuclear_phn_Kokoulin(q);
  const double v = q / (K + m);
  double G;
  if (Z == 1) {
    G = 1;
  } else {
    const double tmp = 0.00282 * pow(A, 1. / 3) * sgn;
    G = (3. / tmp) * (0.5 + ((1. + tmp) * exp(-tmp) - 1.) / (tmp * tmp));
  }
  G *= 3.;
  double aux = v * m;
  const double t = aux * aux / (1. - v);
  double aum = m;
  aum *= aum;
  aux = 2. * aum / t;
  const double kappa = 1. - 2. / v + 2. / (v * v);
  aux = G * ((kappa + 4. * aum / m1) * log(1. + m1 / t) -
             (kappa * m1) / (m1 + t) - aux) +
        ((kappa + 2. * aum / m2) * log(1. + m2 / t) - aux) +
        aux * (G * (m1 - 4. * t) / (m1 + t) + (m2 / t) * log(1. + t / m2));
  aux *= 7.2973525693E-03 / (8. * 3.14159265358979323846) * A * v * sgn;
  const double(*table)[8];
  if (fabs(m - 0.10565839) < fabs(m - 1.77682)) {
    static const double tmp[7][8] = {
        {7.174409E-04, -0.2436045, -0.2942209, -0.1658391, -0.05227727,
         -9.328318E-03, -8.751909E-04, -3.343145E-05},
        {1.7132E-03, -0.5756682, -0.68615, -0.3825223, -0.1196482, -0.02124577,
         -1.987841E-03, -7.584046E-05},
        {4.082304E-03, -1.553973, -2.004218, -1.207777, -0.4033373, -0.07555636,
         -7.399682E-03, -2.943396E-04},
        {8.628455E-03, -3.251305, -3.999623, -2.33175, -0.7614046, -0.1402496,
         -0.01354059, -5.3155E-04},
        {0.01244159, -5.976818, -6.855045, -3.88775, -1.270677, -0.2370768,
         -0.02325118, -9.265136E-04},
        {0.02204591, -9.495636, -10.05705, -5.636636, -1.883845, -0.3614146,
         -0.03629659, -1.473118E-03},
        {0.03228755, -13.92918, -14.37232, -8.418409, -2.948277, -0.5819409,
         -0.059275, -2.419946E-03}};
    table = tmp;
  } else {
    static const double tmp[7][8] = {
        {-1.269205E-04, -0.01563032, 0.04693954, 0.05338546, 0.02240132,
         4.658909E-03, 4.822364E-04, 1.9837E-05},
        {-2.843877E-04, -0.03589573, 0.1162945, 0.130975, 0.05496, 0.01146659,
         1.193018E-03, 4.940182E-05},
        {-5.761546E-04, -0.07768545, 0.3064255, 0.3410341, 0.144945, 0.03090286,
         3.302773E-03, 1.409573E-04},
        {-1.195445E-03, -0.157375, 0.7041273, 0.7529364, 0.3119032, 0.06514455,
         6.843364E-03, 2.877909E-04},
        {-1.317386E-03, -0.2720009, 1.440518, 1.425927, 0.5576727, 0.1109868,
         0.011191, 4.544877E-04},
        {-9.689228E-15, -0.4186136, 2.533355, 2.284968, 0.8360727, 0.1589677,
         0.015614, 6.280818E-04},
        {-6.4595E-15, -0.8045046, 3.217832, 2.5487, 0.8085682, 0.1344223,
         0.01173827, 4.281932E-04}};
    table = tmp;
  }
  const double E = K + m;
  if ((E > 1E+02) && (v > 1E-07)) {
    const double lE = log10(E) - 3.;
    const double lv = log10(v);
    int iE = (int)lE;
    double f[2] = {0., 0.};
    int i;
    for (i = 0; i < 2; i++, iE++) {
      int j;
      if (iE > 6) {
        j = 6;
      } else if (iE >= 0) {
        j = iE;
      } else {
        j = iE;
      }
      const double x = (lv > -6.) ? lv : -6.;
      const double *const t = &table[j][0];
      f[i] = t[0] +
             x * (t[1] +
                  x * (t[2] +
                       x * (t[3] +
                            x * (t[4] + x * (t[5] + x * (t[6] + x * t[7]))))));
      if (lv < -6.) {
        f[i] *= 7 + lv;
      }
      if (lE < 0) {
        f[i] *= 1. + lE;
      }
    }
    const double h = lE - (int)lE;
    double fi;
    if ((f[0] > 0.) && (f[1] > 0.)) {
      fi = exp(log(f[0]) * (1. - h) + log(f[1]) * h);
    } else {
      fi = f[0] * (1. - h) + f[1] * h;
    }
    aux += A * fi / v;
  }
  return aux * 1E-34 / (K + m);
}


x86 assembly (clang, -O0):
<dcs_photonuclear_BBKS>:
push   %rbp
mov    %rsp,%rbp
sub    $0x160,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jae    11bc <dcs_photonuclear_BBKS+0x5c>
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jae    11bc <dcs_photonuclear_BBKS+0x5c>
xorps  %xmm0,%xmm0
ucomisd -0x20(%rbp),%xmm0
jae    11bc <dcs_photonuclear_BBKS+0x5c>
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jb     11c9 <dcs_photonuclear_BBKS+0x69>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1aee <dcs_photonuclear_BBKS+0x98e>
movsd  0xe3f(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe2a(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe15(%rip),%xmm0
ucomisd -0x30(%rbp),%xmm0
jae    1241 <dcs_photonuclear_BBKS+0xe1>
movsd  -0x30(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
addsd  -0x20(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm3
mulsd  -0x20(%rbp),%xmm3
movsd  0xdf9(%rip),%xmm1
divsd  %xmm1,%xmm3
movsd  0xded(%rip),%xmm1
addsd  %xmm3,%xmm1
movsd  0xde9(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jb     124e <dcs_photonuclear_BBKS+0xee>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1aee <dcs_photonuclear_BBKS+0x98e>
movsd  0xdda(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xdc5(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x30(%rbp),%xmm0
mov    $0x1,%al
call   1050 <dcs_photonuclear_phn_Kokoulin@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
addsd  -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xd7e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12c4 <dcs_photonuclear_BBKS+0x164>
jp     12c4 <dcs_photonuclear_BBKS+0x164>
movsd  0xd66(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1380 <dcs_photonuclear_BBKS+0x220>
movsd  -0x18(%rbp),%xmm0
movsd  0xd87(%rip),%xmm1
call   1070 <pow@plt>
movaps %xmm0,%xmm1
movsd  0xd6f(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xd51(%rip),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  0xd14(%rip),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1040 <exp@plt>
movsd  -0x108(%rbp),%xmm2
ff
movaps %xmm0,%xmm1
movsd  -0x100(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm2
movsd  0xce7(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
divsd  %xmm1,%xmm2
movsd  0xcc5(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xcc0(%rip),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x60(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xc6d(%rip),%xmm1
subsd  -0x60(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xc92(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
divsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xc78(%rip),%xmm1
divsd  -0x60(%rbp),%xmm1
movsd  0xc0b(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  -0x60(%rbp),%xmm2
movsd  0xc55(%rip),%xmm1
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  0xc30(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  0xbc8(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  0xbb0(%rip),%xmm1
divsd  -0x80(%rbp),%xmm1
movsd  0xb93(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1060 <log@plt>
movaps %xmm0,%xmm2
movsd  -0x148(%rbp),%xmm0
ff
movsd  0xb87(%rip),%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
movsd  0xb77(%rip),%xmm3
addsd  -0x80(%rbp),%xmm3
divsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  0xb82(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  0xb1a(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  0xb02(%rip),%xmm1
divsd  -0x80(%rbp),%xmm1
movsd  0xaed(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1060 <log@plt>
movsd  -0x140(%rbp),%xmm1
ff
movsd  -0x138(%rbp),%xmm2
ff
movaps %xmm0,%xmm4
movsd  -0x130(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm1
movsd  0xace(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xa7a(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa6a(%rip),%xmm1
addsd  -0x80(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  0xa49(%rip),%xmm0
divsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x80(%rbp),%xmm1
movsd  0xa2f(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xa1b(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1060 <log@plt>
movsd  -0x128(%rbp),%xmm2
ff
movsd  -0x120(%rbp),%xmm3
ff
movsd  -0x118(%rbp),%xmm1
ff
movaps %xmm0,%xmm4
movsd  -0x110(%rbp),%xmm0
ff
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xa22(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0x9f4(%rip),%xmm0
subsd  %xmm0,%xmm1
movaps 0xa41(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x20(%rbp),%xmm0
movsd  0x9d0(%rip),%xmm2
subsd  %xmm2,%xmm0
movaps 0xa25(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    16bc <dcs_photonuclear_BBKS+0x55c>
lea    0xa20(%rip),%rax
mov    %rax,-0x98(%rbp)
jmp    16ca <dcs_photonuclear_BBKS+0x56a>
lea    0xbcd(%rip),%rax
mov    %rax,-0x98(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  0x9a4(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1ace <dcs_photonuclear_BBKS+0x96e>
movsd  -0x60(%rbp),%xmm0
movsd  0x995(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1ace <dcs_photonuclear_BBKS+0x96e>
movsd  -0xa0(%rbp),%xmm0
ff
call   1080 <log10@plt>
movsd  0x926(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
call   1080 <log10@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
cvttsd2si -0xa8(%rbp),%eax
ff
mov    %eax,-0xb4(%rbp)
lea    -0xd0(%rbp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1030 <memset@plt>
movl   $0x0,-0xd4(%rbp)
cmpl   $0x2,-0xd4(%rbp)
jge    19c1 <dcs_photonuclear_BBKS+0x861>
cmpl   $0x6,-0xb4(%rbp)
jle    1794 <dcs_photonuclear_BBKS+0x634>
movl   $0x6,-0xd8(%rbp)
jmp    17c3 <dcs_photonuclear_BBKS+0x663>
cmpl   $0x0,-0xb4(%rbp)
jl     17b2 <dcs_photonuclear_BBKS+0x652>
mov    -0xb4(%rbp),%eax
mov    %eax,-0xd8(%rbp)
jmp    17be <dcs_photonuclear_BBKS+0x65e>
mov    -0xb4(%rbp),%eax
mov    %eax,-0xd8(%rbp)
jmp    17c3 <dcs_photonuclear_BBKS+0x663>
movsd  -0xb0(%rbp),%xmm0
ff
movsd  0x8d5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    17f2 <dcs_photonuclear_BBKS+0x692>
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
jmp    1807 <dcs_photonuclear_BBKS+0x6a7>
movsd  0x8ae(%rip),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
jmp    1807 <dcs_photonuclear_BBKS+0x6a7>
movsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x98(%rbp),%rax
movslq -0xd8(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
mov    %rax,-0xe8(%rbp)
mov    -0xe8(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
mov    -0xe8(%rbp),%rax
movsd  0x8(%rax),%xmm3
movsd  -0xe0(%rbp),%xmm2
ff
mov    -0xe8(%rbp),%rax
movsd  0x10(%rax),%xmm5
movsd  -0xe0(%rbp),%xmm4
ff
mov    -0xe8(%rbp),%rax
movsd  0x18(%rax),%xmm7
movsd  -0xe0(%rbp),%xmm6
ff
mov    -0xe8(%rbp),%rax
movsd  0x20(%rax),%xmm9
movsd  -0xe0(%rbp),%xmm8
ff ff
mov    -0xe8(%rbp),%rax
movsd  0x28(%rax),%xmm11
movsd  -0xe0(%rbp),%xmm10
ff ff
mov    -0xe8(%rbp),%rax
movsd  0x30(%rax),%xmm13
movsd  -0xe0(%rbp),%xmm12
ff ff
mov    -0xe8(%rbp),%rax
movsd  0x38(%rax),%xmm14
mulsd  %xmm14,%xmm12
addsd  %xmm13,%xmm12
mulsd  %xmm12,%xmm10
addsd  %xmm11,%xmm10
mulsd  %xmm10,%xmm8
addsd  %xmm9,%xmm8
mulsd  %xmm8,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq -0xd4(%rbp),%rax
movsd  %xmm0,-0xd0(%rbp,%rax,8)
ff ff
movsd  0x780(%rip),%xmm0
ucomisd -0xb0(%rbp),%xmm0
ff
jbe    195f <dcs_photonuclear_BBKS+0x7ff>
movsd  0x772(%rip),%xmm0
addsd  -0xb0(%rbp),%xmm0
ff
movslq -0xd4(%rbp),%rax
mulsd  -0xd0(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0xd0(%rbp,%rax,8)
ff ff
xorps  %xmm0,%xmm0
ucomisd -0xa8(%rbp),%xmm0
ff
jbe    1999 <dcs_photonuclear_BBKS+0x839>
movsd  0x6a8(%rip),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movslq -0xd4(%rbp),%rax
mulsd  -0xd0(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0xd0(%rbp,%rax,8)
ff ff
jmp    199e <dcs_photonuclear_BBKS+0x83e>
mov    -0xd4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd4(%rbp)
mov    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    176b <dcs_photonuclear_BBKS+0x60b>
movsd  -0xa8(%rbp),%xmm0
ff
cvttsd2si -0xa8(%rbp),%eax
ff
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1a7a <dcs_photonuclear_BBKS+0x91a>
movsd  -0xc8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1a7a <dcs_photonuclear_BBKS+0x91a>
movsd  -0xd0(%rbp),%xmm0
ff
call   1060 <log@plt>
movsd  %xmm0,-0x158(%rbp)
ff
movsd  0x5f8(%rip),%xmm0
subsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1060 <log@plt>
movsd  -0x160(%rbp),%xmm2
ff
movaps %xmm0,%xmm1
movsd  -0x158(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0xf8(%rbp)
ff
jmp    1ab2 <dcs_photonuclear_BBKS+0x952>
movsd  -0xd0(%rbp),%xmm0
ff
movsd  0x596(%rip),%xmm2
subsd  -0xf0(%rbp),%xmm2
ff
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
mulsd  -0xf8(%rbp),%xmm0
ff
divsd  -0x60(%rbp),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0x5ca(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
addsd  -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x160,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dcs_photonuclear_BBKS>:
push   %rbx
sub    $0xb0,%rsp
xorpd  %xmm5,%xmm5
ucomisd %xmm0,%xmm5
jae    1754 <dcs_photonuclear_BBKS+0x604>
movapd %xmm0,%xmm7
xorpd  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jae    1754 <dcs_photonuclear_BBKS+0x604>
ucomisd %xmm2,%xmm0
jae    1754 <dcs_photonuclear_BBKS+0x604>
xorpd  %xmm0,%xmm0
ucomisd %xmm3,%xmm0
jae    1754 <dcs_photonuclear_BBKS+0x604>
movsd  0xe68(%rip),%xmm0
ucomisd %xmm4,%xmm0
jae    1754 <dcs_photonuclear_BBKS+0x604>
addsd  %xmm2,%xmm3
movapd %xmm2,%xmm6
mulsd  %xmm2,%xmm6
movsd  0xe52(%rip),%xmm0
movapd %xmm6,(%rsp)
divsd  %xmm0,%xmm6
addsd  %xmm0,%xmm6
mulsd  0xe45(%rip),%xmm6
addsd  %xmm3,%xmm6
xorpd  %xmm5,%xmm5
ucomisd %xmm6,%xmm4
jae    1754 <dcs_photonuclear_BBKS+0x604>
movapd %xmm2,0x70(%rsp)
movsd  %xmm1,0x30(%rsp)
movapd %xmm4,%xmm0
mov    $0x1,%al
movsd  %xmm3,0x38(%rsp)
movapd %xmm4,0x40(%rsp)
movsd  %xmm7,0x20(%rsp)
call   1040 <dcs_photonuclear_phn_Kokoulin@plt>
movapd 0x40(%rsp),%xmm3
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x58(%rsp)
divsd  0x38(%rsp),%xmm3
movsd  0x20(%rsp),%xmm0
ucomisd 0xdf3(%rip),%xmm0
movapd %xmm3,0x40(%rsp)
jne    1244 <dcs_photonuclear_BBKS+0xf4>
jp     1244 <dcs_photonuclear_BBKS+0xf4>
movsd  0xdd9(%rip),%xmm0
jmp    12e4 <dcs_photonuclear_BBKS+0x194>
movsd  0xddc(%rip),%xmm1
movsd  0x30(%rsp),%xmm0
call   1060 <pow@plt>
movapd %xmm0,%xmm1
mulsd  0xdcd(%rip),%xmm1
mulsd  0x58(%rsp),%xmm1
movapd %xmm1,0x10(%rsp)
movsd  0xda9(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rsp)
movapd 0xe27(%rip),%xmm0
xorpd  %xmm1,%xmm0
call   1030 <exp@plt>
movapd 0x40(%rsp),%xmm3
mulsd  0x20(%rsp),%xmm0
addsd  0xd92(%rip),%xmm0
movapd 0x10(%rsp),%xmm4
movapd %xmm4,%xmm1
mulsd  %xmm4,%xmm1
movapd 0xe04(%rip),%xmm2
unpcklpd %xmm0,%xmm2
unpcklpd %xmm1,%xmm4
divpd  %xmm4,%xmm2
movapd %xmm2,%xmm0
unpckhpd %xmm2,%xmm0
addsd  0xd68(%rip),%xmm0
mulsd  %xmm2,%xmm0
mulsd  0xd34(%rip),%xmm0
movapd %xmm0,0x90(%rsp)
movapd %xmm3,%xmm0
mulsd  0x70(%rsp),%xmm0
mulsd  %xmm0,%xmm0
movapd (%rsp),%xmm5
movapd %xmm5,%xmm1
addsd  %xmm5,%xmm1
movapd %xmm1,%xmm4
movapd %xmm1,0x10(%rsp)
movapd 0xdb6(%rip),%xmm1
unpcklpd %xmm3,%xmm2
subpd  %xmm2,%xmm1
movapd %xmm3,%xmm2
mulpd  %xmm3,%xmm2
shufpd $0x2,%xmm1,%xmm2
movapd 0xda9(%rip),%xmm1
unpcklpd %xmm0,%xmm1
divpd  %xmm2,%xmm1
movsd  0xd01(%rip),%xmm0
divsd  %xmm3,%xmm0
movsd  0xccd(%rip),%xmm2
movapd %xmm2,%xmm3
subsd  %xmm0,%xmm3
shufpd $0x2,0xd8c(%rip),%xmm3
addpd  %xmm1,%xmm3
movapd %xmm3,0x80(%rsp)
unpckhpd %xmm1,%xmm1
movapd %xmm1,0x60(%rsp)
movapd %xmm4,%xmm0
divsd  %xmm1,%xmm0
movapd %xmm0,0x20(%rsp)
mulsd  0xcbf(%rip),%xmm5
movsd  0xcbf(%rip),%xmm0
divsd  %xmm0,%xmm5
addsd  %xmm3,%xmm5
movapd %xmm5,(%rsp)
divsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
call   1050 <log@plt>
movsd  0xca5(%rip),%xmm3
movapd 0x80(%rsp),%xmm2
mulsd  %xmm2,%xmm3
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
movapd %xmm1,0xa0(%rsp)
divsd  %xmm1,%xmm3
mulsd  (%rsp),%xmm0
addsd  %xmm3,%xmm0
subsd  0x20(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xc6f(%rip),%xmm1
movapd 0x10(%rsp),%xmm0
divsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
movapd %xmm0,0x10(%rsp)
movapd %xmm1,%xmm0
divsd  0x60(%rsp),%xmm0
movsd  %xmm0,0x80(%rsp)
movsd  0xbf8(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <log@plt>
mulsd  0x10(%rsp),%xmm0
subsd  0x20(%rsp),%xmm0
movapd 0x90(%rsp),%xmm1
movsd  (%rsp),%xmm2
mulsd  %xmm1,%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm2,(%rsp)
movsd  0xc10(%rip),%xmm2
movapd 0x60(%rsp),%xmm0
mulsd  %xmm0,%xmm2
addsd  0xbe6(%rip),%xmm2
mulsd  %xmm1,%xmm2
divsd  0xa0(%rsp),%xmm2
movsd  %xmm2,0x10(%rsp)
divsd  0xbdb(%rip),%xmm0
movsd  0xb8b(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <log@plt>
movapd 0x40(%rsp),%xmm2
mulsd  0x80(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  0xbb2(%rip),%xmm5
mulsd  0x30(%rsp),%xmm5
mulsd  %xmm2,%xmm5
mulsd  0x58(%rsp),%xmm5
movapd 0x70(%rsp),%xmm3
unpcklpd %xmm3,%xmm3
addpd  0xc18(%rip),%xmm3
andpd  0xc20(%rip),%xmm3
pshufd $0xee,%xmm3,%xmm1
ucomisd %xmm3,%xmm1
lea    0xc20(%rip),%rax
lea    0xdd9(%rip),%rbx
cmova  %rax,%rbx
mulsd  %xmm0,%xmm5
movsd  0x38(%rsp),%xmm0
ucomisd 0xb63(%rip),%xmm0
jbe    1748 <dcs_photonuclear_BBKS+0x5f8>
ucomisd 0xb5d(%rip),%xmm2
jbe    1748 <dcs_photonuclear_BBKS+0x5f8>
movsd  %xmm5,0x20(%rsp)
call   1070 <log10@plt>
addsd  0xb4c(%rip),%xmm0
movapd %xmm0,(%rsp)
movapd 0x40(%rsp),%xmm0
call   1070 <log10@plt>
movapd (%rsp),%xmm9
cvttsd2si %xmm9,%ecx
movsd  0xb31(%rip),%xmm2
movapd %xmm0,%xmm1
maxsd  %xmm2,%xmm1
movsd  0xb29(%rip),%xmm3
addsd  %xmm0,%xmm3
cmpltsd %xmm2,%xmm0
andpd  %xmm0,%xmm3
movsd  0xa93(%rip),%xmm8
andnpd %xmm8,%xmm0
orpd   %xmm3,%xmm0
movapd %xmm9,%xmm2
addsd  %xmm8,%xmm2
cmp    $0x6,%ecx
mov    $0x6,%eax
cmovl  %ecx,%eax
cltq
shl    $0x6,%rax
xorpd  %xmm3,%xmm3
movapd %xmm9,%xmm7
cmpltsd %xmm3,%xmm7
andpd  %xmm7,%xmm2
andnpd %xmm8,%xmm7
orpd   %xmm2,%xmm7
cmp    $0x5,%ecx
mov    $0x5,%edx
cmovl  %ecx,%edx
movslq %edx,%rcx
shl    $0x6,%rcx
unpcklpd %xmm1,%xmm1
movsd  0x78(%rcx,%rbx,1),%xmm2
movhpd 0x38(%rbx,%rax,1),%xmm2
movsd  0x70(%rcx,%rbx,1),%xmm3
movhpd 0x30(%rbx,%rax,1),%xmm3
mulpd  %xmm1,%xmm2
addpd  %xmm3,%xmm2
movsd  0x68(%rcx,%rbx,1),%xmm3
movhpd 0x28(%rbx,%rax,1),%xmm3
mulpd  %xmm1,%xmm2
movsd  0x60(%rcx,%rbx,1),%xmm4
movhpd 0x20(%rbx,%rax,1),%xmm4
addpd  %xmm3,%xmm2
mulpd  %xmm1,%xmm2
addpd  %xmm4,%xmm2
movsd  0x40(%rcx,%rbx,1),%xmm3
movsd  0x48(%rcx,%rbx,1),%xmm4
movsd  0x58(%rcx,%rbx,1),%xmm5
movhpd 0x18(%rbx,%rax,1),%xmm5
movsd  0x50(%rcx,%rbx,1),%xmm6
mulpd  %xmm1,%xmm2
movhpd 0x10(%rbx,%rax,1),%xmm6
addpd  %xmm5,%xmm2
mulpd  %xmm1,%xmm2
movhpd 0x8(%rbx,%rax,1),%xmm4
addpd  %xmm6,%xmm2
mulpd  %xmm1,%xmm2
movhpd (%rbx,%rax,1),%xmm3
addpd  %xmm4,%xmm2
mulpd  %xmm1,%xmm2
addpd  %xmm3,%xmm2
unpcklpd %xmm0,%xmm0
mulpd  %xmm2,%xmm0
unpcklpd %xmm7,%xmm7
movapd %xmm9,%xmm2
cvttpd2dq %xmm9,%xmm1
mulpd  %xmm0,%xmm7
cvtdq2pd %xmm1,%xmm0
subsd  %xmm0,%xmm2
movapd %xmm2,(%rsp)
xorpd  %xmm0,%xmm0
cmpltpd %xmm7,%xmm0
movmskpd %xmm0,%eax
cmp    $0x3,%al
jne    170d <dcs_photonuclear_BBKS+0x5bd>
movapd %xmm7,%xmm0
unpckhpd %xmm7,%xmm0
movapd %xmm8,0x10(%rsp)
movapd %xmm7,0x60(%rsp)
call   1050 <log@plt>
movsd  %xmm0,0x70(%rsp)
movapd 0x10(%rsp),%xmm0
subsd  (%rsp),%xmm0
movapd %xmm0,0x10(%rsp)
movapd 0x60(%rsp),%xmm0
call   1050 <log@plt>
mulsd  (%rsp),%xmm0
movapd 0x10(%rsp),%xmm1
mulsd  0x70(%rsp),%xmm1
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
movapd %xmm0,%xmm7
jmp    1728 <dcs_photonuclear_BBKS+0x5d8>
movapd (%rsp),%xmm0
subsd  %xmm0,%xmm8
mulsd  %xmm7,%xmm0
unpckhpd %xmm7,%xmm7
mulsd  %xmm8,%xmm7
addsd  %xmm0,%xmm7
movsd  0x30(%rsp),%xmm0
movsd  0x20(%rsp),%xmm5
mulsd  %xmm0,%xmm7
divsd  0x40(%rsp),%xmm7
addsd  %xmm7,%xmm5
movsd  0x38(%rsp),%xmm0
mulsd  0x958(%rip),%xmm5
divsd  %xmm0,%xmm5
movapd %xmm5,%xmm0
add    $0xb0,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@dcs_photonuclear_BBKS.tmp = internal constant [7 x [8 x double]] [[8 x double] [double 0x3F47825499E562D4, double 0xBFCF2E6EA8544780, double 0xBFD2D483E5D32E10, double 0xBFC53A373372F413, double 0xBFAAC41619F2C55A, double 0xBF831AB9A5E4BCBF, double 0xBF4CADA225897064, double 0xBF018717E0113A4A], [8 x double] [double 1.713200e-03, double 0xBFE26BDFB78B1C28, double -6.861500e-01, double 0xBFD87B3ED01F67A4, double 0xBFBEA143B20677E9, double 0xBF95C1737D5037D1, double 0xBF6048CE02B56F97, double 0xBF13E1912E80E6D9], [8 x double] [double 0x3F70B89B22C1DD16, double 0xBFF8DD12CADDDF44, double 0xC00008A372606FAC, double 0xBFF3530DF9BDC6A0, double 0xBFD9D047403071B8, double 0xBFB357A95F346DF1, double 0xBF7E4F21030D842B, double 0xBF334A32F4B70618], [8 x double] [double 0x3F81ABCBA051EF8C, double 0xC00A02AC322291FB, double 0xC00FFF3A57EAA2A1, double -2.331750e+00, double 0xBFE85D6D2E00C44B, double 0xBFC1F3B2EAA37769, double 0xBF8BBB2B39BF9455, double -5.315500e-04], [8 x double] [double 0x3F897AF9F1482C3F, double 0xC017E842FA509396, double 0xC01B6B90EA9E6EEB, double -3.887750e+00, double 0xBFF454B167EC7864, double 0xBFCE58885751F66D, double 0xBF97CF2846C60D15, double 0xBF4E5C28CE3F0D93], [8 x double] [double 0x3F969333F9D79CDF, double 0xC022FDC4007570C5, double 0xC0241D35A858793E, double 0xC0168BEA4EBDD335, double 0xBFFE243AA79BBADC, double 0xBFD7216AB3D300C3, double 0xBFA2957776033C75, double 0xBF5822B468858315], [8 x double] [double 0x3FA087FE66A2CC48, double 0xC02BDBBD7B2031CF, double 0xC02CBEA0BA1F4B1F, double 0xC020D639B456B442, double 0xC007961240746456, double 0xBFE29F4285B68DC6, double -5.927500e-02, double 0xBF63D2FE9DB2E172]]
@dcs_photonuclear_BBKS.tmp.1 = internal constant [7 x [8 x double]] [[8 x double] [double 0xBF20A2BECB1B35AA, double 0xBF90016504E77067, double 0x3FA808759A60E9D0, double 0x3FAB5556C9905751, double 0x3F96F05F23261FCF, double 0x3F7315385CA4010D, double 0x3F3F9A95912307D5, double 1.983700e-05], [8 x double] [double 0xBF32A33BDEF24C0A, double 0xBFA260ECD4D503FE, double 0x3FBDC579F2346562, double 1.309750e-01, double 5.496000e-02, double 0x3F877BCBA85F8521, double 0x3F538BE152C9592D, double 0x3F09E6999C2FB650], [8 x double] [double 0xBF42E122950C5E61, double 0xBFB3E331932002D5, double 0x3FD39C79B34A44C8, double 0x3FD5D380B09487E2, double 1.449450e-01, double 0x3F9FA4FFD43622A7, double 0x3F6B0E6AC0ACF2AC, double 0x3F2279BDFCBD64D7], [8 x double] [double 0xBF53960F4B7777B1, double -1.573750e-01, double 0x3FE68835F9B710A3, double 0x3FE8180E13BEF9A5, double 0x3FD3F638D6E122C5, double 0x3FB0AD502FC33C2A, double 0x3F7C07C98931A8AB, double 0x3F32DC5480EB09EA], [8 x double] [double 0xBF55958472513C6F, double 0xBFD16876767EE25E, double 0x3FF70C5C9A34CA0C, double 0x3FF6D098D477BBF9, double 0x3FE1D8746B0BE795, double 0x3FBC69A18449A63C, double 1.119100e-02, double 0x3F3DC909CED4C795], [8 x double] [double 0xBD05D175AC6AAA03, double 0xBFDACA90B26A4AF7, double 0x4004444FA05143BF, double 0x4002479D4D834092, double 0x3FEAC11B88F28269, double 0x3FC4590DB84F6746, double 1.561400e-02, double 0x3F4494BB6525B186], [8 x double] [double -6.459500e-15, double 0xBFE9BE806E4F68F4, double 0x4009BE1EB4202D9D, double 2.548700e+00, double 0x3FE9DFCA6AF2BD21, double 0x3FC134BFFB2D3268, double 0x3F880A3BEE17CB23, double 0x3F3C0FE3CA55A949]]
define double @dcs_photonuclear_BBKS(double %0, double %1, double %2, double %3, double %4) {
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%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 [8 x double]*
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca i32
%29 = alloca [2 x double]
%30 = alloca i32
%31 = alloca i32
%32 = alloca double
%33 = alloca double*
%34 = alloca double
%35 = alloca double
store double %0, double* %7
store double %1, double* %8
store double %2, double* %9
store double %3, double* %10
store double %4, double* %11
%36 = load double, double* %7
%37 = fcmp ole double %36, 0.000000e+00
br i1 %37, label %47, label %38
38: ; preds = %5
%39 = load double, double* %8
%40 = fcmp ole double %39, 0.000000e+00
br i1 %40, label %47, label %41
41: ; preds = %38
%42 = load double, double* %9
%43 = fcmp ole double %42, 0.000000e+00
br i1 %43, label %47, label %44
44: ; preds = %41
%45 = load double, double* %10
%46 = fcmp ole double %45, 0.000000e+00
br i1 %46, label %47, label %48
47: ; preds = %44, %41, %38, %5
store double 0.000000e+00, double* %6
br label %354
48: ; preds = %44
store double 0x3FEE0B9ECF638002, double* %12
store double 0x3FC1DD6F874C6508, double* %13
%49 = load double, double* %11
%50 = fcmp ole double %49, 0x3FC3315B2B4DFCE1
br i1 %50, label %63, label %51
51: ; preds = %48
%52 = load double, double* %11
%53 = load double, double* %10
%54 = load double, double* %9
%55 = fadd double %53, %54
%56 = load double, double* %9
%57 = load double, double* %9
%58 = fmul double %56, %57
%59 = fdiv double %58, 0x3FEE0B9ECF638002
%60 = fadd double 0x3FEE0B9ECF638002, %59
%61 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %60, double %55)
%62 = fcmp oge double %52, %61
br i1 %62, label %63, label %64
63: ; preds = %51, %48
store double 0.000000e+00, double* %6
br label %354
64: ; preds = %51
store double 5.400000e-01, double* %14
store double 1.800000e+00, double* %15
%65 = load double, double* %11
%66 = call i32 (double, ...) bitcast (i32 (...)* @dcs_photonuclear_phn_Kokoulin to i32 (double, ...)*)(double %65)
%67 = sitofp i32 %66 to double
store double %67, double* %16
%68 = load double, double* %11
%69 = load double, double* %10
%70 = load double, double* %9
%71 = fadd double %69, %70
%72 = fdiv double %68, %71
store double %72, double* %17
%73 = load double, double* %7
%74 = fcmp oeq double %73, 1.000000e+00
br i1 %74, label %75, label %76
75: ; preds = %64
store double 1.000000e+00, double* %18
br label %96
76: ; preds = %64
%77 = load double, double* %8
%78 = call double @pow(double %77, double 0x3FD5555555555555)
%79 = fmul double 2.820000e-03, %78
%80 = load double, double* %16
%81 = fmul double %79, %80
store double %81, double* %19
%82 = load double, double* %19
%83 = fdiv double 3.000000e+00, %82
%84 = load double, double* %19
%85 = fadd double 1.000000e+00, %84
%86 = load double, double* %19
%87 = fneg double %86
%88 = call double @exp(double %87)
%89 = call double @llvm.fmuladd.f64(double %85, double %88, double -1.000000e+00)
%90 = load double, double* %19
%91 = load double, double* %19
%92 = fmul double %90, %91
%93 = fdiv double %89, %92
%94 = fadd double 5.000000e-01, %93
%95 = fmul double %83, %94
store double %95, double* %18
br label %96
96: ; preds = %76, %75
%97 = load double, double* %18
%98 = fmul double %97, 3.000000e+00
store double %98, double* %18
%99 = load double, double* %17
%100 = load double, double* %9
%101 = fmul double %99, %100
store double %101, double* %20
%102 = load double, double* %20
%103 = load double, double* %20
%104 = fmul double %102, %103
%105 = load double, double* %17
%106 = fsub double 1.000000e+00, %105
%107 = fdiv double %104, %106
store double %107, double* %21
%108 = load double, double* %9
store double %108, double* %22
%109 = load double, double* %22
%110 = load double, double* %22
%111 = fmul double %110, %109
store double %111, double* %22
%112 = load double, double* %22
%113 = fmul double 2.000000e+00, %112
%114 = load double, double* %21
%115 = fdiv double %113, %114
store double %115, double* %20
%116 = load double, double* %17
%117 = fdiv double 2.000000e+00, %116
%118 = fsub double 1.000000e+00, %117
%119 = load double, double* %17
%120 = load double, double* %17
%121 = fmul double %119, %120
%122 = fdiv double 2.000000e+00, %121
%123 = fadd double %118, %122
store double %123, double* %23
%124 = load double, double* %18
%125 = load double, double* %23
%126 = load double, double* %22
%127 = fmul double 4.000000e+00, %126
%128 = fdiv double %127, 5.400000e-01
%129 = fadd double %125, %128
%130 = load double, double* %21
%131 = fdiv double 5.400000e-01, %130
%132 = fadd double 1.000000e+00, %131
%133 = call double @log(double %132)
%134 = load double, double* %23
%135 = fmul double %134, 5.400000e-01
%136 = load double, double* %21
%137 = fadd double 5.400000e-01, %136
%138 = fdiv double %135, %137
%139 = fneg double %138
%140 = call double @llvm.fmuladd.f64(double %129, double %133, double %139)
%141 = load double, double* %20
%142 = fsub double %140, %141
%143 = load double, double* %23
%144 = load double, double* %22
%145 = fmul double 2.000000e+00, %144
%146 = fdiv double %145, 1.800000e+00
%147 = fadd double %143, %146
%148 = load double, double* %21
%149 = fdiv double 1.800000e+00, %148
%150 = fadd double 1.000000e+00, %149
%151 = call double @log(double %150)
%152 = load double, double* %20
%153 = fneg double %152
%154 = call double @llvm.fmuladd.f64(double %147, double %151, double %153)
%155 = call double @llvm.fmuladd.f64(double %124, double %142, double %154)
%156 = load double, double* %20
%157 = load double, double* %18
%158 = load double, double* %21
%159 = call double @llvm.fmuladd.f64(double -4.000000e+00, double %158, double 5.400000e-01)
%160 = fmul double %157, %159
%161 = load double, double* %21
%162 = fadd double 5.400000e-01, %161
%163 = fdiv double %160, %162
%164 = load double, double* %21
%165 = fdiv double 1.800000e+00, %164
%166 = load double, double* %21
%167 = fdiv double %166, 1.800000e+00
%168 = fadd double 1.000000e+00, %167
%169 = call double @log(double %168)
%170 = call double @llvm.fmuladd.f64(double %165, double %169, double %163)
%171 = call double @llvm.fmuladd.f64(double %156, double %170, double %155)
store double %171, double* %20
%172 = load double, double* %8
%173 = fmul double 0x3F33074E347B1358, %172
%174 = load double, double* %17
%175 = fmul double %173, %174
%176 = load double, double* %16
%177 = fmul double %175, %176
%178 = load double, double* %20
%179 = fmul double %178, %177
store double %179, double* %20
%180 = load double, double* %9
%181 = fsub double %180, 0x3FBB0C6DA1991769
%182 = call double @llvm.fabs.f64(double %181)
%183 = load double, double* %9
%184 = fsub double %183, 1.776820e+00
%185 = call double @llvm.fabs.f64(double %184)
%186 = fcmp olt double %182, %185
br i1 %186, label %187, label %188
187: ; preds = %96
store [8 x double]* getelementptr inbounds ([7 x [8 x double]], [7 x [8 x double]]* @dcs_photonuclear_BBKS.tmp, i64 0, i64 0), [8 x double]** %24
br label %189
188: ; preds = %96
store [8 x double]* getelementptr inbounds ([7 x [8 x double]], [7 x [8 x double]]* @dcs_photonuclear_BBKS.tmp.1, i64 0, i64 0), [8 x double]** %24
br label %189
189: ; preds = %188, %187
%190 = load double, double* %10
%191 = load double, double* %9
%192 = fadd double %190, %191
store double %192, double* %25
%193 = load double, double* %25
%194 = fcmp ogt double %193, 1.000000e+02
br i1 %194, label %195, label %347
195: ; preds = %189
%196 = load double, double* %17
%197 = fcmp ogt double %196, 0x3E7AD7F29ABCAF48
br i1 %197, label %198, label %347
198: ; preds = %195
%199 = load double, double* %25
%200 = call double @log10(double %199)
%201 = fsub double %200, 3.000000e+00
store double %201, double* %26
%202 = load double, double* %17
%203 = call double @log10(double %202)
store double %203, double* %27
%204 = load double, double* %26
%205 = fptosi double %204 to i32
store i32 %205, i32* %28
%206 = bitcast [2 x double]* %29 to i8*
store i32 0, i32* %30
br label %207
207: ; preds = %298, %198
%208 = load i32, i32* %30
%209 = icmp slt i32 %208, 2
br i1 %209, label %210, label %303
210: ; preds = %207
%211 = load i32, i32* %28
%212 = icmp sgt i32 %211, 6
br i1 %212, label %213, label %214
213: ; preds = %210
store i32 6, i32* %31
br label %222
214: ; preds = %210
%215 = load i32, i32* %28
%216 = icmp sge i32 %215, 0
br i1 %216, label %217, label %219
217: ; preds = %214
%218 = load i32, i32* %28
store i32 %218, i32* %31
br label %221
219: ; preds = %214
%220 = load i32, i32* %28
store i32 %220, i32* %31
br label %221
221: ; preds = %219, %217
br label %222
222: ; preds = %221, %213
%223 = load double, double* %27
%224 = fcmp ogt double %223, -6.000000e+00
br i1 %224, label %225, label %227
225: ; preds = %222
%226 = load double, double* %27
br label %228
227: ; preds = %222
br label %228
228: ; preds = %227, %225
%229 = phi double [ %226, %225 ], [ -6.000000e+00, %227 ]
store double %229, double* %32
%230 = load [8 x double]*, [8 x double]** %24
%231 = load i32, i32* %31
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds [8 x double], [8 x double]* %230, i64 %232
%234 = getelementptr inbounds [8 x double], [8 x double]* %233, i64 0, i64 0
store double* %234, double** %33
%235 = load double*, double** %33
%236 = getelementptr inbounds double, double* %235, i64 0
%237 = load double, double* %236
%238 = load double, double* %32
%239 = load double*, double** %33
%240 = getelementptr inbounds double, double* %239, i64 1
%241 = load double, double* %240
%242 = load double, double* %32
%243 = load double*, double** %33
%244 = getelementptr inbounds double, double* %243, i64 2
%245 = load double, double* %244
%246 = load double, double* %32
%247 = load double*, double** %33
%248 = getelementptr inbounds double, double* %247, i64 3
%249 = load double, double* %248
%250 = load double, double* %32
%251 = load double*, double** %33
%252 = getelementptr inbounds double, double* %251, i64 4
%253 = load double, double* %252
%254 = load double, double* %32
%255 = load double*, double** %33
%256 = getelementptr inbounds double, double* %255, i64 5
%257 = load double, double* %256
%258 = load double, double* %32
%259 = load double*, double** %33
%260 = getelementptr inbounds double, double* %259, i64 6
%261 = load double, double* %260
%262 = load double, double* %32
%263 = load double*, double** %33
%264 = getelementptr inbounds double, double* %263, i64 7
%265 = load double, double* %264
%266 = call double @llvm.fmuladd.f64(double %262, double %265, double %261)
%267 = call double @llvm.fmuladd.f64(double %258, double %266, double %257)
%268 = call double @llvm.fmuladd.f64(double %254, double %267, double %253)
%269 = call double @llvm.fmuladd.f64(double %250, double %268, double %249)
%270 = call double @llvm.fmuladd.f64(double %246, double %269, double %245)
%271 = call double @llvm.fmuladd.f64(double %242, double %270, double %241)
%272 = call double @llvm.fmuladd.f64(double %238, double %271, double %237)
%273 = load i32, i32* %30
%274 = sext i32 %273 to i64
%275 = getelementptr inbounds [2 x double], [2 x double]* %29, i64 0, i64 %274
store double %272, double* %275
%276 = load double, double* %27
%277 = fcmp olt double %276, -6.000000e+00
br i1 %277, label %278, label %286
278: ; preds = %228
%279 = load double, double* %27
%280 = fadd double 7.000000e+00, %279
%281 = load i32, i32* %30
%282 = sext i32 %281 to i64
%283 = getelementptr inbounds [2 x double], [2 x double]* %29, i64 0, i64 %282
%284 = load double, double* %283
%285 = fmul double %284, %280
store double %285, double* %283
br label %286
286: ; preds = %278, %228
%287 = load double, double* %26
%288 = fcmp olt double %287, 0.000000e+00
br i1 %288, label %289, label %297
289: ; preds = %286
%290 = load double, double* %26
%291 = fadd double 1.000000e+00, %290
%292 = load i32, i32* %30
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds [2 x double], [2 x double]* %29, i64 0, i64 %293
%295 = load double, double* %294
%296 = fmul double %295, %291
store double %296, double* %294
br label %297
297: ; preds = %289, %286
br label %298
298: ; preds = %297
%299 = load i32, i32* %30
%300 = add nsw i32 %299, 1
store i32 %300, i32* %30
%301 = load i32, i32* %28
%302 = add nsw i32 %301, 1
store i32 %302, i32* %28
br label %207
303: ; preds = %207
%304 = load double, double* %26
%305 = load double, double* %26
%306 = fptosi double %305 to i32
%307 = sitofp i32 %306 to double
%308 = fsub double %304, %307
store double %308, double* %34
%309 = getelementptr inbounds [2 x double], [2 x double]* %29, i64 0, i64 0
%310 = load double, double* %309
%311 = fcmp ogt double %310, 0.000000e+00
br i1 %311, label %312, label %329
312: ; preds = %303
%313 = getelementptr inbounds [2 x double], [2 x double]* %29, i64 0, i64 1
%314 = load double, double* %313
%315 = fcmp ogt double %314, 0.000000e+00
br i1 %315, label %316, label %329
316: ; preds = %312
%317 = getelementptr inbounds [2 x double], [2 x double]* %29, i64 0, i64 0
%318 = load double, double* %317
%319 = call double @log(double %318)
%320 = load double, double* %34
%321 = fsub double 1.000000e+00, %320
%322 = getelementptr inbounds [2 x double], [2 x double]* %29, i64 0, i64 1
%323 = load double, double* %322
%324 = call double @log(double %323)
%325 = load double, double* %34
%326 = fmul double %324, %325
%327 = call double @llvm.fmuladd.f64(double %319, double %321, double %326)
%328 = call double @exp(double %327)
store double %328, double* %35
br label %339
329: ; preds = %312, %303
%330 = getelementptr inbounds [2 x double], [2 x double]* %29, i64 0, i64 0
%331 = load double, double* %330
%332 = load double, double* %34
%333 = fsub double 1.000000e+00, %332
%334 = getelementptr inbounds [2 x double], [2 x double]* %29, i64 0, i64 1
%335 = load double, double* %334
%336 = load double, double* %34
%337 = fmul double %335, %336
%338 = call double @llvm.fmuladd.f64(double %331, double %333, double %337)
store double %338, double* %35
br label %339
339: ; preds = %329, %316
%340 = load double, double* %8
%341 = load double, double* %35
%342 = fmul double %340, %341
%343 = load double, double* %17
%344 = fdiv double %342, %343
%345 = load double, double* %20
%346 = fadd double %345, %344
store double %346, double* %20
br label %347
347: ; preds = %339, %195, %189
%348 = load double, double* %20
%349 = fmul double %348, 0x38E09D8792FB4C49
%350 = load double, double* %10
%351 = load double, double* %9
%352 = fadd double %350, %351
%353 = fdiv double %349, %352
store double %353, double* %6
br label %354
354: ; preds = %347, %63, %47
%355 = load double, double* %6
ret double %355
}

LLVM IR (-O2):
@dcs_photonuclear_BBKS.tmp = internal unnamed_addr constant [7 x [8 x double]] [[8 x double] [double 0x3F47825499E562D4, double 0xBFCF2E6EA8544780, double 0xBFD2D483E5D32E10, double 0xBFC53A373372F413, double 0xBFAAC41619F2C55A, double 0xBF831AB9A5E4BCBF, double 0xBF4CADA225897064, double 0xBF018717E0113A4A], [8 x double] [double 1.713200e-03, double 0xBFE26BDFB78B1C28, double -6.861500e-01, double 0xBFD87B3ED01F67A4, double 0xBFBEA143B20677E9, double 0xBF95C1737D5037D1, double 0xBF6048CE02B56F97, double 0xBF13E1912E80E6D9], [8 x double] [double 0x3F70B89B22C1DD16, double 0xBFF8DD12CADDDF44, double 0xC00008A372606FAC, double 0xBFF3530DF9BDC6A0, double 0xBFD9D047403071B8, double 0xBFB357A95F346DF1, double 0xBF7E4F21030D842B, double 0xBF334A32F4B70618], [8 x double] [double 0x3F81ABCBA051EF8C, double 0xC00A02AC322291FB, double 0xC00FFF3A57EAA2A1, double -2.331750e+00, double 0xBFE85D6D2E00C44B, double 0xBFC1F3B2EAA37769, double 0xBF8BBB2B39BF9455, double -5.315500e-04], [8 x double] [double 0x3F897AF9F1482C3F, double 0xC017E842FA509396, double 0xC01B6B90EA9E6EEB, double -3.887750e+00, double 0xBFF454B167EC7864, double 0xBFCE58885751F66D, double 0xBF97CF2846C60D15, double 0xBF4E5C28CE3F0D93], [8 x double] [double 0x3F969333F9D79CDF, double 0xC022FDC4007570C5, double 0xC0241D35A858793E, double 0xC0168BEA4EBDD335, double 0xBFFE243AA79BBADC, double 0xBFD7216AB3D300C3, double 0xBFA2957776033C75, double 0xBF5822B468858315], [8 x double] [double 0x3FA087FE66A2CC48, double 0xC02BDBBD7B2031CF, double 0xC02CBEA0BA1F4B1F, double 0xC020D639B456B442, double 0xC007961240746456, double 0xBFE29F4285B68DC6, double -5.927500e-02, double 0xBF63D2FE9DB2E172]]
@dcs_photonuclear_BBKS.tmp.1 = internal unnamed_addr constant [7 x [8 x double]] [[8 x double] [double 0xBF20A2BECB1B35AA, double 0xBF90016504E77067, double 0x3FA808759A60E9D0, double 0x3FAB5556C9905751, double 0x3F96F05F23261FCF, double 0x3F7315385CA4010D, double 0x3F3F9A95912307D5, double 1.983700e-05], [8 x double] [double 0xBF32A33BDEF24C0A, double 0xBFA260ECD4D503FE, double 0x3FBDC579F2346562, double 1.309750e-01, double 5.496000e-02, double 0x3F877BCBA85F8521, double 0x3F538BE152C9592D, double 0x3F09E6999C2FB650], [8 x double] [double 0xBF42E122950C5E61, double 0xBFB3E331932002D5, double 0x3FD39C79B34A44C8, double 0x3FD5D380B09487E2, double 1.449450e-01, double 0x3F9FA4FFD43622A7, double 0x3F6B0E6AC0ACF2AC, double 0x3F2279BDFCBD64D7], [8 x double] [double 0xBF53960F4B7777B1, double -1.573750e-01, double 0x3FE68835F9B710A3, double 0x3FE8180E13BEF9A5, double 0x3FD3F638D6E122C5, double 0x3FB0AD502FC33C2A, double 0x3F7C07C98931A8AB, double 0x3F32DC5480EB09EA], [8 x double] [double 0xBF55958472513C6F, double 0xBFD16876767EE25E, double 0x3FF70C5C9A34CA0C, double 0x3FF6D098D477BBF9, double 0x3FE1D8746B0BE795, double 0x3FBC69A18449A63C, double 1.119100e-02, double 0x3F3DC909CED4C795], [8 x double] [double 0xBD05D175AC6AAA03, double 0xBFDACA90B26A4AF7, double 0x4004444FA05143BF, double 0x4002479D4D834092, double 0x3FEAC11B88F28269, double 0x3FC4590DB84F6746, double 1.561400e-02, double 0x3F4494BB6525B186], [8 x double] [double -6.459500e-15, double 0xBFE9BE806E4F68F4, double 0x4009BE1EB4202D9D, double 2.548700e+00, double 0x3FE9DFCA6AF2BD21, double 0x3FC134BFFB2D3268, double 0x3F880A3BEE17CB23, double 0x3F3C0FE3CA55A949]]
define double @dcs_photonuclear_BBKS(double %0, double %1, double %2, double %3, double %4) {
%6 = fcmp ole double %0, 0.000000e+00
%7 = fcmp ole double %1, 0.000000e+00
%8 = or i1 %6, %7
%9 = fcmp ole double %2, 0.000000e+00
%10 = or i1 %8, %9
%11 = fcmp ole double %3, 0.000000e+00
%12 = or i1 %10, %11
%13 = fcmp ole double %4, 0x3FC3315B2B4DFCE1
%14 = or i1 %12, %13
br i1 %14, label %220, label %15
15: ; preds = %5
%16 = fadd double %2, %3
%17 = fmul double %2, %2
%18 = fdiv double %17, 0x3FEE0B9ECF638002
%19 = fadd double %18, 0x3FEE0B9ECF638002
%20 = tail call double @llvm.fmuladd.f64(double %19, double -5.000000e-01, double %16)
%21 = fcmp ugt double %20, %4
br i1 %21, label %22, label %220
22: ; preds = %15
%23 = tail call i32 (double, ...) bitcast (i32 (...)* @dcs_photonuclear_phn_Kokoulin to i32 (double, ...)*)(double %4)
%24 = sitofp i32 %23 to double
%25 = fdiv double %4, %16
%26 = fcmp oeq double %0, 1.000000e+00
br i1 %26, label %45, label %27
27: ; preds = %22
%28 = tail call double @pow(double %1, double 0x3FD5555555555555)
%29 = fmul double %28, 2.820000e-03
%30 = fmul double %29, %24
%31 = fadd double %30, 1.000000e+00
%32 = fneg double %30
%33 = tail call double @exp(double %32)
%34 = tail call double @llvm.fmuladd.f64(double %31, double %33, double -1.000000e+00)
%35 = fmul double %30, %30
%36 = insertelement <2 x double> <double 3.000000e+00, double poison>, double %34, i64 1
%37 = insertelement <2 x double> poison, double %30, i64 0
%38 = insertelement <2 x double> %37, double %35, i64 1
%39 = fdiv <2 x double> %36, %38
%40 = extractelement <2 x double> %39, i64 1
%41 = fadd double %40, 5.000000e-01
%42 = extractelement <2 x double> %39, i64 0
%43 = fmul double %42, %41
%44 = fmul double %43, 3.000000e+00
br label %45
45: ; preds = %22, %27
%46 = phi double [ %44, %27 ], [ 3.000000e+00, %22 ]
%47 = fmul double %25, %2
%48 = fmul double %47, %47
%49 = fmul double %17, 2.000000e+00
%50 = insertelement <2 x double> <double poison, double 1.000000e+00>, double %25, i64 0
%51 = insertelement <2 x double> poison, double %25, i64 0
%52 = shufflevector <2 x double> %51, <2 x double> poison, <2 x i32> zeroinitializer
%53 = fmul <2 x double> %50, %52
%54 = fsub <2 x double> %50, %52
%55 = shufflevector <2 x double> %53, <2 x double> %54, <2 x i32> <i32 0, i32 3>
%56 = insertelement <2 x double> <double 2.000000e+00, double poison>, double %48, i64 1
%57 = fdiv <2 x double> %56, %55
%58 = extractelement <2 x double> %57, i64 1
%59 = fdiv double %49, %58
%60 = fdiv double 2.000000e+00, %25
%61 = fsub double 1.000000e+00, %60
%62 = fmul double %17, 4.000000e+00
%63 = fdiv double %62, 5.400000e-01
%64 = insertelement <2 x double> <double poison, double 5.400000e-01>, double %61, i64 0
%65 = fadd <2 x double> %57, %64
%66 = extractelement <2 x double> %65, i64 0
%67 = fadd double %63, %66
%68 = fdiv double 5.400000e-01, %58
%69 = fadd double %68, 1.000000e+00
%70 = tail call double @log(double %69)
%71 = fmul double %66, -5.400000e-01
%72 = extractelement <2 x double> %65, i64 1
%73 = fdiv double %71, %72
%74 = tail call double @llvm.fmuladd.f64(double %67, double %70, double %73)
%75 = fsub double %74, %59
%76 = fdiv double %49, 1.800000e+00
%77 = fadd double %76, %66
%78 = fdiv double 1.800000e+00, %58
%79 = fadd double %78, 1.000000e+00
%80 = tail call double @log(double %79)
%81 = fneg double %59
%82 = tail call double @llvm.fmuladd.f64(double %77, double %80, double %81)
%83 = tail call double @llvm.fmuladd.f64(double %46, double %75, double %82)
%84 = tail call double @llvm.fmuladd.f64(double %58, double -4.000000e+00, double 5.400000e-01)
%85 = fmul double %84, %46
%86 = fdiv double %85, %72
%87 = fdiv double %58, 1.800000e+00
%88 = fadd double %87, 1.000000e+00
%89 = tail call double @log(double %88)
%90 = tail call double @llvm.fmuladd.f64(double %78, double %89, double %86)
%91 = tail call double @llvm.fmuladd.f64(double %59, double %90, double %83)
%92 = fmul double %1, 0x3F33074E347B1358
%93 = fmul double %92, %25
%94 = fmul double %93, %24
%95 = fmul double %94, %91
%96 = insertelement <2 x double> poison, double %2, i64 0
%97 = shufflevector <2 x double> %96, <2 x double> poison, <2 x i32> zeroinitializer
%98 = fadd <2 x double> %97, <double 0xBFBB0C6DA1991769, double -1.776820e+00>
%99 = call <2 x double> @llvm.fabs.v2f64(<2 x double> %98)
%100 = extractelement <2 x double> %99, i64 0
%101 = extractelement <2 x double> %99, i64 1
%102 = fcmp olt double %100, %101
%103 = select i1 %102, [8 x double]* getelementptr inbounds ([7 x [8 x double]], [7 x [8 x double]]* @dcs_photonuclear_BBKS.tmp, i64 0, i64 0), [8 x double]* getelementptr inbounds ([7 x [8 x double]], [7 x [8 x double]]* @dcs_photonuclear_BBKS.tmp.1, i64 0, i64 0)
%104 = fcmp ogt double %16, 1.000000e+02
%105 = fcmp ogt double %25, 0x3E7AD7F29ABCAF48
%106 = and i1 %104, %105
br i1 %106, label %107, label %216
107: ; preds = %45
%108 = tail call double @log10(double %16)
%109 = fadd double %108, -3.000000e+00
%110 = tail call double @log10(double %25)
%111 = fptosi double %109 to i32
%112 = fcmp ogt double %110, -6.000000e+00
%113 = select i1 %112, double %110, double -6.000000e+00
%114 = fcmp olt double %110, -6.000000e+00
%115 = fadd double %110, 7.000000e+00
%116 = select i1 %114, double %115, double 1.000000e+00
%117 = fcmp olt double %109, 0.000000e+00
%118 = fadd double %109, 1.000000e+00
%119 = icmp slt i32 %111, 6
%120 = select i1 %119, i32 %111, i32 6
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %121, i64 0
%123 = load double, double* %122
%124 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %121, i64 1
%125 = load double, double* %124
%126 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %121, i64 2
%127 = load double, double* %126
%128 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %121, i64 3
%129 = load double, double* %128
%130 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %121, i64 4
%131 = load double, double* %130
%132 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %121, i64 5
%133 = load double, double* %132
%134 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %121, i64 6
%135 = load double, double* %134
%136 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %121, i64 7
%137 = load double, double* %136
%138 = select i1 %117, double %118, double 1.000000e+00
%139 = icmp slt i32 %111, 5
%140 = select i1 %139, i32 %111, i32 5
%141 = add nsw i32 %140, 1
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %142, i64 0
%144 = load double, double* %143
%145 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %142, i64 1
%146 = load double, double* %145
%147 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %142, i64 2
%148 = load double, double* %147
%149 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %142, i64 3
%150 = load double, double* %149
%151 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %142, i64 4
%152 = load double, double* %151
%153 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %142, i64 5
%154 = load double, double* %153
%155 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %142, i64 6
%156 = load double, double* %155
%157 = getelementptr inbounds [8 x double], [8 x double]* %103, i64 %142, i64 7
%158 = load double, double* %157
%159 = insertelement <2 x double> poison, double %113, i64 0
%160 = shufflevector <2 x double> %159, <2 x double> poison, <2 x i32> zeroinitializer
%161 = insertelement <2 x double> poison, double %158, i64 0
%162 = insertelement <2 x double> %161, double %137, i64 1
%163 = insertelement <2 x double> poison, double %156, i64 0
%164 = insertelement <2 x double> %163, double %135, i64 1
%165 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %160, <2 x double> %162, <2 x double> %164)
%166 = insertelement <2 x double> poison, double %154, i64 0
%167 = insertelement <2 x double> %166, double %133, i64 1
%168 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %160, <2 x double> %165, <2 x double> %167)
%169 = insertelement <2 x double> poison, double %152, i64 0
%170 = insertelement <2 x double> %169, double %131, i64 1
%171 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %160, <2 x double> %168, <2 x double> %170)
%172 = insertelement <2 x double> poison, double %150, i64 0
%173 = insertelement <2 x double> %172, double %129, i64 1
%174 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %160, <2 x double> %171, <2 x double> %173)
%175 = insertelement <2 x double> poison, double %148, i64 0
%176 = insertelement <2 x double> %175, double %127, i64 1
%177 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %160, <2 x double> %174, <2 x double> %176)
%178 = insertelement <2 x double> poison, double %146, i64 0
%179 = insertelement <2 x double> %178, double %125, i64 1
%180 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %160, <2 x double> %177, <2 x double> %179)
%181 = insertelement <2 x double> poison, double %144, i64 0
%182 = insertelement <2 x double> %181, double %123, i64 1
%183 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %160, <2 x double> %180, <2 x double> %182)
%184 = insertelement <2 x double> poison, double %116, i64 0
%185 = shufflevector <2 x double> %184, <2 x double> poison, <2 x i32> zeroinitializer
%186 = fmul <2 x double> %185, %183
%187 = insertelement <2 x double> poison, double %138, i64 0
%188 = shufflevector <2 x double> %187, <2 x double> poison, <2 x i32> zeroinitializer
%189 = fmul <2 x double> %186, %188
%190 = sitofp i32 %111 to double
%191 = fsub double %109, %190
%192 = fcmp ogt <2 x double> %189, zeroinitializer
%193 = extractelement <2 x i1> %192, i64 0
%194 = extractelement <2 x i1> %192, i64 1
%195 = select i1 %194, i1 %193, i1 false
br i1 %195, label %196, label %205
196: ; preds = %107
%197 = extractelement <2 x double> %189, i64 1
%198 = tail call double @log(double %197)
%199 = fsub double 1.000000e+00, %191
%200 = extractelement <2 x double> %189, i64 0
%201 = tail call double @log(double %200)
%202 = fmul double %191, %201
%203 = tail call double @llvm.fmuladd.f64(double %198, double %199, double %202)
%204 = tail call double @exp(double %203)
br label %211
205: ; preds = %107
%206 = fsub double 1.000000e+00, %191
%207 = extractelement <2 x double> %189, i64 0
%208 = fmul double %191, %207
%209 = extractelement <2 x double> %189, i64 1
%210 = tail call double @llvm.fmuladd.f64(double %209, double %206, double %208)
br label %211
211: ; preds = %205, %196
%212 = phi double [ %204, %196 ], [ %210, %205 ]
%213 = fmul double %212, %1
%214 = fdiv double %213, %25
%215 = fadd double %95, %214
br label %216
216: ; preds = %211, %45
%217 = phi double [ %215, %211 ], [ %95, %45 ]
%218 = fmul double %217, 0x38E09D8792FB4C49
%219 = fdiv double %218, %16
br label %220
220: ; preds = %216, %15, %5
%221 = phi double [ 0.000000e+00, %5 ], [ %219, %216 ], [ 0.000000e+00, %15 ]
ret double %221
}