#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 sqrt(double);
double gsw_latentheat_melting(double sa, double p) {
  double c0 = 3.334265169240710e5, c1 = -2.789444646733159e0,
         c2 = -1.822150156453350e4, c3 = -4.984585692734338e3,
         c4 = -7.371966528571920e1, c5 = -7.605802553358546e3,
         c6 = 1.195857305019339e3, c7 = 1.233720336206392e3,
         c8 = 2.294798676591890e2, c9 = 9.655751370889338e2,
         c10 = -5.792068522727968e2, c11 = -1.649446955902331e3,
         c12 = -1.029021448430547e3, c13 = -3.171558017172501e2,
         c14 = -1.751401389905041e2, c15 = 6.836527214265952e2,
         c16 = 1.078283734113611e3, c17 = 5.613896351265648e2,
         c18 = 6.968934948667265e2, c19 = 1.793032021946783e2,
         c20 = 8.692558481134256e1, c21 = -2.371103254714944e2,
         c22 = -5.775033277201674e2, c23 = -3.019749254648732e2,
         c24 = -6.420420579160927e2, c25 = -2.657570848596042e2,
         c26 = -1.646738151143109e1, c27 = 4.618228988300871e0;
  double s_u, x, y;
  s_u = 40e0 * (35.16504e0 / 35e0);
  x = sqrt(sa / s_u);
  y = p * 1e-4;
  return (c0 +
          x * (c1 + c4 * y +
               x * (c3 + y * (c7 + c12 * y) +
                    x * (c6 + y * (c11 + y * (c17 + c24 * y)) +
                         x * (c10 + y * (c16 + c23 * y) +
                              x * (c15 + c22 * y + c21 * x))))) +
          y * (c2 + y * (c5 + c8 * x +
                         y * (c9 + x * (c13 + c18 * x) +
                              y * (c14 + x * (c19 + c25 * x) +
                                   y * (c20 + c26 * x + c27 * y))))));
}


