__attribute__((always_)) float __gen_ocl_asin_util(float x) {
  float pS0 = 1.66666666666666657415e-01, pS1 = -3.25565818622400915405e-01,
        pS2 = 2.01212532134862925881e-01, pS3 = -4.00555345006794114027e-02,
        pS4 = 7.91534994289814532176e-04, pS5 = 3.47933107596021167570e-05,
        qS1 = -2.40339491173441421878e+00, qS2 = 2.02094576023350569471e+00,
        qS3 = -6.88283971605453293030e-01, qS4 = 7.70381505559019352791e-02;
  float t = x * x;
  float p = t * (pS0 + t * (pS1 + t * (pS2 + t * (pS3 + t * (pS4 + t * pS5)))));
  float q = 1.0 + t * (qS1 + t * (qS2 + t * (qS3 + t * qS4)));
  float w = p / q;
  return x + x * w;
}


x86 assembly (clang, -O0):
<__gen_ocl_asin_util>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  0xf1b(%rip),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  0xf0a(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  0xef9(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  0xee8(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xed7(%rip),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  0xec6(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xeb5(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  0xea4(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  0xe93(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  0xe82(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x4(%rbp),%xmm0
mulss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x30(%rbp),%xmm0
movss  -0x8(%rbp),%xmm2
movss  -0x30(%rbp),%xmm1
movss  -0xc(%rbp),%xmm4
movss  -0x30(%rbp),%xmm3
movss  -0x10(%rbp),%xmm6
movss  -0x30(%rbp),%xmm5
movss  -0x14(%rbp),%xmm8
movss  -0x30(%rbp),%xmm7
movss  -0x18(%rbp),%xmm10
movss  -0x30(%rbp),%xmm9
movss  -0x1c(%rbp),%xmm11
mulss  %xmm11,%xmm9
addss  %xmm10,%xmm9
mulss  %xmm9,%xmm7
addss  %xmm8,%xmm7
mulss  %xmm7,%xmm5
addss  %xmm6,%xmm5
mulss  %xmm5,%xmm3
addss  %xmm4,%xmm3
mulss  %xmm3,%xmm1
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x30(%rbp),%xmm0
movss  -0x20(%rbp),%xmm2
movss  -0x30(%rbp),%xmm1
movss  -0x24(%rbp),%xmm4
movss  -0x30(%rbp),%xmm3
movss  -0x28(%rbp),%xmm6
movss  -0x30(%rbp),%xmm5
movss  -0x2c(%rbp),%xmm7
mulss  %xmm7,%xmm5
addss  %xmm6,%xmm5
mulss  %xmm5,%xmm3
addss  %xmm4,%xmm3
mulss  %xmm3,%xmm1
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xda1(%rip),%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x34(%rbp),%xmm0
divss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x4(%rbp),%xmm1
movss  -0x4(%rbp),%xmm0
movss  -0x3c(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<__gen_ocl_asin_util>:
movaps %xmm0,%xmm1
mulss  %xmm0,%xmm1
movss  0xef1(%rip),%xmm2
mulss  %xmm1,%xmm2
addss  0xee9(%rip),%xmm2
mulss  %xmm1,%xmm2
addss  0xee1(%rip),%xmm2
shufps $0x0,%xmm1,%xmm1
movaps 0xede(%rip),%xmm3
movss  %xmm2,%xmm3
mulps  %xmm1,%xmm3
addps  0xee0(%rip),%xmm3
mulps  %xmm1,%xmm3
addps  0xee6(%rip),%xmm3
mulps  %xmm1,%xmm3
addps  0xeec(%rip),%xmm3
mulps  %xmm1,%xmm3
movaps %xmm3,%xmm1
shufps $0x55,%xmm3,%xmm1
addss  0xea6(%rip),%xmm1
divss  %xmm1,%xmm3
mulss  %xmm0,%xmm3
addss  %xmm3,%xmm0
ret

LLVM IR (-O0):
define float @__gen_ocl_asin_util(float %0) {
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
store float %0, float* %2
store float 0x3FC5555560000000, float* %3
store float 0xBFD4D61200000000, float* %4
store float 0x3FC9C15500000000, float* %5
store float 0xBFA48228C0000000, float* %6
store float 0x3F49EFE080000000, float* %7
store float 0x3F023DE100000000, float* %8
store float 0xC0033A2720000000, float* %9
store float 0x40002AE5A0000000, float* %10
store float 0xBFE6066C20000000, float* %11
store float 0x3FB3B8C5C0000000, float* %12
%17 = load float, float* %2
%18 = load float, float* %2
%19 = fmul float %17, %18
store float %19, float* %13
%20 = load float, float* %13
%21 = load float, float* %3
%22 = load float, float* %13
%23 = load float, float* %4
%24 = load float, float* %13
%25 = load float, float* %5
%26 = load float, float* %13
%27 = load float, float* %6
%28 = load float, float* %13
%29 = load float, float* %7
%30 = load float, float* %13
%31 = load float, float* %8
%32 = call float @llvm.fmuladd.f32(float %30, float %31, float %29)
%33 = call float @llvm.fmuladd.f32(float %28, float %32, float %27)
%34 = call float @llvm.fmuladd.f32(float %26, float %33, float %25)
%35 = call float @llvm.fmuladd.f32(float %24, float %34, float %23)
%36 = call float @llvm.fmuladd.f32(float %22, float %35, float %21)
%37 = fmul float %20, %36
store float %37, float* %14
%38 = load float, float* %13
%39 = load float, float* %9
%40 = load float, float* %13
%41 = load float, float* %10
%42 = load float, float* %13
%43 = load float, float* %11
%44 = load float, float* %13
%45 = load float, float* %12
%46 = call float @llvm.fmuladd.f32(float %44, float %45, float %43)
%47 = call float @llvm.fmuladd.f32(float %42, float %46, float %41)
%48 = call float @llvm.fmuladd.f32(float %40, float %47, float %39)
%49 = fmul float %38, %48
%50 = fpext float %49 to double
%51 = fadd double 1.000000e+00, %50
%52 = fptrunc double %51 to float
store float %52, float* %15
%53 = load float, float* %14
%54 = load float, float* %15
%55 = fdiv float %53, %54
store float %55, float* %16
%56 = load float, float* %2
%57 = load float, float* %2
%58 = load float, float* %16
%59 = call float @llvm.fmuladd.f32(float %57, float %58, float %56)
ret float %59
}

LLVM IR (-O2):
define float @__gen_ocl_asin_util(float %0) {
%2 = fmul float %0, %0
%3 = tail call float @llvm.fmuladd.f32(float %2, float 0x3F023DE100000000, float 0x3F49EFE080000000)
%4 = tail call float @llvm.fmuladd.f32(float %2, float %3, float 0xBFA48228C0000000)
%5 = insertelement <2 x float> poison, float %2, i64 0
%6 = shufflevector <2 x float> %5, <2 x float> poison, <2 x i32> zeroinitializer
%7 = insertelement <2 x float> <float poison, float 0x3FB3B8C5C0000000>, float %4, i64 0
%8 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %6, <2 x float> %7, <2 x float> <float 0x3FC9C15500000000, float 0xBFE6066C20000000>)
%9 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %6, <2 x float> %8, <2 x float> <float 0xBFD4D61200000000, float 0x40002AE5A0000000>)
%10 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %6, <2 x float> %9, <2 x float> <float 0x3FC5555560000000, float 0xC0033A2720000000>)
%11 = fmul <2 x float> %6, %10
%12 = extractelement <2 x float> %11, i64 1
%13 = fadd float %12, 1.000000e+00
%14 = extractelement <2 x float> %11, i64 0
%15 = fdiv float %14, %13
%16 = tail call float @llvm.fmuladd.f32(float %0, float %15, float %0)
ret float %16
}