From f96b4ab92d6a95a0720d18b1cd948a95d0cb54e7 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Sun, 14 May 2017 20:25:42 +0000 Subject: [PATCH] [X86][AVX2] Fix costs for v4i64 ashr by splat llvm-svn: 303022 --- llvm/lib/Target/X86/X86TargetTransformInfo.cpp | 5 +++++ llvm/test/Analysis/CostModel/X86/vshift-ashr-cost.ll | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp index 4ea66d2..4a5c7e3 100644 --- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp @@ -471,6 +471,11 @@ int X86TTIImpl::getArithmeticInstrCost( if (ST->hasSSE2() && ((Op2Info == TargetTransformInfo::OK_UniformConstantValue) || (Op2Info == TargetTransformInfo::OK_UniformValue))) { + + // Handle AVX2 uniform v4i64 ISD::SRA, it's not worth a table. + if (ISD == ISD::SRA && LT.second == MVT::v4i64 && ST->hasAVX2()) + return LT.first * 4; // 2*psrad + shuffle. + if (const auto *Entry = CostTableLookup(SSE2UniformShiftCostTable, ISD, LT.second)) return LT.first * Entry->Cost; diff --git a/llvm/test/Analysis/CostModel/X86/vshift-ashr-cost.ll b/llvm/test/Analysis/CostModel/X86/vshift-ashr-cost.ll index c2e2960..9b3b58a 100644 --- a/llvm/test/Analysis/CostModel/X86/vshift-ashr-cost.ll +++ b/llvm/test/Analysis/CostModel/X86/vshift-ashr-cost.ll @@ -192,7 +192,7 @@ define <4 x i64> @splatvar_shift_v4i64(<4 x i64> %a, i64 %b) { ; SSE2: Found an estimated cost of 8 for instruction: %shift ; SSE41: Found an estimated cost of 8 for instruction: %shift ; AVX: Found an estimated cost of 10 for instruction: %shift -; AVX2: Found an estimated cost of 10 for instruction: %shift +; AVX2: Found an estimated cost of 4 for instruction: %shift ; AVX512: Found an estimated cost of 1 for instruction: %shift ; XOP: Found an estimated cost of 6 for instruction: %shift %insert = insertelement <4 x i64> undef, i64 %b, i32 0 @@ -206,7 +206,7 @@ define <8 x i64> @splatvar_shift_v8i64(<8 x i64> %a, i64 %b) { ; SSE2: Found an estimated cost of 16 for instruction: %shift ; SSE41: Found an estimated cost of 16 for instruction: %shift ; AVX: Found an estimated cost of 20 for instruction: %shift -; AVX2: Found an estimated cost of 20 for instruction: %shift +; AVX2: Found an estimated cost of 8 for instruction: %shift ; AVX512: Found an estimated cost of 1 for instruction: %shift ; XOP: Found an estimated cost of 12 for instruction: %shift %insert = insertelement <8 x i64> undef, i64 %b, i32 0 -- 2.7.4