#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 log(double const);
double pow(double, double);
double const radiation_logarithm(double);
double dcs_bremsstrahlung_KKP(double Z, double A, double mu, double K,
                              double q) {
  if ((Z <= 0) || (A <= 0) || (mu <= 0) || (K <= 0) || (q <= 0))
    return 0.;
  const double Z13 = pow(Z, 1. / 3.);
  const double sqrte = 1.648721271;
  if (q >= K + mu * (1. - 0.75 * sqrte * Z13))
    return 0.;
  const double me = 0.510998910E-03;
  const double phie_factor = mu / (me * me * sqrte);
  const double rem = 5.63588E-13 * me / mu;
  const double BZ_n = radiation_logarithm(Z) / Z13;
  const double BZ_e = (Z == 1.) ? 446. : 1429. / (Z13 * Z13);
  const double D_n = 1.54 * pow(A, 0.27);
  const double E = K + mu;
  const double dcs_factor = 7.297182E-07 * rem * rem * Z / E;
  const double delta_factor = 0.5 * mu * mu / E;
  const double qe_max = E / (1. + 0.5 * mu * mu / (me * E));
  const double nu = q / E;
  const double delta = delta_factor * nu / (1. - nu);
  const double muD_factor = mu + delta * (D_n * sqrte - 2.);
  double Phi_n, Phi_x, Phi_e;
  Phi_n = log(BZ_n * muD_factor / (D_n * (me + delta * sqrte * BZ_n)));
  if (Phi_n < 0.)
    Phi_n = 0.;
  if (Z >= 2) {
    Phi_x = log(mu * D_n / muD_factor);
    if (Phi_x < 0.)
      Phi_x = 0.;
  } else {
    Phi_x = 0.;
  }
  if (q < qe_max) {
    Phi_e = log(BZ_e * mu /
                ((1. + delta * phie_factor) * (me + delta * sqrte * BZ_e)));
    if (Phi_e < 0.)
      Phi_e = 0.;
  } else
    Phi_e = 0.;
  const double dcs = dcs_factor * (Z * Phi_n + Phi_x + Phi_e) *
                     (4. / 3. * (1. / nu - 1.) + nu);
  return (dcs < 0.) ? 0. : dcs;
}


