[llvm] 6f9ac11 - [CostModel][X86] Pull out X86/X64 scalar int arithmetric costs from SSE tables. NFCI.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Sat May 22 08:39:38 PDT 2021
Author: Simon Pilgrim
Date: 2021-05-22T16:13:49+01:00
New Revision: 6f9ac11e3960bf5953b3af4b0c4e2682ea802081
URL: https://github.com/llvm/llvm-project/commit/6f9ac11e3960bf5953b3af4b0c4e2682ea802081
DIFF: https://github.com/llvm/llvm-project/commit/6f9ac11e3960bf5953b3af4b0c4e2682ea802081.diff
LOG: [CostModel][X86] Pull out X86/X64 scalar int arithmetric costs from SSE tables. NFCI.
These aren't dependent on any SSE level (and don't tend to get quicker either).
Added:
Modified:
llvm/lib/Target/X86/X86TargetTransformInfo.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
index 060e050076de..f77de4e8f754 100644
--- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
+++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
@@ -963,20 +963,34 @@ InstructionCost X86TTIImpl::getArithmeticInstrCost(
{ ISD::FSUB, MVT::f32, 1 }, // Pentium III from http://www.agner.org/
{ ISD::FSUB, MVT::v4f32, 2 }, // Pentium III from http://www.agner.org/
-
- { ISD::ADD, MVT::i8, 1 }, // Pentium III from http://www.agner.org/
- { ISD::ADD, MVT::i16, 1 }, // Pentium III from http://www.agner.org/
- { ISD::ADD, MVT::i32, 1 }, // Pentium III from http://www.agner.org/
-
- { ISD::SUB, MVT::i8, 1 }, // Pentium III from http://www.agner.org/
- { ISD::SUB, MVT::i16, 1 }, // Pentium III from http://www.agner.org/
- { ISD::SUB, MVT::i32, 1 }, // Pentium III from http://www.agner.org/
};
if (ST->hasSSE1())
if (const auto *Entry = CostTableLookup(SSE1CostTable, ISD, LT.second))
return LT.first * Entry->Cost;
+ static const CostTblEntry X64CostTbl[] = { // 64-bit targets
+ { ISD::ADD, MVT::i64, 1 }, // Core (Merom) from http://www.agner.org/
+ { ISD::SUB, MVT::i64, 1 }, // Core (Merom) from http://www.agner.org/
+ };
+
+ if (ST->is64Bit())
+ if (const auto *Entry = CostTableLookup(X64CostTbl, ISD, LT.second))
+ return LT.first * Entry->Cost;
+
+ static const CostTblEntry X86CostTbl[] = { // 32 or 64-bit targets
+ { ISD::ADD, MVT::i8, 1 }, // Pentium III from http://www.agner.org/
+ { ISD::ADD, MVT::i16, 1 }, // Pentium III from http://www.agner.org/
+ { ISD::ADD, MVT::i32, 1 }, // Pentium III from http://www.agner.org/
+
+ { ISD::SUB, MVT::i8, 1 }, // Pentium III from http://www.agner.org/
+ { ISD::SUB, MVT::i16, 1 }, // Pentium III from http://www.agner.org/
+ { ISD::SUB, MVT::i32, 1 }, // Pentium III from http://www.agner.org/
+ };
+
+ if (const auto *Entry = CostTableLookup(X86CostTbl, ISD, LT.second))
+ return LT.first * Entry->Cost;
+
// It is not a good idea to vectorize division. We have to scalarize it and
// in the process we will often end up having to spilling regular
// registers. The overhead of division is going to dominate most kernels
More information about the llvm-commits
mailing list