float iir5_c2(float fq) {
  double f, dt1;
  f = fq;
  f += (double).373;
  dt1 = (double)-1367.817993435964;
  dt1 += (double)321.426710716263 / f;
  dt1 += (double)3143.873042678646 * f;
  dt1 += (double)-33.921164217429 / (f * f);
  dt1 += (double)-4207.054014954479 * f * f;
  dt1 += (double)1.474943544810 / (f * f * f);
  dt1 += (double)3173.210883130213 * f * f * f;
  dt1 += (double)-1061.231815380881 * f * f * f * f;
  return (float)dt1;
}


x86 assembly (clang, -O0):
<iir5_c2>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xf21(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xf07(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xef2(%rip),%xmm0
divsd  -0x10(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  0xec9(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xea2(%rip),%xmm0
divsd  %xmm1,%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe84(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xe49(%rip),%xmm0
divsd  %xmm1,%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe2b(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xdfa(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<iir5_c2>:
cvtss2sd %xmm0,%xmm0
addsd  0xef4(%rip),%xmm0
movsd  0xef4(%rip),%xmm1
divsd  %xmm0,%xmm1
addsd  0xef0(%rip),%xmm1
movsd  0xef0(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xee0(%rip),%xmm3
divsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
movsd  0xed8(%rip),%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm0,%xmm1
movsd  0xec8(%rip),%xmm3
divsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
movsd  0xec0(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm3,%xmm1
movsd  0xeb0(%rip),%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
ret

LLVM IR (-O0):
define float @iir5_c2(float %0) {
%2 = alloca float
%3 = alloca double
%4 = alloca double
store float %0, float* %2
%5 = load float, float* %2
%6 = fpext float %5 to double
store double %6, double* %3
%7 = load double, double* %3
%8 = fadd double %7, 3.730000e-01
store double %8, double* %3
store double 0xC0955F45A0123F3B, double* %4
%9 = load double, double* %3
%10 = fdiv double 0x407416D3CE9DB33D, %9
%11 = load double, double* %4
%12 = fadd double %11, %10
store double %12, double* %4
%13 = load double, double* %3
%14 = load double, double* %4
%15 = call double @llvm.fmuladd.f64(double 0x40A88FBEFF733198, double %13, double %14)
store double %15, double* %4
%16 = load double, double* %3
%17 = load double, double* %3
%18 = fmul double %16, %17
%19 = fdiv double 0xC040F5E8B5860D2F, %18
%20 = load double, double* %4
%21 = fadd double %20, %19
store double %21, double* %4
%22 = load double, double* %3
%23 = fmul double 0xC0B06F0DD3EC8EFB, %22
%24 = load double, double* %3
%25 = load double, double* %4
%26 = call double @llvm.fmuladd.f64(double %23, double %24, double %25)
store double %26, double* %4
%27 = load double, double* %3
%28 = load double, double* %3
%29 = fmul double %27, %28
%30 = load double, double* %3
%31 = fmul double %29, %30
%32 = fdiv double 0x3FF7995E67067BF2, %31
%33 = load double, double* %4
%34 = fadd double %33, %32
store double %34, double* %4
%35 = load double, double* %3
%36 = fmul double 0x40A8CA6BF8DFA716, %35
%37 = load double, double* %3
%38 = fmul double %36, %37
%39 = load double, double* %3
%40 = load double, double* %4
%41 = call double @llvm.fmuladd.f64(double %38, double %39, double %40)
store double %41, double* %4
%42 = load double, double* %3
%43 = fmul double 0xC09094ED6102DE60, %42
%44 = load double, double* %3
%45 = fmul double %43, %44
%46 = load double, double* %3
%47 = fmul double %45, %46
%48 = load double, double* %3
%49 = load double, double* %4
%50 = call double @llvm.fmuladd.f64(double %47, double %48, double %49)
store double %50, double* %4
%51 = load double, double* %4
%52 = fptrunc double %51 to float
ret float %52
}

LLVM IR (-O2):
define float @iir5_c2(float %0) {
%2 = fpext float %0 to double
%3 = fadd double %2, 3.730000e-01
%4 = fdiv double 0x407416D3CE9DB33D, %3
%5 = fadd double %4, 0xC0955F45A0123F3B
%6 = tail call double @llvm.fmuladd.f64(double %3, double 0x40A88FBEFF733198, double %5)
%7 = fmul double %3, %3
%8 = fdiv double 0x4040F5E8B5860D2F, %7
%9 = fsub double %6, %8
%10 = fmul double %3, 0xC0B06F0DD3EC8EFB
%11 = tail call double @llvm.fmuladd.f64(double %10, double %3, double %9)
%12 = fmul double %3, %7
%13 = fdiv double 0x3FF7995E67067BF2, %12
%14 = fadd double %13, %11
%15 = fmul double %3, 0x40A8CA6BF8DFA716
%16 = fmul double %3, %15
%17 = tail call double @llvm.fmuladd.f64(double %16, double %3, double %14)
%18 = fmul double %3, 0xC09094ED6102DE60
%19 = fmul double %3, %18
%20 = fmul double %3, %19
%21 = tail call double @llvm.fmuladd.f64(double %20, double %3, double %17)
%22 = fptrunc double %21 to float
ret float %22
}