#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 gsw_hill_ratio_at_sp2(double);
double sqrt(double);
double gsw_sp_from_c(double c, double t, double p) {
  double a0 = 0.0080e0, a1 = -0.1692e0, a2 = 25.3851e0, a3 = 14.0941e0,
         a4 = -7.0261e0, a5 = 2.7081e0, b0 = 0.0005e0, b1 = -0.0056e0,
         b2 = -0.0066e0, b3 = -0.0375e0, b4 = 0.0636e0, b5 = -0.0144e0,
         c0 = 0.6766097e0, c1 = 2.00564e-2, c2 = 1.104259e-4, c3 = -6.9698e-7,
         c4 = 1.0031e-9, d1 = 3.426e-2, d2 = 4.464e-4, d3 = 4.215e-1,
         d4 = -3.107e-3, e1 = 2.070e-5, e2 = -6.370e-10, e3 = 3.989e-15,
         k = 0.0162;
  double sp, t68, ft68, r, rt_lc, rp, rt, rtx, hill_ratio, x, sqrty, part1,
      part2, sp_hill_raw;
  t68 = t * 1.00024e0;
  ft68 = (t68 - 15e0) / (1e0 + k * (t68 - 15e0));
  r = 0.023302418791070513e0 * c;
  rt_lc = c0 + (c1 + (c2 + (c3 + c4 * t68) * t68) * t68) * t68;
  rp = 1e0 + (p * (e1 + e2 * p + e3 * p * p)) /
                 (1e0 + d1 * t68 + d2 * t68 * t68 + (d3 + d4 * t68) * r);
  rt = r / (rp * rt_lc);
  if (rt < 0.0) {
    rt = 9e15;
  }
  rtx = sqrt(rt);
  sp = a0 + (a1 + (a2 + (a3 + (a4 + a5 * rtx) * rtx) * rtx) * rtx) * rtx +
       ft68 *
           (b0 + (b1 + (b2 + (b3 + (b4 + b5 * rtx) * rtx) * rtx) * rtx) * rtx);
  if (sp < 2) {
    hill_ratio = gsw_hill_ratio_at_sp2(t);
    x = 400e0 * rt;
    sqrty = 10e0 * rtx;
    part1 = 1e0 + x * (1.5e0 + x);
    part2 = 1e0 + sqrty * (1e0 + sqrty * (1e0 + sqrty));
    sp_hill_raw = sp - a0 / part1 - b0 * ft68 / part2;
    sp = hill_ratio * sp_hill_raw;
  }
  if (sp < 0.0) {
    sp = 9e15;
  }
  return (sp);
}


