#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_evap_ct(double sa, double ct) {
  double c0 = 2.499065844825125e6, c1 = -1.544590633515099e-1,
         c2 = -9.096800915831875e4, c3 = 1.665513670736000e2,
         c4 = 4.589984751248335e1, c5 = 1.894281502222415e1,
         c6 = 1.192559661490269e3, c7 = -6.631757848479068e3,
         c8 = -1.104989199195898e2, c9 = -1.207006482532330e3,
         c10 = -3.148710097513822e3, c11 = 7.437431482069087e2,
         c12 = 2.519335841663499e3, c13 = 1.186568375570869e1,
         c14 = 5.731307337366114e2, c15 = 1.213387273240204e3,
         c16 = 1.062383995581363e3, c17 = -6.399956483223386e2,
         c18 = -1.541083032068263e3, c19 = 8.460780175632090e1,
         c20 = -3.233571307223379e2, c21 = -2.031538422351553e2,
         c22 = 4.351585544019463e1, c23 = -8.062279018001309e2,
         c24 = 7.510134932437941e2, c25 = 1.797443329095446e2,
         c26 = -2.389853928747630e1, c27 = 1.021046205356775e2;
  double s_u, x, y;
  s_u = 40e0 * (35.16504e0 / 35e0);
  x = sqrt(sa / s_u);
  y = ct / 40;
  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_evap_ct>:
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  -0x10(%rbp),%xmm0
movsd  0xd0e(%rip),%xmm1
divsd  %xmm1,%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_evap_ct>:
push   %rax
divsd  0xee7(%rip),%xmm0
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
jb     1129 <gsw_latentheat_evap_ct+0x19>
sqrtsd %xmm0,%xmm0
jmp    1138 <gsw_latentheat_evap_ct+0x28>
movsd  %xmm1,(%rsp)
call   1030 <sqrt@plt>
movsd  (%rsp),%xmm1
divsd  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_evap_ct(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 0x414310FCEC233ACD, double* %5
store double 0xBFC3C55088D52FFF, double* %6
store double 0xC0F6358025833178, double* %7
store double 0x4064D1A4CC8FA681, double* %8
store double 0x4046F32E340AC060, double* %9
store double 0x4032F15C5346A157, double* %10
store double 0x4092A23D17E6D625, double* %11
store double 0xC0B9E7C2025BA0EC, double* %12
store double 0xC05B9FEE4DD07D83, double* %13
store double 0xC092DC06A35B6169, double* %14
store double 0xC0A8996B91E6BDAC, double* %15
store double 0x40873DF1F7AFE608, double* %16
store double 0x40A3AEABF37042BA, double* %17
store double 0x4027BB3AE6B6E501, double* %18
store double 0x4081E90BBE2119D7, double* %19
store double 0x4092F58C915B352B, double* %20
store double 0x4090998936233F0D, double* %21
store double 0xC083FFF71677B618, double* %22
store double 0xC0981455065BC6D6, double* %23
store double 0x405526E639567660, double* %24
store double 0xC07435B6CEB44D69, double* %25
store double 0xC06964EC468D178A, double* %26
store double 0x4045C2078D128CC0, double* %27
store double 0xC08931D2BE2DD218, double* %28
store double 0x4087781BA2588680, double* %29
store double 0x406677D1933FFA94, double* %30
store double 0xC037E606ABB5E1C1, double* %31
store double 0x405986B21A54CE64, 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 = fdiv double %40, 4.000000e+01
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_evap_ct(double %0, double %1) {
%3 = fdiv double %0, 0x404418249B4604A8
%4 = tail call double @sqrt(double %3)
%5 = fdiv double %1, 4.000000e+01
%6 = tail call double @llvm.fmuladd.f64(double %5, double 0x4046F32E340AC060, double 0xBFC3C55088D52FFF)
%7 = tail call double @llvm.fmuladd.f64(double %5, double 0x40A3AEABF37042BA, double 0xC0B9E7C2025BA0EC)
%8 = tail call double @llvm.fmuladd.f64(double %5, double %7, double 0x4064D1A4CC8FA681)
%9 = tail call double @llvm.fmuladd.f64(double %5, double 0x4087781BA2588680, double 0xC083FFF71677B618)
%10 = tail call double @llvm.fmuladd.f64(double %5, double %9, double 0x40873DF1F7AFE608)
%11 = tail call double @llvm.fmuladd.f64(double %5, double %10, double 0x4092A23D17E6D625)
%12 = tail call double @llvm.fmuladd.f64(double %5, double 0xC08931D2BE2DD218, double 0x4090998936233F0D)
%13 = tail call double @llvm.fmuladd.f64(double %5, double %12, double 0xC0A8996B91E6BDAC)
%14 = tail call double @llvm.fmuladd.f64(double %5, double 0x4045C2078D128CC0, double 0x4092F58C915B352B)
%15 = tail call double @llvm.fmuladd.f64(double %4, double 0xC06964EC468D178A, 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 0x414310FCEC233ACD)
%21 = tail call double @llvm.fmuladd.f64(double %4, double 0xC05B9FEE4DD07D83, double 0x4032F15C5346A157)
%22 = tail call double @llvm.fmuladd.f64(double %4, double 0xC0981455065BC6D6, double 0x4027BB3AE6B6E501)
%23 = tail call double @llvm.fmuladd.f64(double %4, double %22, double 0xC092DC06A35B6169)
%24 = tail call double @llvm.fmuladd.f64(double %4, double 0x406677D1933FFA94, double 0x405526E639567660)
%25 = tail call double @llvm.fmuladd.f64(double %4, double %24, double 0x4081E90BBE2119D7)
%26 = tail call double @llvm.fmuladd.f64(double %4, double 0xC037E606ABB5E1C1, double 0xC07435B6CEB44D69)
%27 = tail call double @llvm.fmuladd.f64(double %5, double 0x405986B21A54CE64, 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 0xC0F6358025833178)
%32 = tail call double @llvm.fmuladd.f64(double %5, double %31, double %20)
ret double %32
}