float fa_inverse_error_func(float alpha) {
  float erf_inv = 0.0;
  erf_inv = alpha + (3.14159265358979323846 / 12.) * alpha * alpha * alpha +
            ((7 * 3.14159265358979323846 * 3.14159265358979323846) / 480.) *
                alpha * alpha * alpha * alpha * alpha +
            ((127 * 3.14159265358979323846 * 3.14159265358979323846 *
              3.14159265358979323846) /
             40320.) *
                alpha * alpha * alpha * alpha * alpha * alpha * alpha;
  erf_inv = erf_inv * 0.886226925451;
  return erf_inv;
}


x86 assembly (clang, -O0):
<fa_inverse_error_func>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xeed(%rip),%xmm0
mulsd  %xmm2,%xmm0
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xeb2(%rip),%xmm1
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xe5d(%rip),%xmm0
mulsd  %xmm2,%xmm0
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xde5(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<fa_inverse_error_func>:
cvtss2sd %xmm0,%xmm0
movsd  0xef4(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm0,%xmm1
movsd  0xee4(%rip),%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
movsd  0xecc(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm2,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0xea1(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret

LLVM IR (-O0):
define float @fa_inverse_error_func(float %0) {
%2 = alloca float
%3 = alloca float
store float %0, float* %2
store float 0.000000e+00, float* %3
%4 = load float, float* %2
%5 = fpext float %4 to double
%6 = load float, float* %2
%7 = fpext float %6 to double
%8 = fmul double 0x3FD0C152382D7365, %7
%9 = load float, float* %2
%10 = fpext float %9 to double
%11 = fmul double %8, %10
%12 = load float, float* %2
%13 = fpext float %12 to double
%14 = call double @llvm.fmuladd.f64(double %11, double %13, double %5)
%15 = load float, float* %2
%16 = fpext float %15 to double
%17 = fmul double 0x3FC26C5ADE6D5246, %16
%18 = load float, float* %2
%19 = fpext float %18 to double
%20 = fmul double %17, %19
%21 = load float, float* %2
%22 = fpext float %21 to double
%23 = fmul double %20, %22
%24 = load float, float* %2
%25 = fpext float %24 to double
%26 = fmul double %23, %25
%27 = load float, float* %2
%28 = fpext float %27 to double
%29 = call double @llvm.fmuladd.f64(double %26, double %28, double %14)
%30 = load float, float* %2
%31 = fpext float %30 to double
%32 = fmul double 0x3FB9007BA3C74068, %31
%33 = load float, float* %2
%34 = fpext float %33 to double
%35 = fmul double %32, %34
%36 = load float, float* %2
%37 = fpext float %36 to double
%38 = fmul double %35, %37
%39 = load float, float* %2
%40 = fpext float %39 to double
%41 = fmul double %38, %40
%42 = load float, float* %2
%43 = fpext float %42 to double
%44 = fmul double %41, %43
%45 = load float, float* %2
%46 = fpext float %45 to double
%47 = fmul double %44, %46
%48 = load float, float* %2
%49 = fpext float %48 to double
%50 = call double @llvm.fmuladd.f64(double %47, double %49, double %29)
%51 = fptrunc double %50 to float
store float %51, float* %3
%52 = load float, float* %3
%53 = fpext float %52 to double
%54 = fmul double %53, 0x3FEC5BF891B4B190
%55 = fptrunc double %54 to float
store float %55, float* %3
%56 = load float, float* %3
ret float %56
}

LLVM IR (-O2):
define float @fa_inverse_error_func(float %0) {
%2 = fpext float %0 to double
%3 = fmul double %2, 0x3FD0C152382D7365
%4 = fmul double %3, %2
%5 = tail call double @llvm.fmuladd.f64(double %4, double %2, double %2)
%6 = fmul double %2, 0x3FC26C5ADE6D5246
%7 = fmul double %6, %2
%8 = fmul double %7, %2
%9 = fmul double %8, %2
%10 = tail call double @llvm.fmuladd.f64(double %9, double %2, double %5)
%11 = fmul double %2, 0x3FB9007BA3C74068
%12 = fmul double %11, %2
%13 = fmul double %12, %2
%14 = fmul double %13, %2
%15 = fmul double %14, %2
%16 = fmul double %15, %2
%17 = tail call double @llvm.fmuladd.f64(double %16, double %2, double %10)
%18 = fptrunc double %17 to float
%19 = fpext float %18 to double
%20 = fmul double %19, 0x3FEC5BF891B4B190
%21 = fptrunc double %20 to float
ret float %21
}