1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
; 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 = mem[0],zero,zero,zero
; 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 = mem[0],zero,zero,zero
; 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" }
|