float iir5_c4(float fq) {
  double f, dt1;
  f = fq;
  f += (double)1.09997;
  dt1 = (double)-8180.447687211407;
  dt1 += (double)7606.001654061646 / f;
  dt1 += (double)4911.238063416248 * f;
  dt1 += (double)-3722.590923768796 / (f * f);
  dt1 += (double)-1563.849845278449 * f * f;
  dt1 += (double)752.161694907701 / (f * f * f);
  dt1 += (double)204.513728752513 * f * f * f;
  return (float)dt1;
}


x86 assembly (clang, -O0):
<iir5_c4>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xf19(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xeff(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xeea(%rip),%xmm0
divsd  -0x10(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  0xec1(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xe9a(%rip),%xmm0
divsd  %xmm1,%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe7c(%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  0xe41(%rip),%xmm0
divsd  %xmm1,%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe23(%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  -0x18(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<iir5_c4>:
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
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
ret

LLVM IR (-O0):
define float @iir5_c4(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, 1.099970e+00
store double %8, double* %3
store double 0xC0BFF4729BA10BD5, double* %4
%9 = load double, double* %3
%10 = fdiv double 0x40BDB6006C668CAD, %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 0x40B32F3CF1B95B29, 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 0xC0AD152E8D8F6AD1, %18
%20 = load double, double* %4
%21 = fadd double %20, %19
store double %21, double* %4
%22 = load double, double* %3
%23 = fmul double 0xC0986F663DD73665, %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 0x4087814B26B3240B, %31
%33 = load double, double* %4
%34 = fadd double %33, %32
store double %34, double* %4
%35 = load double, double* %3
%36 = fmul double 0x406990707747E1DD, %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* %4
%43 = fptrunc double %42 to float
ret float %43
}

LLVM IR (-O2):
define float @iir5_c4(float %0) {
%2 = fpext float %0 to double
%3 = fadd double %2, 1.099970e+00
%4 = fdiv double 0x40BDB6006C668CAD, %3
%5 = fadd double %4, 0xC0BFF4729BA10BD5
%6 = tail call double @llvm.fmuladd.f64(double %3, double 0x40B32F3CF1B95B29, double %5)
%7 = fmul double %3, %3
%8 = fdiv double 0x40AD152E8D8F6AD1, %7
%9 = fsub double %6, %8
%10 = fmul double %3, 0xC0986F663DD73665
%11 = tail call double @llvm.fmuladd.f64(double %10, double %3, double %9)
%12 = fmul double %3, %7
%13 = fdiv double 0x4087814B26B3240B, %12
%14 = fadd double %13, %11
%15 = fmul double %3, 0x406990707747E1DD
%16 = fmul double %3, %15
%17 = tail call double @llvm.fmuladd.f64(double %16, double %3, double %14)
%18 = fptrunc double %17 to float
ret float %18
}