float kernel_value_CPU(float v) {
  float rValue = 0;
  const float z = v * v;
  float num =
      (z * (z * (z * (z * (z * (z * (z * (z * (z * (z * (z * (z * (z * (z * 0.210580722890567e-22f +
                                                                        0.380715242345326e-19f) +
                                                                   0.479440257548300e-16f) +
                                                              0.435125971262668e-13f) +
                                                         0.300931127112960e-10f) +
                                                    0.160224679395361e-7f) +
                                               0.654858370096785e-5f) +
                                          0.202591084143397e-2f) +
                                     0.463076284721000e0f) +
                                0.754337328948189e2f) +
                           0.830792541809429e4f) +
                      0.571661130563785e6f) +
                 0.216415572361227e8f) +
            0.356644482244025e9f) +
       0.144048298227235e10f);
  float den = (z * (z * (z - 0.307646912682801e4f) + 0.347626332405882e7f) -
               0.144048298227235e10f);
  rValue = -num / den;
  return rValue;
}


x86 assembly (clang, -O0):
<kernel_value_CPU>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x4(%rbp),%xmm0
mulss  -0x4(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
movss  -0xc(%rbp),%xmm1
movss  -0xc(%rbp),%xmm2
movss  -0xc(%rbp),%xmm3
movss  -0xc(%rbp),%xmm4
movss  -0xc(%rbp),%xmm5
movss  -0xc(%rbp),%xmm6
movss  -0xc(%rbp),%xmm7
movss  -0xc(%rbp),%xmm8
movss  -0xc(%rbp),%xmm9
movss  -0xc(%rbp),%xmm10
movss  -0xc(%rbp),%xmm11
movss  -0xc(%rbp),%xmm12
movss  -0xc(%rbp),%xmm13
movss  0xecb(%rip),%xmm14
mulss  %xmm14,%xmm13
movss  0xec1(%rip),%xmm14
addss  %xmm14,%xmm13
mulss  %xmm13,%xmm12
movss  0xea6(%rip),%xmm13
addss  %xmm13,%xmm12
mulss  %xmm12,%xmm11
movss  0xe8f(%rip),%xmm12
addss  %xmm12,%xmm11
mulss  %xmm11,%xmm10
movss  0xe78(%rip),%xmm11
addss  %xmm11,%xmm10
mulss  %xmm10,%xmm9
movss  0xe61(%rip),%xmm10
addss  %xmm10,%xmm9
mulss  %xmm9,%xmm8
movss  0xe4a(%rip),%xmm9
addss  %xmm9,%xmm8
mulss  %xmm8,%xmm7
movss  0xe33(%rip),%xmm8
addss  %xmm8,%xmm7
mulss  %xmm7,%xmm6
movss  0xe1e(%rip),%xmm7
addss  %xmm7,%xmm6
mulss  %xmm6,%xmm5
movss  0xe0a(%rip),%xmm6
addss  %xmm6,%xmm5
mulss  %xmm5,%xmm4
movss  0xdf6(%rip),%xmm5
addss  %xmm5,%xmm4
mulss  %xmm4,%xmm3
movss  0xde2(%rip),%xmm4
addss  %xmm4,%xmm3
mulss  %xmm3,%xmm2
movss  0xdce(%rip),%xmm3
addss  %xmm3,%xmm2
mulss  %xmm2,%xmm1
movss  0xdba(%rip),%xmm2
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  0xda6(%rip),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0xc(%rbp),%xmm0
movss  -0xc(%rbp),%xmm1
movss  -0xc(%rbp),%xmm2
movss  0xd82(%rip),%xmm3
subss  %xmm3,%xmm2
mulss  %xmm2,%xmm1
movss  0xd6e(%rip),%xmm2
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  0xd5a(%rip),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x10(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
divss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_value_CPU>:
movaps %xmm0,%xmm1
mulss  %xmm0,%xmm1
movss  0xef1(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xee9(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xee1(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xed9(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xed1(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xec9(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xec1(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xeb9(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xeb1(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xea9(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xea1(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xe99(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xe91(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xe89(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  0xe81(%rip),%xmm0
movss  0xe7d(%rip),%xmm2
addss  %xmm1,%xmm2
mulss  %xmm1,%xmm2
addss  0xe71(%rip),%xmm2
mulss  %xmm1,%xmm2
addss  0xe69(%rip),%xmm2
xorps  0xe6e(%rip),%xmm0
divss  %xmm2,%xmm0
ret

LLVM IR (-O0):
define float @kernel_value_CPU(float %0) {
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
store float %0, float* %2
store float 0.000000e+00, float* %3
%7 = load float, float* %2
%8 = load float, float* %2
%9 = fmul float %7, %8
store float %9, float* %4
%10 = load float, float* %4
%11 = load float, float* %4
%12 = load float, float* %4
%13 = load float, float* %4
%14 = load float, float* %4
%15 = load float, float* %4
%16 = load float, float* %4
%17 = load float, float* %4
%18 = load float, float* %4
%19 = load float, float* %4
%20 = load float, float* %4
%21 = load float, float* %4
%22 = load float, float* %4
%23 = load float, float* %4
%24 = call float @llvm.fmuladd.f32(float %23, float 0x3B39752860000000, float 0x3BE67934C0000000)
%25 = call float @llvm.fmuladd.f32(float %22, float %24, float 0x3C8BA34A20000000)
%26 = call float @llvm.fmuladd.f32(float %21, float %25, float 0x3D287ED380000000)
%27 = call float @llvm.fmuladd.f32(float %20, float %26, float 0x3DC08B3AA0000000)
%28 = call float @llvm.fmuladd.f32(float %19, float %27, float 0x3E51343900000000)
%29 = call float @llvm.fmuladd.f32(float %18, float %28, float 0x3EDB777D00000000)
%30 = call float @llvm.fmuladd.f32(float %17, float %29, float 0x3F6098A4A0000000)
%31 = call float @llvm.fmuladd.f32(float %16, float %30, float 0x3FDDA30AC0000000)
%32 = call float @llvm.fmuladd.f32(float %15, float %31, float 0x4052DBC240000000)
%33 = call float @llvm.fmuladd.f32(float %14, float %32, float 0x40C039F680000000)
%34 = call float @llvm.fmuladd.f32(float %13, float %33, float 0x4121721A40000000)
%35 = call float @llvm.fmuladd.f32(float %12, float %34, float 0x4174A39560000000)
%36 = call float @llvm.fmuladd.f32(float %11, float %35, float 0x41B541F680000000)
%37 = call float @llvm.fmuladd.f32(float %10, float %36, float 0x41D57701A0000000)
store float %37, float* %5
%38 = load float, float* %4
%39 = load float, float* %4
%40 = load float, float* %4
%41 = fsub float %40, 0x40A808F040000000
%42 = call float @llvm.fmuladd.f32(float %39, float %41, float 0x414A8593A0000000)
%43 = call float @llvm.fmuladd.f32(float %38, float %42, float 0xC1D57701A0000000)
store float %43, float* %6
%44 = load float, float* %5
%45 = fneg float %44
%46 = load float, float* %6
%47 = fdiv float %45, %46
store float %47, float* %3
%48 = load float, float* %3
ret float %48
}

LLVM IR (-O2):
define float @kernel_value_CPU(float %0) {
%2 = fmul float %0, %0
%3 = tail call float @llvm.fmuladd.f32(float %2, float 0x3B39752860000000, float 0x3BE67934C0000000)
%4 = tail call float @llvm.fmuladd.f32(float %2, float %3, float 0x3C8BA34A20000000)
%5 = tail call float @llvm.fmuladd.f32(float %2, float %4, float 0x3D287ED380000000)
%6 = tail call float @llvm.fmuladd.f32(float %2, float %5, float 0x3DC08B3AA0000000)
%7 = tail call float @llvm.fmuladd.f32(float %2, float %6, float 0x3E51343900000000)
%8 = tail call float @llvm.fmuladd.f32(float %2, float %7, float 0x3EDB777D00000000)
%9 = tail call float @llvm.fmuladd.f32(float %2, float %8, float 0x3F6098A4A0000000)
%10 = tail call float @llvm.fmuladd.f32(float %2, float %9, float 0x3FDDA30AC0000000)
%11 = tail call float @llvm.fmuladd.f32(float %2, float %10, float 0x4052DBC240000000)
%12 = tail call float @llvm.fmuladd.f32(float %2, float %11, float 0x40C039F680000000)
%13 = tail call float @llvm.fmuladd.f32(float %2, float %12, float 0x4121721A40000000)
%14 = tail call float @llvm.fmuladd.f32(float %2, float %13, float 0x4174A39560000000)
%15 = tail call float @llvm.fmuladd.f32(float %2, float %14, float 0x41B541F680000000)
%16 = tail call float @llvm.fmuladd.f32(float %2, float %15, float 0x41D57701A0000000)
%17 = fadd float %2, 0xC0A808F040000000
%18 = tail call float @llvm.fmuladd.f32(float %2, float %17, float 0x414A8593A0000000)
%19 = tail call float @llvm.fmuladd.f32(float %2, float %18, float 0xC1D57701A0000000)
%20 = fneg float %16
%21 = fdiv float %20, %19
ret float %21
}