#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 log10f(float);
float powf(double, float);
float goff(float t) {
  float log10p, ra, ra1, rb;
  ra = 273.16 / t;
  ra1 = 1.0 - ra;
  rb = t / 273.16;
  log10p = 10.79574 * ra1 - 5.02800 * log10f(rb) +
           1.50475e-4 * (1.0 - powf(10.0, -8.2969 * (rb - 1.0))) +
           0.42873e-3 * (powf(10.0, 4.76955 * ra1) - 1.0) + 0.78614;
  return (powf(10.0, log10p));
}


x86 assembly (clang, -O0):
<goff>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xf0a(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xebc(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xece(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movss  -0x14(%rbp),%xmm0
call   1040 <log10f@plt>
movaps %xmm0,%xmm2
movsd  -0x30(%rbp),%xmm0
movsd  0xe91(%rip),%xmm1
mulsd  %xmm2,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xe66(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe28(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xe34(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm1
movsd  0xdf4(%rip),%xmm0
call   1030 <powf@plt>
movsd  -0x28(%rbp),%xmm1
cvtss2sd %xmm0,%xmm2
movsd  0xdf6(%rip),%xmm0
subsd  %xmm2,%xmm0
movsd  0xdfa(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdd4(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm1
movsd  0xda4(%rip),%xmm0
call   1030 <powf@plt>
movsd  -0x20(%rbp),%xmm1
cvtss2sd %xmm0,%xmm0
movsd  0xda6(%rip),%xmm2
subsd  %xmm2,%xmm0
movsd  0xd92(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xd7a(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm1
movsd  0xd58(%rip),%xmm0
call   1030 <powf@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<goff>:
sub    $0x18,%rsp
cvtss2sd %xmm0,%xmm0
movsd  0xed0(%rip),%xmm1
movapd %xmm1,%xmm2
divsd  %xmm0,%xmm2
cvtsd2ss %xmm2,%xmm2
movss  0xf14(%rip),%xmm3
subss  %xmm2,%xmm3
divsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movss  %xmm1,0xc(%rsp)
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
movsd  %xmm0,0x10(%rsp)
movaps %xmm1,%xmm0
call   1040 <log10f@plt>
mulsd  0xe92(%rip),%xmm0
movsd  0xe92(%rip),%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movss  0xc(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xe79(%rip),%xmm0
mulsd  0xe79(%rip),%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movsd  0xe72(%rip),%xmm0
call   1030 <powf@plt>
cvtss2sd %xmm0,%xmm0
movsd  0xe69(%rip),%xmm1
subsd  %xmm0,%xmm1
mulsd  0xe65(%rip),%xmm1
addsd  (%rsp),%xmm1
movsd  %xmm1,(%rsp)
movsd  0x10(%rsp),%xmm0
mulsd  0xe55(%rip),%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movsd  0xe2e(%rip),%xmm0
call   1030 <powf@plt>
cvtss2sd %xmm0,%xmm0
addsd  0xe0d(%rip),%xmm0
mulsd  0xe35(%rip),%xmm0
addsd  (%rsp),%xmm0
addsd  0xe30(%rip),%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movsd  0xdf9(%rip),%xmm0
add    $0x18,%rsp
jmp    1030 <powf@plt>

LLVM IR (-O0):
define float @goff(float %0) {
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
store float %0, float* %2
%7 = load float, float* %2
%8 = fpext float %7 to double
%9 = fdiv double 2.731600e+02, %8
%10 = fptrunc double %9 to float
store float %10, float* %4
%11 = load float, float* %4
%12 = fpext float %11 to double
%13 = fsub double 1.000000e+00, %12
%14 = fptrunc double %13 to float
store float %14, float* %5
%15 = load float, float* %2
%16 = fpext float %15 to double
%17 = fdiv double %16, 2.731600e+02
%18 = fptrunc double %17 to float
store float %18, float* %6
%19 = load float, float* %5
%20 = fpext float %19 to double
%21 = load float, float* %6
%22 = call double @log10f(float %21)
%23 = fmul double 5.028000e+00, %22
%24 = fneg double %23
%25 = call double @llvm.fmuladd.f64(double 0x4025976B3BB83CF3, double %20, double %24)
%26 = load float, float* %6
%27 = fpext float %26 to double
%28 = fsub double %27, 1.000000e+00
%29 = fmul double -8.296900e+00, %28
%30 = fptrunc double %29 to float
%31 = call float @powf(double 1.000000e+01, float %30)
%32 = fpext float %31 to double
%33 = fsub double 1.000000e+00, %32
%34 = call double @llvm.fmuladd.f64(double 1.504750e-04, double %33, double %25)
%35 = load float, float* %5
%36 = fpext float %35 to double
%37 = fmul double 4.769550e+00, %36
%38 = fptrunc double %37 to float
%39 = call float @powf(double 1.000000e+01, float %38)
%40 = fpext float %39 to double
%41 = fsub double %40, 1.000000e+00
%42 = call double @llvm.fmuladd.f64(double 4.287300e-04, double %41, double %34)
%43 = fadd double %42, 7.861400e-01
%44 = fptrunc double %43 to float
store float %44, float* %3
%45 = load float, float* %3
%46 = call float @powf(double 1.000000e+01, float %45)
ret float %46
}

LLVM IR (-O2):
define float @goff(float %0) {
%2 = fpext float %0 to double
%3 = fdiv double 2.731600e+02, %2
%4 = fptrunc double %3 to float
%5 = fsub float 1.000000e+00, %4
%6 = fdiv double %2, 2.731600e+02
%7 = fptrunc double %6 to float
%8 = fpext float %5 to double
%9 = tail call double @log10f(float %7)
%10 = fmul double %9, -5.028000e+00
%11 = tail call double @llvm.fmuladd.f64(double %8, double 0x4025976B3BB83CF3, double %10)
%12 = fpext float %7 to double
%13 = fadd double %12, -1.000000e+00
%14 = fmul double %13, -8.296900e+00
%15 = fptrunc double %14 to float
%16 = tail call float @powf(double 1.000000e+01, float %15)
%17 = fpext float %16 to double
%18 = fsub double 1.000000e+00, %17
%19 = tail call double @llvm.fmuladd.f64(double %18, double 1.504750e-04, double %11)
%20 = fmul double %8, 4.769550e+00
%21 = fptrunc double %20 to float
%22 = tail call float @powf(double 1.000000e+01, float %21)
%23 = fpext float %22 to double
%24 = fadd double %23, -1.000000e+00
%25 = tail call double @llvm.fmuladd.f64(double %24, double 4.287300e-04, double %19)
%26 = fadd double %25, 7.861400e-01
%27 = fptrunc double %26 to float
%28 = tail call float @powf(double 1.000000e+01, float %27)
ret float %28
}