x86 assembly (clang, -O0):
<dcs_bremsstrahlung_KKP>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%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    119a <dcs_bremsstrahlung_KKP+0x6a>
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jae    119a <dcs_bremsstrahlung_KKP+0x6a>
xorps  %xmm0,%xmm0
ucomisd -0x20(%rbp),%xmm0
jae    119a <dcs_bremsstrahlung_KKP+0x6a>
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jae    119a <dcs_bremsstrahlung_KKP+0x6a>
xorps  %xmm0,%xmm0
ucomisd -0x30(%rbp),%xmm0
jb     11a7 <dcs_bremsstrahlung_KKP+0x77>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1603 <dcs_bremsstrahlung_KKP+0x4d3>
movsd  -0x10(%rbp),%xmm0
movsd  0xe64(%rip),%xmm1
call   1040 <pow@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  0xe4a(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm3
movsd  0xe19(%rip),%xmm4
mulsd  %xmm4,%xmm3
movsd  0xe15(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jb     1216 <dcs_bremsstrahlung_KKP+0xe6>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1603 <dcs_bremsstrahlung_KKP+0x4d3>
movsd  0xe12(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  0xdf8(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xddf(%rip),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x10(%rbp),%xmm0
call   1050 <radiation_logarithm@plt>
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xd9c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1291 <dcs_bremsstrahlung_KKP+0x161>
jp     1291 <dcs_bremsstrahlung_KKP+0x161>
movsd  0xdbc(%rip),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    12af <dcs_bremsstrahlung_KKP+0x17f>
movsd  -0x38(%rbp),%xmm1
mulsd  -0x38(%rbp),%xmm1
movsd  0xd95(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xd9f(%rip),%xmm1
call   1040 <pow@plt>
movaps %xmm0,%xmm1
movsd  0xd87(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xd5f(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xd36(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  0xd12(%rip),%xmm2
mulsd  -0x20(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
movsd  0xce0(%rip),%xmm1
mulsd  -0x78(%rbp),%xmm1
divsd  %xmm1,%xmm2
movsd  0xca7(%rip),%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
movsd  0xc6d(%rip),%xmm1
subsd  -0x98(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x20(%rbp),%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  0xc47(%rip),%xmm3
mulsd  %xmm3,%xmm2
movsd  0xc73(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm1
movsd  0xc0d(%rip),%xmm2
mulsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x60(%rbp),%xmm3
mulsd  %xmm3,%xmm2
movsd  0xc14(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   1030 <log@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xb0(%rbp),%xmm0
ff
jbe    1451 <dcs_bremsstrahlung_KKP+0x321>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  0xc12(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     14a8 <dcs_bremsstrahlung_KKP+0x378>
movsd  -0x20(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
call   1030 <log@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xb8(%rbp),%xmm0
ff
jbe    14a3 <dcs_bremsstrahlung_KKP+0x373>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    14b3 <dcs_bremsstrahlung_KKP+0x383>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x30(%rbp),%xmm1
movsd  -0x90(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    154c <dcs_bremsstrahlung_KKP+0x41c>
movsd  -0x68(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0x50(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb1b(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  0xb17(%rip),%xmm2
mulsd  -0xa0(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm3
mulsd  %xmm3,%xmm2
movsd  0xb1e(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   1030 <log@plt>
movsd  %xmm0,-0xc0(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xc0(%rbp),%xmm0
ff
jbe    1547 <dcs_bremsstrahlung_KKP+0x417>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    1557 <dcs_bremsstrahlung_KKP+0x427>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
movsd  -0xb0(%rbp),%xmm3
ff
movsd  -0xb8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  0xa7b(%rip),%xmm1
divsd  -0x98(%rbp),%xmm1
ff
movsd  0xa6b(%rip),%xmm2
subsd  %xmm2,%xmm1
movsd  -0x98(%rbp),%xmm2
ff
movsd  0xac7(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xc8(%rbp),%xmm0
ff
jbe    15e6 <dcs_bremsstrahlung_KKP+0x4b6>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
jmp    15f6 <dcs_bremsstrahlung_KKP+0x4c6>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dcs_bremsstrahlung_KKP>:
sub    $0xb8,%rsp
movapd %xmm0,%xmm5
xorpd  %xmm0,%xmm0
movsd  %xmm5,0x10(%rsp)
ucomisd %xmm5,%xmm0
jae    14ca <dcs_bremsstrahlung_KKP+0x39a>
xorpd  %xmm5,%xmm5
ucomisd %xmm1,%xmm5
jae    14ca <dcs_bremsstrahlung_KKP+0x39a>
ucomisd %xmm2,%xmm5
jae    14ca <dcs_bremsstrahlung_KKP+0x39a>
xorpd  %xmm5,%xmm5
ucomisd %xmm3,%xmm5
jae    14ca <dcs_bremsstrahlung_KKP+0x39a>
movsd  %xmm1,0x8(%rsp)
ucomisd %xmm4,%xmm5
jae    14ca <dcs_bremsstrahlung_KKP+0x39a>
movsd  0xe73(%rip),%xmm1
movsd  0x10(%rsp),%xmm0
movapd %xmm2,0x20(%rsp)
movapd %xmm4,0x60(%rsp)
movapd %xmm3,0x30(%rsp)
call   1040 <pow@plt>
movapd 0x20(%rsp),%xmm2
movapd %xmm0,%xmm4
movsd  0xe4c(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xe48(%rip),%xmm1
mulsd  %xmm2,%xmm1
addsd  0x30(%rsp),%xmm1
xorpd  %xmm0,%xmm0
movapd 0x60(%rsp),%xmm3
ucomisd %xmm1,%xmm3
jae    14ca <dcs_bremsstrahlung_KKP+0x39a>
movsd  0xe32(%rip),%xmm0
divsd  %xmm2,%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0x10(%rsp),%xmm0
movsd  %xmm4,0x40(%rsp)
call   1050 <radiation_logarithm@plt>
movsd  0x40(%rsp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
ucomisd 0xde9(%rip),%xmm0
jne    1235 <dcs_bremsstrahlung_KKP+0x105>
jp     1235 <dcs_bremsstrahlung_KKP+0x105>
movsd  0xdf5(%rip),%xmm0
jmp    1245 <dcs_bremsstrahlung_KKP+0x115>
mulsd  %xmm1,%xmm1
movsd  0xdef(%rip),%xmm0
divsd  %xmm1,%xmm0
movapd %xmm0,0x80(%rsp)
movsd  0x8(%rsp),%xmm0
movsd  0xddc(%rip),%xmm1
call   1040 <pow@plt>
movapd %xmm0,%xmm7
mulsd  0xdd3(%rip),%xmm7
movapd 0x20(%rsp),%xmm3
movapd 0x30(%rsp),%xmm4
addsd  %xmm3,%xmm4
movsd  0xdc3(%rip),%xmm0
movsd  0x50(%rsp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0xda9(%rip),%xmm6
mulsd  %xmm3,%xmm6
mulsd  %xmm3,%xmm6
movsd  0xda0(%rip),%xmm8
movapd %xmm4,%xmm1
mulsd  %xmm8,%xmm1
movapd %xmm6,%xmm2
divsd  %xmm1,%xmm2
movsd  0xd3f(%rip),%xmm5
addsd  %xmm5,%xmm2
movapd %xmm4,%xmm0
divsd  %xmm2,%xmm0
movapd %xmm0,0x40(%rsp)
unpcklpd 0x60(%rsp),%xmm6
movapd %xmm4,0x30(%rsp)
movapd %xmm4,%xmm1
unpcklpd %xmm4,%xmm1
divpd  %xmm1,%xmm6
movapd %xmm6,%xmm2
unpckhpd %xmm6,%xmm2
mulsd  %xmm2,%xmm6
movapd %xmm5,%xmm1
movapd %xmm2,0x50(%rsp)
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm6
movsd  0xd3f(%rip),%xmm1
movapd %xmm7,%xmm2
mulsd  %xmm1,%xmm2
addsd  0xd37(%rip),%xmm2
mulsd  %xmm6,%xmm2
addsd  %xmm3,%xmm2
movapd %xmm6,0xa0(%rsp)
mulsd  %xmm6,%xmm1
movapd %xmm1,0x90(%rsp)
movsd  0x18(%rsp),%xmm0
mulsd  %xmm0,%xmm1
movsd  %xmm2,0x78(%rsp)
mulsd  %xmm2,%xmm0
addsd  %xmm8,%xmm1
movsd  %xmm7,0x18(%rsp)
mulsd  %xmm7,%xmm1
divsd  %xmm1,%xmm0
call   1030 <log@plt>
movapd %xmm0,%xmm5
xorpd  %xmm3,%xmm3
movsd  0x10(%rsp),%xmm0
ucomisd 0xcdf(%rip),%xmm0
xorpd  %xmm2,%xmm2
jb     13d0 <dcs_bremsstrahlung_KKP+0x2a0>
movsd  0x18(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
divsd  0x78(%rsp),%xmm0
movsd  %xmm5,0x18(%rsp)
call   1030 <log@plt>
movsd  0x18(%rsp),%xmm5
xorpd  %xmm3,%xmm3
movapd %xmm0,%xmm2
xorpd  %xmm0,%xmm0
ucomisd %xmm2,%xmm0
jbe    13d0 <dcs_bremsstrahlung_KKP+0x2a0>
xorpd  %xmm2,%xmm2
movsd  0x8(%rsp),%xmm1
divsd  0x30(%rsp),%xmm1
xorpd  %xmm4,%xmm4
maxsd  %xmm5,%xmm4
movapd 0x40(%rsp),%xmm0
ucomisd 0x60(%rsp),%xmm0
jbe    1482 <dcs_bremsstrahlung_KKP+0x352>
movapd 0x80(%rsp),%xmm3
movapd %xmm3,%xmm0
movsd  %xmm2,0x30(%rsp)
movapd 0x20(%rsp),%xmm2
mulsd  %xmm2,%xmm0
divsd  0xbfd(%rip),%xmm2
movsd  %xmm4,0x20(%rsp)
movapd 0xa0(%rsp),%xmm4
unpcklpd 0x90(%rsp),%xmm4
unpcklpd %xmm3,%xmm2
mulpd  %xmm4,%xmm2
addpd  0xc4d(%rip),%xmm2
movsd  %xmm1,0x8(%rsp)
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   1030 <log@plt>
movsd  0x20(%rsp),%xmm4
movsd  0x30(%rsp),%xmm2
movsd  0x8(%rsp),%xmm1
movapd %xmm0,%xmm3
xorpd  %xmm0,%xmm0
ucomisd %xmm3,%xmm0
jbe    1482 <dcs_bremsstrahlung_KKP+0x352>
xorpd  %xmm3,%xmm3
movsd  0x10(%rsp),%xmm0
mulsd  %xmm4,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm3,%xmm0
mulsd  %xmm0,%xmm1
movsd  0xb70(%rip),%xmm2
movapd 0x50(%rsp),%xmm0
divsd  %xmm0,%xmm2
addsd  0xbc6(%rip),%xmm2
mulsd  0xbc6(%rip),%xmm2
addsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
xorpd  %xmm0,%xmm0
maxsd  %xmm2,%xmm0
add    $0xb8,%rsp
ret

LLVM IR (-O0):
define double @dcs_bremsstrahlung_KKP(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 double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = 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
%31 = load double, double* %7
%32 = fcmp ole double %31, 0.000000e+00
br i1 %32, label %45, label %33
33: ; preds = %5
%34 = load double, double* %8
%35 = fcmp ole double %34, 0.000000e+00
br i1 %35, label %45, label %36
36: ; preds = %33
%37 = load double, double* %9
%38 = fcmp ole double %37, 0.000000e+00
br i1 %38, label %45, label %39
39: ; preds = %36
%40 = load double, double* %10
%41 = fcmp ole double %40, 0.000000e+00
br i1 %41, label %45, label %42
42: ; preds = %39
%43 = load double, double* %11
%44 = fcmp ole double %43, 0.000000e+00
br i1 %44, label %45, label %46
45: ; preds = %42, %39, %36, %33, %5
store double 0.000000e+00, double* %6
br label %194
46: ; preds = %42
%47 = load double, double* %7
%48 = call double @pow(double %47, double 0x3FD5555555555555)
store double %48, double* %12
store double 0x3FFA61298E32A203, double* %13
%49 = load double, double* %11
%50 = load double, double* %10
%51 = load double, double* %9
%52 = load double, double* %12
%53 = call double @llvm.fmuladd.f64(double 0xBFF3C8DF2AA5F982, double %52, double 1.000000e+00)
%54 = call double @llvm.fmuladd.f64(double %51, double %53, double %50)
%55 = fcmp oge double %49, %54
br i1 %55, label %56, label %57
56: ; preds = %46
store double 0.000000e+00, double* %6
br label %194
57: ; preds = %46
store double 0x3F40BE91CDA9B5D6, double* %14
%58 = load double, double* %9
%59 = fdiv double %58, 0x3E9CE42C3392D36B
store double %59, double* %15
%60 = load double, double* %9
%61 = fdiv double 0x3CB4C087CCB0712E, %60
store double %61, double* %16
%62 = load double, double* %7
%63 = call double @radiation_logarithm(double %62)
%64 = load double, double* %12
%65 = fdiv double %63, %64
store double %65, double* %17
%66 = load double, double* %7
%67 = fcmp oeq double %66, 1.000000e+00
br i1 %67, label %68, label %69
68: ; preds = %57
br label %74
69: ; preds = %57
%70 = load double, double* %12
%71 = load double, double* %12
%72 = fmul double %70, %71
%73 = fdiv double 1.429000e+03, %72
br label %74
74: ; preds = %69, %68
%75 = phi double [ 4.460000e+02, %68 ], [ %73, %69 ]
store double %75, double* %18
%76 = load double, double* %8
%77 = call double @pow(double %76, double 2.700000e-01)
%78 = fmul double 1.540000e+00, %77
store double %78, double* %19
%79 = load double, double* %10
%80 = load double, double* %9
%81 = fadd double %79, %80
store double %81, double* %20
%82 = load double, double* %16
%83 = fmul double 0x3EA87C3B4AB36001, %82
%84 = load double, double* %16
%85 = fmul double %83, %84
%86 = load double, double* %7
%87 = fmul double %85, %86
%88 = load double, double* %20
%89 = fdiv double %87, %88
store double %89, double* %21
%90 = load double, double* %9
%91 = fmul double 5.000000e-01, %90
%92 = load double, double* %9
%93 = fmul double %91, %92
%94 = load double, double* %20
%95 = fdiv double %93, %94
store double %95, double* %22
%96 = load double, double* %20
%97 = load double, double* %9
%98 = fmul double 5.000000e-01, %97
%99 = load double, double* %9
%100 = fmul double %98, %99
%101 = load double, double* %20
%102 = fmul double 0x3F40BE91CDA9B5D6, %101
%103 = fdiv double %100, %102
%104 = fadd double 1.000000e+00, %103
%105 = fdiv double %96, %104
store double %105, double* %23
%106 = load double, double* %11
%107 = load double, double* %20
%108 = fdiv double %106, %107
store double %108, double* %24
%109 = load double, double* %22
%110 = load double, double* %24
%111 = fmul double %109, %110
%112 = load double, double* %24
%113 = fsub double 1.000000e+00, %112
%114 = fdiv double %111, %113
store double %114, double* %25
%115 = load double, double* %9
%116 = load double, double* %25
%117 = load double, double* %19
%118 = call double @llvm.fmuladd.f64(double %117, double 0x3FFA61298E32A203, double -2.000000e+00)
%119 = call double @llvm.fmuladd.f64(double %116, double %118, double %115)
store double %119, double* %26
%120 = load double, double* %17
%121 = load double, double* %26
%122 = fmul double %120, %121
%123 = load double, double* %19
%124 = load double, double* %25
%125 = fmul double %124, 0x3FFA61298E32A203
%126 = load double, double* %17
%127 = call double @llvm.fmuladd.f64(double %125, double %126, double 0x3F40BE91CDA9B5D6)
%128 = fmul double %123, %127
%129 = fdiv double %122, %128
%130 = call double @log(double %129)
store double %130, double* %27
%131 = load double, double* %27
%132 = fcmp olt double %131, 0.000000e+00
br i1 %132, label %133, label %134
133: ; preds = %74
store double 0.000000e+00, double* %27
br label %134
134: ; preds = %133, %74
%135 = load double, double* %7
%136 = fcmp oge double %135, 2.000000e+00
br i1 %136, label %137, label %148
137: ; preds = %134
%138 = load double, double* %9
%139 = load double, double* %19
%140 = fmul double %138, %139
%141 = load double, double* %26
%142 = fdiv double %140, %141
%143 = call double @log(double %142)
store double %143, double* %28
%144 = load double, double* %28
%145 = fcmp olt double %144, 0.000000e+00
br i1 %145, label %146, label %147
146: ; preds = %137
store double 0.000000e+00, double* %28
br label %147
147: ; preds = %146, %137
br label %149
148: ; preds = %134
store double 0.000000e+00, double* %28
br label %149
149: ; preds = %148, %147
%150 = load double, double* %11
%151 = load double, double* %23
%152 = fcmp olt double %150, %151
br i1 %152, label %153, label %171
153: ; preds = %149
%154 = load double, double* %18
%155 = load double, double* %9
%156 = fmul double %154, %155
%157 = load double, double* %25
%158 = load double, double* %15
%159 = call double @llvm.fmuladd.f64(double %157, double %158, double 1.000000e+00)
%160 = load double, double* %25
%161 = fmul double %160, 0x3FFA61298E32A203
%162 = load double, double* %18
%163 = call double @llvm.fmuladd.f64(double %161, double %162, double 0x3F40BE91CDA9B5D6)
%164 = fmul double %159, %163
%165 = fdiv double %156, %164
%166 = call double @log(double %165)
store double %166, double* %29
%167 = load double, double* %29
%168 = fcmp olt double %167, 0.000000e+00
br i1 %168, label %169, label %170
169: ; preds = %153
store double 0.000000e+00, double* %29
br label %170
170: ; preds = %169, %153
br label %172
171: ; preds = %149
store double 0.000000e+00, double* %29
br label %172
172: ; preds = %171, %170
%173 = load double, double* %21
%174 = load double, double* %7
%175 = load double, double* %27
%176 = load double, double* %28
%177 = call double @llvm.fmuladd.f64(double %174, double %175, double %176)
%178 = load double, double* %29
%179 = fadd double %177, %178
%180 = fmul double %173, %179
%181 = load double, double* %24
%182 = fdiv double 1.000000e+00, %181
%183 = fsub double %182, 1.000000e+00
%184 = load double, double* %24
%185 = call double @llvm.fmuladd.f64(double 0x3FF5555555555555, double %183, double %184)
%186 = fmul double %180, %185
store double %186, double* %30
%187 = load double, double* %30
%188 = fcmp olt double %187, 0.000000e+00
br i1 %188, label %189, label %190
189: ; preds = %172
br label %192
190: ; preds = %172
%191 = load double, double* %30
br label %192
192: ; preds = %190, %189
%193 = phi double [ 0.000000e+00, %189 ], [ %191, %190 ]
store double %193, double* %6
br label %194
194: ; preds = %192, %56, %45
%195 = load double, double* %6
ret double %195
}

LLVM IR (-O2):
define double @dcs_bremsstrahlung_KKP(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, 0.000000e+00
%14 = or i1 %12, %13
br i1 %14, label %99, label %15
15: ; preds = %5
%16 = tail call double @pow(double %0, double 0x3FD5555555555555)
%17 = tail call double @llvm.fmuladd.f64(double %16, double 0xBFF3C8DF2AA5F982, double 1.000000e+00)
%18 = tail call double @llvm.fmuladd.f64(double %2, double %17, double %3)
%19 = fcmp ugt double %18, %4
br i1 %19, label %20, label %99
20: ; preds = %15
%21 = fdiv double %2, 0x3E9CE42C3392D36B
%22 = fdiv double 0x3CB4C087CCB0712E, %2
%23 = tail call double @radiation_logarithm(double %0)
%24 = fdiv double %23, %16
%25 = fcmp oeq double %0, 1.000000e+00
br i1 %25, label %29, label %26
26: ; preds = %20
%27 = fmul double %16, %16
%28 = fdiv double 1.429000e+03, %27
br label %29
29: ; preds = %20, %26
%30 = phi double [ %28, %26 ], [ 4.460000e+02, %20 ]
%31 = tail call double @pow(double %1, double 2.700000e-01)
%32 = fmul double %31, 1.540000e+00
%33 = fadd double %2, %3
%34 = fmul double %22, 0x3EA87C3B4AB36001
%35 = fmul double %22, %34
%36 = fmul double %35, %0
%37 = fdiv double %36, %33
%38 = fmul double %2, 5.000000e-01
%39 = fmul double %38, %2
%40 = fmul double %33, 0x3F40BE91CDA9B5D6
%41 = fdiv double %39, %40
%42 = fadd double %41, 1.000000e+00
%43 = fdiv double %33, %42
%44 = insertelement <2 x double> poison, double %4, i64 1
%45 = insertelement <2 x double> %44, double %39, i64 0
%46 = insertelement <2 x double> poison, double %33, i64 0
%47 = shufflevector <2 x double> %46, <2 x double> poison, <2 x i32> zeroinitializer
%48 = fdiv <2 x double> %45, %47
%49 = extractelement <2 x double> %48, i64 0
%50 = extractelement <2 x double> %48, i64 1
%51 = fmul double %49, %50
%52 = fsub double 1.000000e+00, %50
%53 = fdiv double %51, %52
%54 = tail call double @llvm.fmuladd.f64(double %32, double 0x3FFA61298E32A203, double -2.000000e+00)
%55 = tail call double @llvm.fmuladd.f64(double %53, double %54, double %2)
%56 = fmul double %24, %55
%57 = fmul double %53, 0x3FFA61298E32A203
%58 = tail call double @llvm.fmuladd.f64(double %57, double %24, double 0x3F40BE91CDA9B5D6)
%59 = fmul double %58, %32
%60 = fdiv double %56, %59
%61 = tail call double @log(double %60)
%62 = fcmp olt double %61, 0.000000e+00
%63 = select i1 %62, double 0.000000e+00, double %61
%64 = fcmp ult double %0, 2.000000e+00
br i1 %64, label %71, label %65
65: ; preds = %29
%66 = fmul double %32, %2
%67 = fdiv double %66, %55
%68 = tail call double @log(double %67)
%69 = fcmp olt double %68, 0.000000e+00
br i1 %69, label %70, label %71
70: ; preds = %65
br label %71
71: ; preds = %29, %65, %70
%72 = phi double [ 0.000000e+00, %70 ], [ %68, %65 ], [ 0.000000e+00, %29 ]
%73 = fcmp ogt double %43, %4
br i1 %73, label %74, label %88
74: ; preds = %71
%75 = fmul double %30, %2
%76 = insertelement <2 x double> poison, double %53, i64 0
%77 = insertelement <2 x double> %76, double %57, i64 1
%78 = insertelement <2 x double> poison, double %21, i64 0
%79 = insertelement <2 x double> %78, double %30, i64 1
%80 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %77, <2 x double> %79, <2 x double> <double 1.000000e+00, double 0x3F40BE91CDA9B5D6>)
%81 = shufflevector <2 x double> %80, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%82 = fmul <2 x double> %80, %81
%83 = extractelement <2 x double> %82, i64 0
%84 = fdiv double %75, %83
%85 = tail call double @log(double %84)
%86 = fcmp olt double %85, 0.000000e+00
br i1 %86, label %87, label %88
87: ; preds = %74
br label %88
88: ; preds = %71, %74, %87
%89 = phi double [ 0.000000e+00, %87 ], [ %85, %74 ], [ 0.000000e+00, %71 ]
%90 = tail call double @llvm.fmuladd.f64(double %0, double %63, double %72)
%91 = fadd double %90, %89
%92 = fmul double %37, %91
%93 = fdiv double 1.000000e+00, %50
%94 = fadd double %93, -1.000000e+00
%95 = tail call double @llvm.fmuladd.f64(double %94, double 0x3FF5555555555555, double %50)
%96 = fmul double %95, %92
%97 = fcmp olt double %96, 0.000000e+00
%98 = select i1 %97, double 0.000000e+00, double %96
br label %99
99: ; preds = %88, %15, %5
%100 = phi double [ 0.000000e+00, %5 ], [ %98, %88 ], [ 0.000000e+00, %15 ]
ret double %100
}