; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=x86_64-- < %s | FileCheck %s
define float @f32_tune_nhm(float %f) #0 {
; CHECK-LABEL: f32_tune_nhm:
; CHECK: # %bb.0:
; CHECK-NEXT: rsqrtss %xmm0, %xmm1
; CHECK-NEXT: movaps %xmm0, %xmm2
; CHECK-NEXT: mulss %xmm1, %xmm2
; CHECK-NEXT: movss {{.*#+}} xmm3 = [-5.0E-1,0.0E+0,0.0E+0,0.0E+0]
; CHECK-NEXT: mulss %xmm2, %xmm3
; CHECK-NEXT: mulss %xmm1, %xmm2
; CHECK-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
; CHECK-NEXT: mulss %xmm3, %xmm2
; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; CHECK-NEXT: cmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; CHECK-NEXT: andnps %xmm2, %xmm0
; CHECK-NEXT: retq
%call = tail call fast float @llvm.sqrt.f32(float %f)
ret float %call
}
define float @f32_no_tune(float %f) #1 {
; CHECK-LABEL: f32_no_tune:
; CHECK: # %bb.0:
; CHECK-NEXT: sqrtss %xmm0, %xmm0
; CHECK-NEXT: retq
%call = tail call fast float @llvm.sqrt.f32(float %f)
ret float %call
}
define float @f32_tune_generic(float %f) #2 {
; CHECK-LABEL: f32_tune_generic:
; CHECK: # %bb.0:
; CHECK-NEXT: sqrtss %xmm0, %xmm0
; CHECK-NEXT: retq
%call = tail call fast float @llvm.sqrt.f32(float %f)
ret float %call
}
define float @f32_tune_x86_64(float %f) #3 {
; CHECK-LABEL: f32_tune_x86_64:
; CHECK: # %bb.0:
; CHECK-NEXT: rsqrtss %xmm0, %xmm1
; CHECK-NEXT: movaps %xmm0, %xmm2
; CHECK-NEXT: mulss %xmm1, %xmm2
; CHECK-NEXT: movss {{.*#+}} xmm3 = [-5.0E-1,0.0E+0,0.0E+0,0.0E+0]
; CHECK-NEXT: mulss %xmm2, %xmm3
; CHECK-NEXT: mulss %xmm1, %xmm2
; CHECK-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
; CHECK-NEXT: mulss %xmm3, %xmm2
; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; CHECK-NEXT: cmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; CHECK-NEXT: andnps %xmm2, %xmm0
; CHECK-NEXT: retq
%call = tail call fast float @llvm.sqrt.f32(float %f)
ret float %call
}
define float @f32_tune_snb(float %f) #4 {
; CHECK-LABEL: f32_tune_snb:
; CHECK: # %bb.0:
; CHECK-NEXT: sqrtss %xmm0, %xmm0
; CHECK-NEXT: retq
%call = tail call fast float @llvm.sqrt.f32(float %f)
ret float %call
}
define float @f32_target_snb_tune_snb(float %f) #5 {
; CHECK-LABEL: f32_target_snb_tune_snb:
; CHECK: # %bb.0:
; CHECK-NEXT: vsqrtss %xmm0, %xmm0, %xmm0
; CHECK-NEXT: retq
%call = tail call fast float @llvm.sqrt.f32(float %f)
ret float %call
}
declare float @llvm.sqrt.f32(float)
attributes #0 = { "target-cpu"="x86-64" "tune-cpu"="nehalem" }
attributes #1 = { "target-cpu"="x86-64" }
attributes #2 = { "target-cpu"="x86-64" "tune-cpu"="generic" }
attributes #3 = { "target-cpu"="x86-64" "tune-cpu"="x86-64" }
attributes #4 = { "target-cpu"="x86-64" "tune-cpu"="sandybridge" }
attributes #5 = { "target-cpu"="sandybridge" "tune-cpu"="sandybridge" }