x86 assembly (clang, -O0):
<gsw_sp_from_c>:
push   %rbp
mov    %rsp,%rbp
sub    $0x150,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  0xf9e(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xf89(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xf74(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xf5f(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xf4a(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xf35(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xf20(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xf0b(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xef6(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xee1(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xecc(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xeb7(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xea2(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xe8d(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xe75(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xe5d(%rip),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xe45(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xe2d(%rip),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xe15(%rip),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xdfd(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xde5(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xdcd(%rip),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xdb5(%rip),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0xd9d(%rip),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xd85(%rip),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0xd6d(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
movsd  0xd48(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm2
ff
movsd  0xd2c(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd0c(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  0xcfc(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x80(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm3
ff
movsd  -0x98(%rbp),%xmm4
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm5
ff
mulsd  %xmm5,%xmm0
addsd  %xmm4,%xmm0
movsd  -0xf0(%rbp),%xmm4
ff
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
movsd  -0xf0(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
movsd  -0xf0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x18(%rbp),%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0x18(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
movsd  0xc1e(%rip),%xmm2
addsd  %xmm2,%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
mulsd  -0xf0(%rbp),%xmm2
ff
movsd  -0xf0(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
movsd  -0xb8(%rbp),%xmm3
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm4
ff
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
movsd  -0x100(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movsd  0xbbe(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0x110(%rbp),%xmm1
ff
mulsd  -0x108(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x118(%rbp),%xmm0
ff
jbe    1493 <gsw_sp_from_c+0x373>
movsd  0xc5d(%rip),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
call   1040 <sqrt@plt>
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm3
movsd  -0x38(%rbp),%xmm4
movsd  -0x40(%rbp),%xmm5
movsd  -0x48(%rbp),%xmm1
movsd  -0x120(%rbp),%xmm6
ff
mulsd  %xmm6,%xmm1
addsd  %xmm5,%xmm1
movsd  -0x120(%rbp),%xmm5
ff
mulsd  %xmm5,%xmm1
addsd  %xmm4,%xmm1
movsd  -0x120(%rbp),%xmm4
ff
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movsd  -0x120(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x120(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0x50(%rbp),%xmm3
movsd  -0x58(%rbp),%xmm4
movsd  -0x60(%rbp),%xmm5
movsd  -0x68(%rbp),%xmm6
movsd  -0x70(%rbp),%xmm7
movsd  -0x78(%rbp),%xmm2
movsd  -0x120(%rbp),%xmm8
ff ff
mulsd  %xmm8,%xmm2
addsd  %xmm7,%xmm2
movsd  -0x120(%rbp),%xmm7
ff
mulsd  %xmm7,%xmm2
addsd  %xmm6,%xmm2
movsd  -0x120(%rbp),%xmm6
ff
mulsd  %xmm6,%xmm2
addsd  %xmm5,%xmm2
movsd  -0x120(%rbp),%xmm5
ff
mulsd  %xmm5,%xmm2
addsd  %xmm4,%xmm2
movsd  -0x120(%rbp),%xmm4
ff
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0xb4a(%rip),%xmm0
ucomisd -0xe8(%rbp),%xmm0
ff
jbe    16c0 <gsw_sp_from_c+0x5a0>
movsd  -0x10(%rbp),%xmm0
call   1030 <gsw_hill_ratio_at_sp2@plt>
movsd  %xmm0,-0x128(%rbp)
ff
movsd  0xb3a(%rip),%xmm0
mulsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  0xb1a(%rip),%xmm0
mulsd  -0x120(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
movsd  0xaf2(%rip),%xmm1
addsd  -0x130(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  0x9e6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
movsd  -0x138(%rbp),%xmm1
ff
movsd  0x9c2(%rip),%xmm2
addsd  -0x138(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
movsd  0x9ae(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x99e(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x20(%rbp),%xmm1
divsd  -0x140(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  -0xf8(%rbp),%xmm1
ff
divsd  -0x148(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
mulsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xe8(%rbp),%xmm0
ff
jbe    16e1 <gsw_sp_from_c+0x5c1>
movsd  0xa0f(%rip),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
add    $0x150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gsw_sp_from_c>:
sub    $0x48,%rsp
movsd  0xed4(%rip),%xmm7
mulsd  %xmm1,%xmm7
movsd  0xed0(%rip),%xmm6
addsd  %xmm7,%xmm6
movsd  0xecc(%rip),%xmm4
mulsd  %xmm6,%xmm4
movsd  0xec7(%rip),%xmm8
addsd  %xmm8,%xmm4
mulsd  0xec2(%rip),%xmm0
movsd  0xec2(%rip),%xmm3
mulsd  %xmm7,%xmm3
addsd  0xebe(%rip),%xmm3
divsd  %xmm4,%xmm6
mulsd  %xmm7,%xmm3
addsd  0xeb6(%rip),%xmm3
mulsd  %xmm7,%xmm3
addsd  0xeb2(%rip),%xmm3
mulsd  %xmm7,%xmm3
addsd  0xeae(%rip),%xmm3
movsd  0xeae(%rip),%xmm5
mulsd  %xmm2,%xmm5
addsd  0xeaa(%rip),%xmm5
movsd  0xeaa(%rip),%xmm4
mulsd  %xmm2,%xmm4
mulsd  %xmm2,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm2,%xmm4
movsd  0xe9a(%rip),%xmm2
mulsd  %xmm7,%xmm2
addsd  %xmm8,%xmm2
movsd  0xe91(%rip),%xmm5
mulsd  %xmm7,%xmm5
mulsd  %xmm7,%xmm5
addsd  %xmm2,%xmm5
mulsd  0xe85(%rip),%xmm7
addsd  0xe85(%rip),%xmm7
mulsd  %xmm0,%xmm7
addsd  %xmm5,%xmm7
divsd  %xmm7,%xmm4
addsd  %xmm8,%xmm4
mulsd  %xmm3,%xmm4
divsd  %xmm4,%xmm0
xorpd  %xmm3,%xmm3
movapd %xmm0,%xmm4
cmpltsd %xmm3,%xmm4
movapd %xmm4,%xmm2
andnpd %xmm0,%xmm2
movsd  0xe57(%rip),%xmm0
andpd  %xmm0,%xmm4
orpd   %xmm2,%xmm4
ucomisd %xmm3,%xmm4
movapd %xmm6,0x10(%rsp)
movapd %xmm4,0x30(%rsp)
jb     1254 <gsw_sp_from_c+0x134>
xorps  %xmm2,%xmm2
sqrtsd %xmm4,%xmm2
jmp    1271 <gsw_sp_from_c+0x151>
movapd %xmm4,%xmm0
movsd  %xmm1,(%rsp)
call   1040 <sqrt@plt>
movsd  (%rsp),%xmm1
movapd 0x10(%rsp),%xmm6
movapd %xmm0,%xmm2
movsd  0xe17(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0xe13(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0xe0f(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0xe0b(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0xe07(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0xe03(%rip),%xmm0
movsd  0xe03(%rip),%xmm3
mulsd  %xmm2,%xmm3
addsd  0xdff(%rip),%xmm3
mulsd  %xmm2,%xmm3
addsd  0xdfb(%rip),%xmm3
mulsd  %xmm2,%xmm3
addsd  0xdf7(%rip),%xmm3
mulsd  %xmm2,%xmm3
addsd  0xdf3(%rip),%xmm3
mulsd  %xmm2,%xmm3
addsd  0xdef(%rip),%xmm3
mulsd  %xmm6,%xmm3
addsd  %xmm0,%xmm3
movsd  0xde7(%rip),%xmm0
ucomisd %xmm3,%xmm0
jbe    13aa <gsw_sp_from_c+0x28a>
movapd %xmm1,%xmm0
movapd %xmm3,(%rsp)
movapd %xmm2,0x20(%rsp)
call   1030 <gsw_hill_ratio_at_sp2@plt>
movapd 0x30(%rsp),%xmm5
unpcklpd 0x20(%rsp),%xmm5
mulpd  0xdc5(%rip),%xmm5
movsd  0xdb5(%rip),%xmm1
addsd  %xmm5,%xmm1
movapd %xmm5,%xmm2
unpckhpd %xmm5,%xmm2
movapd %xmm2,%xmm3
movsd  0xcbd(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm2,%xmm3
addsd  %xmm4,%xmm3
unpcklpd %xmm3,%xmm1
movapd (%rsp),%xmm3
mulpd  %xmm5,%xmm1
addpd  0xd94(%rip),%xmm1
movapd 0x10(%rsp),%xmm4
mulsd  0xd5e(%rip),%xmm4
movapd 0xd8e(%rip),%xmm2
unpcklpd %xmm4,%xmm2
divpd  %xmm1,%xmm2
subsd  %xmm2,%xmm3
unpckhpd %xmm2,%xmm2
subsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm3
xorpd  %xmm1,%xmm1
movapd %xmm3,%xmm0
cmpltsd %xmm1,%xmm0
movsd  0xcc9(%rip),%xmm1
andpd  %xmm0,%xmm1
andnpd %xmm3,%xmm0
orpd   %xmm1,%xmm0
add    $0x48,%rsp
ret

LLVM IR (-O0):
define double @gsw_sp_from_c(double %0, double %1, double %2) {
%4 = alloca double
%5 = alloca double
%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
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
store double %0, double* %4
store double %1, double* %5
store double %2, double* %6
store double 8.000000e-03, double* %7
store double -1.692000e-01, double* %8
store double 2.538510e+01, double* %9
store double 1.409410e+01, double* %10
store double -7.026100e+00, double* %11
store double 2.708100e+00, double* %12
store double 5.000000e-04, double* %13
store double -5.600000e-03, double* %14
store double -6.600000e-03, double* %15
store double -3.750000e-02, double* %16
store double 6.360000e-02, double* %17
store double -1.440000e-02, double* %18
store double 0x3FE5A6C962B500FE, double* %19
store double 2.005640e-02, double* %20
store double 0x3F1CF28E843B034E, double* %21
store double -6.969800e-07, double* %22
store double 1.003100e-09, double* %23
store double 3.426000e-02, double* %24
store double 4.464000e-04, double* %25
store double 4.215000e-01, double* %26
store double -3.107000e-03, double* %27
store double 2.070000e-05, double* %28
store double -6.370000e-10, double* %29
store double 3.989000e-15, double* %30
store double 1.620000e-02, double* %31
%46 = load double, double* %5
%47 = fmul double %46, 1.000240e+00
store double %47, double* %33
%48 = load double, double* %33
%49 = fsub double %48, 1.500000e+01
%50 = load double, double* %31
%51 = load double, double* %33
%52 = fsub double %51, 1.500000e+01
%53 = call double @llvm.fmuladd.f64(double %50, double %52, double 1.000000e+00)
%54 = fdiv double %49, %53
store double %54, double* %34
%55 = load double, double* %4
%56 = fmul double 0x3F97DC96DA805A1A, %55
store double %56, double* %35
%57 = load double, double* %19
%58 = load double, double* %20
%59 = load double, double* %21
%60 = load double, double* %22
%61 = load double, double* %23
%62 = load double, double* %33
%63 = call double @llvm.fmuladd.f64(double %61, double %62, double %60)
%64 = load double, double* %33
%65 = call double @llvm.fmuladd.f64(double %63, double %64, double %59)
%66 = load double, double* %33
%67 = call double @llvm.fmuladd.f64(double %65, double %66, double %58)
%68 = load double, double* %33
%69 = call double @llvm.fmuladd.f64(double %67, double %68, double %57)
store double %69, double* %36
%70 = load double, double* %6
%71 = load double, double* %28
%72 = load double, double* %29
%73 = load double, double* %6
%74 = call double @llvm.fmuladd.f64(double %72, double %73, double %71)
%75 = load double, double* %30
%76 = load double, double* %6
%77 = fmul double %75, %76
%78 = load double, double* %6
%79 = call double @llvm.fmuladd.f64(double %77, double %78, double %74)
%80 = fmul double %70, %79
%81 = load double, double* %24
%82 = load double, double* %33
%83 = call double @llvm.fmuladd.f64(double %81, double %82, double 1.000000e+00)
%84 = load double, double* %25
%85 = load double, double* %33
%86 = fmul double %84, %85
%87 = load double, double* %33
%88 = call double @llvm.fmuladd.f64(double %86, double %87, double %83)
%89 = load double, double* %26
%90 = load double, double* %27
%91 = load double, double* %33
%92 = call double @llvm.fmuladd.f64(double %90, double %91, double %89)
%93 = load double, double* %35
%94 = call double @llvm.fmuladd.f64(double %92, double %93, double %88)
%95 = fdiv double %80, %94
%96 = fadd double 1.000000e+00, %95
store double %96, double* %37
%97 = load double, double* %35
%98 = load double, double* %37
%99 = load double, double* %36
%100 = fmul double %98, %99
%101 = fdiv double %97, %100
store double %101, double* %38
%102 = load double, double* %38
%103 = fcmp olt double %102, 0.000000e+00
br i1 %103, label %104, label %105
104: ; preds = %3
store double 9.000000e+15, double* %38
br label %105
105: ; preds = %104, %3
%106 = load double, double* %38
%107 = call double @sqrt(double %106)
store double %107, double* %39
%108 = load double, double* %7
%109 = load double, double* %8
%110 = load double, double* %9
%111 = load double, double* %10
%112 = load double, double* %11
%113 = load double, double* %12
%114 = load double, double* %39
%115 = call double @llvm.fmuladd.f64(double %113, double %114, double %112)
%116 = load double, double* %39
%117 = call double @llvm.fmuladd.f64(double %115, double %116, double %111)
%118 = load double, double* %39
%119 = call double @llvm.fmuladd.f64(double %117, double %118, double %110)
%120 = load double, double* %39
%121 = call double @llvm.fmuladd.f64(double %119, double %120, double %109)
%122 = load double, double* %39
%123 = call double @llvm.fmuladd.f64(double %121, double %122, double %108)
%124 = load double, double* %34
%125 = load double, double* %13
%126 = load double, double* %14
%127 = load double, double* %15
%128 = load double, double* %16
%129 = load double, double* %17
%130 = load double, double* %18
%131 = load double, double* %39
%132 = call double @llvm.fmuladd.f64(double %130, double %131, double %129)
%133 = load double, double* %39
%134 = call double @llvm.fmuladd.f64(double %132, double %133, double %128)
%135 = load double, double* %39
%136 = call double @llvm.fmuladd.f64(double %134, double %135, double %127)
%137 = load double, double* %39
%138 = call double @llvm.fmuladd.f64(double %136, double %137, double %126)
%139 = load double, double* %39
%140 = call double @llvm.fmuladd.f64(double %138, double %139, double %125)
%141 = call double @llvm.fmuladd.f64(double %124, double %140, double %123)
store double %141, double* %32
%142 = load double, double* %32
%143 = fcmp olt double %142, 2.000000e+00
br i1 %143, label %144, label %175
144: ; preds = %105
%145 = load double, double* %5
%146 = call double @gsw_hill_ratio_at_sp2(double %145)
store double %146, double* %40
%147 = load double, double* %38
%148 = fmul double 4.000000e+02, %147
store double %148, double* %41
%149 = load double, double* %39
%150 = fmul double 1.000000e+01, %149
store double %150, double* %42
%151 = load double, double* %41
%152 = load double, double* %41
%153 = fadd double 1.500000e+00, %152
%154 = call double @llvm.fmuladd.f64(double %151, double %153, double 1.000000e+00)
store double %154, double* %43
%155 = load double, double* %42
%156 = load double, double* %42
%157 = load double, double* %42
%158 = fadd double 1.000000e+00, %157
%159 = call double @llvm.fmuladd.f64(double %156, double %158, double 1.000000e+00)
%160 = call double @llvm.fmuladd.f64(double %155, double %159, double 1.000000e+00)
store double %160, double* %44
%161 = load double, double* %32
%162 = load double, double* %7
%163 = load double, double* %43
%164 = fdiv double %162, %163
%165 = fsub double %161, %164
%166 = load double, double* %13
%167 = load double, double* %34
%168 = fmul double %166, %167
%169 = load double, double* %44
%170 = fdiv double %168, %169
%171 = fsub double %165, %170
store double %171, double* %45
%172 = load double, double* %40
%173 = load double, double* %45
%174 = fmul double %172, %173
store double %174, double* %32
br label %175
175: ; preds = %144, %105
%176 = load double, double* %32
%177 = fcmp olt double %176, 0.000000e+00
br i1 %177, label %178, label %179
178: ; preds = %175
store double 9.000000e+15, double* %32
br label %179
179: ; preds = %178, %175
%180 = load double, double* %32
ret double %180
}

LLVM IR (-O2):
define double @gsw_sp_from_c(double %0, double %1, double %2) {
%4 = fmul double %1, 1.000240e+00
%5 = fadd double %4, -1.500000e+01
%6 = tail call double @llvm.fmuladd.f64(double %5, double 1.620000e-02, double 1.000000e+00)
%7 = fdiv double %5, %6
%8 = fmul double %0, 0x3F97DC96DA805A1A
%9 = tail call double @llvm.fmuladd.f64(double %4, double 1.003100e-09, double -6.969800e-07)
%10 = tail call double @llvm.fmuladd.f64(double %9, double %4, double 0x3F1CF28E843B034E)
%11 = tail call double @llvm.fmuladd.f64(double %10, double %4, double 2.005640e-02)
%12 = tail call double @llvm.fmuladd.f64(double %11, double %4, double 0x3FE5A6C962B500FE)
%13 = tail call double @llvm.fmuladd.f64(double %2, double -6.370000e-10, double 2.070000e-05)
%14 = fmul double %2, 3.989000e-15
%15 = tail call double @llvm.fmuladd.f64(double %14, double %2, double %13)
%16 = fmul double %15, %2
%17 = tail call double @llvm.fmuladd.f64(double %4, double 3.426000e-02, double 1.000000e+00)
%18 = fmul double %4, 4.464000e-04
%19 = tail call double @llvm.fmuladd.f64(double %18, double %4, double %17)
%20 = tail call double @llvm.fmuladd.f64(double %4, double -3.107000e-03, double 4.215000e-01)
%21 = tail call double @llvm.fmuladd.f64(double %20, double %8, double %19)
%22 = fdiv double %16, %21
%23 = fadd double %22, 1.000000e+00
%24 = fmul double %12, %23
%25 = fdiv double %8, %24
%26 = fcmp olt double %25, 0.000000e+00
%27 = select i1 %26, double 9.000000e+15, double %25
%28 = tail call double @sqrt(double %27)
%29 = tail call double @llvm.fmuladd.f64(double %28, double 2.708100e+00, double -7.026100e+00)
%30 = tail call double @llvm.fmuladd.f64(double %29, double %28, double 1.409410e+01)
%31 = tail call double @llvm.fmuladd.f64(double %30, double %28, double 2.538510e+01)
%32 = tail call double @llvm.fmuladd.f64(double %31, double %28, double -1.692000e-01)
%33 = tail call double @llvm.fmuladd.f64(double %32, double %28, double 8.000000e-03)
%34 = tail call double @llvm.fmuladd.f64(double %28, double -1.440000e-02, double 6.360000e-02)
%35 = tail call double @llvm.fmuladd.f64(double %34, double %28, double -3.750000e-02)
%36 = tail call double @llvm.fmuladd.f64(double %35, double %28, double -6.600000e-03)
%37 = tail call double @llvm.fmuladd.f64(double %36, double %28, double -5.600000e-03)
%38 = tail call double @llvm.fmuladd.f64(double %37, double %28, double 5.000000e-04)
%39 = tail call double @llvm.fmuladd.f64(double %7, double %38, double %33)
%40 = fcmp olt double %39, 2.000000e+00
br i1 %40, label %41, label %62
41: ; preds = %3
%42 = tail call double @gsw_hill_ratio_at_sp2(double %1)
%43 = insertelement <2 x double> poison, double %27, i64 0
%44 = insertelement <2 x double> %43, double %28, i64 1
%45 = fmul <2 x double> %44, <double 4.000000e+02, double 1.000000e+01>
%46 = extractelement <2 x double> %45, i64 0
%47 = fadd double %46, 1.500000e+00
%48 = extractelement <2 x double> %45, i64 1
%49 = fadd double %48, 1.000000e+00
%50 = tail call double @llvm.fmuladd.f64(double %48, double %49, double 1.000000e+00)
%51 = insertelement <2 x double> poison, double %47, i64 0
%52 = insertelement <2 x double> %51, double %50, i64 1
%53 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %45, <2 x double> %52, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
%54 = fmul double %7, 5.000000e-04
%55 = insertelement <2 x double> <double 8.000000e-03, double poison>, double %54, i64 1
%56 = fdiv <2 x double> %55, %53
%57 = extractelement <2 x double> %56, i64 0
%58 = fsub double %39, %57
%59 = extractelement <2 x double> %56, i64 1
%60 = fsub double %58, %59
%61 = fmul double %60, %42
br label %62
62: ; preds = %41, %3
%63 = phi double [ %61, %41 ], [ %39, %3 ]
%64 = fcmp olt double %63, 0.000000e+00
%65 = select i1 %64, double 9.000000e+15, double %63
ret double %65
}