x86 assembly (clang, -O0):
<gsw_latentheat_melting>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  0xfbb(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xfa6(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xf91(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xf7c(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xf67(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xf52(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xf3d(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xf28(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xf13(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xefe(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xee9(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xed4(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xebf(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xeaa(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xe95(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xe7d(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xe65(%rip),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xe4d(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xe35(%rip),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xe1d(%rip),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xe05(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xded(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xdd5(%rip),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xdbd(%rip),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0xda5(%rip),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xd8d(%rip),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0xd75(%rip),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0xd5d(%rip),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  0xd45(%rip),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
divsd  -0xf8(%rbp),%xmm0
ff
call   1030 <sqrt@plt>
movsd  %xmm0,-0x100(%rbp)
ff
movsd  0xd13(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  -0x100(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
movsd  -0x108(%rbp),%xmm4
ff
mulsd  %xmm4,%xmm3
addsd  %xmm2,%xmm3
movsd  -0x100(%rbp),%xmm2
ff
movsd  -0x30(%rbp),%xmm4
movsd  -0x108(%rbp),%xmm5
ff
movsd  -0x50(%rbp),%xmm7
movsd  -0x78(%rbp),%xmm6
movsd  -0x108(%rbp),%xmm8
ff ff
mulsd  %xmm8,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm6,%xmm5
addsd  %xmm4,%xmm5
movsd  -0x100(%rbp),%xmm4
ff
movsd  -0x48(%rbp),%xmm6
movsd  -0x108(%rbp),%xmm7
ff
movsd  -0x70(%rbp),%xmm9
movsd  -0x108(%rbp),%xmm8
ff ff
movsd  -0xa0(%rbp),%xmm11
ff ff
movsd  -0xd8(%rbp),%xmm10
ff ff
movsd  -0x108(%rbp),%xmm12
ff ff
mulsd  %xmm12,%xmm10
addsd  %xmm11,%xmm10
mulsd  %xmm10,%xmm8
addsd  %xmm9,%xmm8
mulsd  %xmm8,%xmm7
addsd  %xmm6,%xmm7
movsd  -0x100(%rbp),%xmm6
ff
movsd  -0x68(%rbp),%xmm8
movsd  -0x108(%rbp),%xmm9
ff ff
movsd  -0x98(%rbp),%xmm11
ff ff
movsd  -0xd0(%rbp),%xmm10
ff ff
movsd  -0x108(%rbp),%xmm12
ff ff
mulsd  %xmm12,%xmm10
addsd  %xmm11,%xmm10
mulsd  %xmm10,%xmm9
addsd  %xmm8,%xmm9
movsd  -0x100(%rbp),%xmm8
ff ff
movsd  -0x90(%rbp),%xmm10
ff ff
movsd  -0xc8(%rbp),%xmm11
ff ff
movsd  -0x108(%rbp),%xmm12
ff ff
mulsd  %xmm12,%xmm11
addsd  %xmm10,%xmm11
movsd  -0xc0(%rbp),%xmm10
ff ff
movsd  -0x100(%rbp),%xmm12
ff ff
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,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x108(%rbp),%xmm0
ff
movsd  -0x28(%rbp),%xmm3
movsd  -0x108(%rbp),%xmm2
ff
movsd  -0x40(%rbp),%xmm4
movsd  -0x58(%rbp),%xmm5
movsd  -0x100(%rbp),%xmm6
ff
mulsd  %xmm6,%xmm5
addsd  %xmm4,%xmm5
movsd  -0x108(%rbp),%xmm4
ff
movsd  -0x60(%rbp),%xmm6
movsd  -0x100(%rbp),%xmm7
ff
movsd  -0x80(%rbp),%xmm9
movsd  -0xa8(%rbp),%xmm8
ff ff
movsd  -0x100(%rbp),%xmm10
ff ff
mulsd  %xmm10,%xmm8
addsd  %xmm9,%xmm8
mulsd  %xmm8,%xmm7
addsd  %xmm6,%xmm7
movsd  -0x108(%rbp),%xmm6
ff
movsd  -0x88(%rbp),%xmm8
ff ff
movsd  -0x100(%rbp),%xmm9
ff ff
movsd  -0xb0(%rbp),%xmm11
ff ff
movsd  -0xe0(%rbp),%xmm10
ff ff
movsd  -0x100(%rbp),%xmm12
ff ff
mulsd  %xmm12,%xmm10
addsd  %xmm11,%xmm10
mulsd  %xmm10,%xmm9
addsd  %xmm8,%xmm9
movsd  -0x108(%rbp),%xmm8
ff ff
movsd  -0xb8(%rbp),%xmm10
ff ff
movsd  -0xe8(%rbp),%xmm11
ff ff
movsd  -0x100(%rbp),%xmm12
ff ff
mulsd  %xmm12,%xmm11
addsd  %xmm10,%xmm11
movsd  -0xf0(%rbp),%xmm10
ff ff
movsd  -0x108(%rbp),%xmm12
ff ff
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
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gsw_latentheat_melting>:
push   %rax
divsd  0xee7(%rip),%xmm0
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
jb     1129 <gsw_latentheat_melting+0x19>
sqrtsd %xmm0,%xmm0
jmp    1138 <gsw_latentheat_melting+0x28>
movsd  %xmm1,(%rsp)
call   1030 <sqrt@plt>
movsd  (%rsp),%xmm1
mulsd  0xec8(%rip),%xmm1
movsd  0xec8(%rip),%xmm7
mulsd  %xmm1,%xmm7
addsd  0xec4(%rip),%xmm7
movsd  0xec4(%rip),%xmm3
mulsd  %xmm1,%xmm3
addsd  0xec0(%rip),%xmm3
mulsd  %xmm1,%xmm3
addsd  0xebc(%rip),%xmm3
movsd  0xebc(%rip),%xmm4
mulsd  %xmm1,%xmm4
addsd  0xeb8(%rip),%xmm4
mulsd  %xmm1,%xmm4
addsd  0xeb4(%rip),%xmm4
mulsd  %xmm1,%xmm4
addsd  0xeb0(%rip),%xmm4
movsd  0xeb0(%rip),%xmm5
mulsd  %xmm1,%xmm5
addsd  0xeac(%rip),%xmm5
mulsd  %xmm1,%xmm5
addsd  0xea8(%rip),%xmm5
movsd  0xea8(%rip),%xmm6
mulsd  %xmm1,%xmm6
addsd  0xea4(%rip),%xmm6
movsd  0xea4(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm6,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm5,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm4,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm7,%xmm2
mulsd  %xmm0,%xmm2
addsd  0xe78(%rip),%xmm2
movsd  0xe78(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xe74(%rip),%xmm3
movsd  0xe74(%rip),%xmm4
mulsd  %xmm0,%xmm4
addsd  0xe70(%rip),%xmm4
mulsd  %xmm0,%xmm4
addsd  0xe6c(%rip),%xmm4
movsd  0xe6c(%rip),%xmm5
mulsd  %xmm0,%xmm5
addsd  0xe68(%rip),%xmm5
mulsd  %xmm0,%xmm5
addsd  0xe64(%rip),%xmm5
mulsd  0xe64(%rip),%xmm0
addsd  0xe64(%rip),%xmm0
movsd  0xe64(%rip),%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm0,%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm5,%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm4,%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm3,%xmm6
mulsd  %xmm1,%xmm6
addsd  0xe40(%rip),%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm2,%xmm6
movapd %xmm6,%xmm0
pop    %rax
ret

LLVM IR (-O0):
define double @gsw_latentheat_melting(double %0, double %1) {
%3 = alloca double
%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
store double %0, double* %3
store double %1, double* %4
store double 0x411459CA11548B2E, double* %5
store double 0xC00650C85ADDC500, double* %6
store double 0xC0D1CB6019A2210E, double* %7
store double 0xC0B37895EFF5837D, double* %8
store double 0xC0526E0EFEFC8EC0, double* %9
store double 0xC0BDB5CD74230C40, double* %10
store double 0x4092AF6DE15DF308, double* %11
store double 0x409346E19FD08250, double* %12
store double 0x406CAF5B136BD3FF, double* %13
store double 0x408E2C99E1795D80, double* %14
store double 0xC08219A7A22A1620, double* %15
store double 0xC099C5C9AECEDD10, double* %16
store double 0xC0901415F693CF00, double* %17
store double 0xC073D27E29F103FF, double* %18
store double 0xC065E47C04C3A382, double* %19
store double 0x40855D38C602E500, double* %20
store double 0x4090D9228B320AE0, double* %21
store double 0x40818B1DF9056FC0, double* %22
store double 0x4085C725E0A2FDE0, double* %23
store double 0x406669B3D516C700, double* %24
store double 0x4055BB3CC8139900, double* %25
store double 0xC06DA387C9487F7F, double* %26
store double 0xC0820C06D0AF0A50, double* %27
store double 0xC072DF994B71BAB0, double* %28
store double 0xC08410562275F140, double* %29
store double 0xC0709C1D050384C0, double* %30
store double 0xC03077A650925A01, double* %31
store double 0x401279110518C400, double* %32
store double 0x404418249B4604A8, double* %33
%36 = load double, double* %3
%37 = load double, double* %33
%38 = fdiv double %36, %37
%39 = call double @sqrt(double %38)
store double %39, double* %34
%40 = load double, double* %4
%41 = fmul double %40, 1.000000e-04
store double %41, double* %35
%42 = load double, double* %5
%43 = load double, double* %34
%44 = load double, double* %6
%45 = load double, double* %9
%46 = load double, double* %35
%47 = call double @llvm.fmuladd.f64(double %45, double %46, double %44)
%48 = load double, double* %34
%49 = load double, double* %8
%50 = load double, double* %35
%51 = load double, double* %12
%52 = load double, double* %17
%53 = load double, double* %35
%54 = call double @llvm.fmuladd.f64(double %52, double %53, double %51)
%55 = call double @llvm.fmuladd.f64(double %50, double %54, double %49)
%56 = load double, double* %34
%57 = load double, double* %11
%58 = load double, double* %35
%59 = load double, double* %16
%60 = load double, double* %35
%61 = load double, double* %22
%62 = load double, double* %29
%63 = load double, double* %35
%64 = call double @llvm.fmuladd.f64(double %62, double %63, double %61)
%65 = call double @llvm.fmuladd.f64(double %60, double %64, double %59)
%66 = call double @llvm.fmuladd.f64(double %58, double %65, double %57)
%67 = load double, double* %34
%68 = load double, double* %15
%69 = load double, double* %35
%70 = load double, double* %21
%71 = load double, double* %28
%72 = load double, double* %35
%73 = call double @llvm.fmuladd.f64(double %71, double %72, double %70)
%74 = call double @llvm.fmuladd.f64(double %69, double %73, double %68)
%75 = load double, double* %34
%76 = load double, double* %20
%77 = load double, double* %27
%78 = load double, double* %35
%79 = call double @llvm.fmuladd.f64(double %77, double %78, double %76)
%80 = load double, double* %26
%81 = load double, double* %34
%82 = call double @llvm.fmuladd.f64(double %80, double %81, double %79)
%83 = call double @llvm.fmuladd.f64(double %75, double %82, double %74)
%84 = call double @llvm.fmuladd.f64(double %67, double %83, double %66)
%85 = call double @llvm.fmuladd.f64(double %56, double %84, double %55)
%86 = call double @llvm.fmuladd.f64(double %48, double %85, double %47)
%87 = call double @llvm.fmuladd.f64(double %43, double %86, double %42)
%88 = load double, double* %35
%89 = load double, double* %7
%90 = load double, double* %35
%91 = load double, double* %10
%92 = load double, double* %13
%93 = load double, double* %34
%94 = call double @llvm.fmuladd.f64(double %92, double %93, double %91)
%95 = load double, double* %35
%96 = load double, double* %14
%97 = load double, double* %34
%98 = load double, double* %18
%99 = load double, double* %23
%100 = load double, double* %34
%101 = call double @llvm.fmuladd.f64(double %99, double %100, double %98)
%102 = call double @llvm.fmuladd.f64(double %97, double %101, double %96)
%103 = load double, double* %35
%104 = load double, double* %19
%105 = load double, double* %34
%106 = load double, double* %24
%107 = load double, double* %30
%108 = load double, double* %34
%109 = call double @llvm.fmuladd.f64(double %107, double %108, double %106)
%110 = call double @llvm.fmuladd.f64(double %105, double %109, double %104)
%111 = load double, double* %35
%112 = load double, double* %25
%113 = load double, double* %31
%114 = load double, double* %34
%115 = call double @llvm.fmuladd.f64(double %113, double %114, double %112)
%116 = load double, double* %32
%117 = load double, double* %35
%118 = call double @llvm.fmuladd.f64(double %116, double %117, double %115)
%119 = call double @llvm.fmuladd.f64(double %111, double %118, double %110)
%120 = call double @llvm.fmuladd.f64(double %103, double %119, double %102)
%121 = call double @llvm.fmuladd.f64(double %95, double %120, double %94)
%122 = call double @llvm.fmuladd.f64(double %90, double %121, double %89)
%123 = call double @llvm.fmuladd.f64(double %88, double %122, double %87)
ret double %123
}

LLVM IR (-O2):
define double @gsw_latentheat_melting(double %0, double %1) {
%3 = fdiv double %0, 0x404418249B4604A8
%4 = tail call double @sqrt(double %3)
%5 = fmul double %1, 1.000000e-04
%6 = tail call double @llvm.fmuladd.f64(double %5, double 0xC0526E0EFEFC8EC0, double 0xC00650C85ADDC500)
%7 = tail call double @llvm.fmuladd.f64(double %5, double 0xC0901415F693CF00, double 0x409346E19FD08250)
%8 = tail call double @llvm.fmuladd.f64(double %5, double %7, double 0xC0B37895EFF5837D)
%9 = tail call double @llvm.fmuladd.f64(double %5, double 0xC08410562275F140, double 0x40818B1DF9056FC0)
%10 = tail call double @llvm.fmuladd.f64(double %5, double %9, double 0xC099C5C9AECEDD10)
%11 = tail call double @llvm.fmuladd.f64(double %5, double %10, double 0x4092AF6DE15DF308)
%12 = tail call double @llvm.fmuladd.f64(double %5, double 0xC072DF994B71BAB0, double 0x4090D9228B320AE0)
%13 = tail call double @llvm.fmuladd.f64(double %5, double %12, double 0xC08219A7A22A1620)
%14 = tail call double @llvm.fmuladd.f64(double %5, double 0xC0820C06D0AF0A50, double 0x40855D38C602E500)
%15 = tail call double @llvm.fmuladd.f64(double %4, double 0xC06DA387C9487F7F, double %14)
%16 = tail call double @llvm.fmuladd.f64(double %4, double %15, double %13)
%17 = tail call double @llvm.fmuladd.f64(double %4, double %16, double %11)
%18 = tail call double @llvm.fmuladd.f64(double %4, double %17, double %8)
%19 = tail call double @llvm.fmuladd.f64(double %4, double %18, double %6)
%20 = tail call double @llvm.fmuladd.f64(double %4, double %19, double 0x411459CA11548B2E)
%21 = tail call double @llvm.fmuladd.f64(double %4, double 0x406CAF5B136BD3FF, double 0xC0BDB5CD74230C40)
%22 = tail call double @llvm.fmuladd.f64(double %4, double 0x4085C725E0A2FDE0, double 0xC073D27E29F103FF)
%23 = tail call double @llvm.fmuladd.f64(double %4, double %22, double 0x408E2C99E1795D80)
%24 = tail call double @llvm.fmuladd.f64(double %4, double 0xC0709C1D050384C0, double 0x406669B3D516C700)
%25 = tail call double @llvm.fmuladd.f64(double %4, double %24, double 0xC065E47C04C3A382)
%26 = tail call double @llvm.fmuladd.f64(double %4, double 0xC03077A650925A01, double 0x4055BB3CC8139900)
%27 = tail call double @llvm.fmuladd.f64(double %5, double 0x401279110518C400, double %26)
%28 = tail call double @llvm.fmuladd.f64(double %5, double %27, double %25)
%29 = tail call double @llvm.fmuladd.f64(double %5, double %28, double %23)
%30 = tail call double @llvm.fmuladd.f64(double %5, double %29, double %21)
%31 = tail call double @llvm.fmuladd.f64(double %5, double %30, double 0xC0D1CB6019A2210E)
%32 = tail call double @llvm.fmuladd.f64(double %5, double %31, double %20)
ret double %32
}