aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2022-09-12 16:34:29 +0100
committerSimon Pilgrim <llvm-dev@redking.me.uk>2022-09-12 16:34:37 +0100
commit20ad05f9b462e23502681f4857de0e850f76fb2c (patch)
tree0a849b536032c4b55b4a7fbcc173630d8cb4bf0d /llvm/lib
parent4758e916e1b34d800b03cd2ea6a0a554ce2483be (diff)
downloadllvm-20ad05f9b462e23502681f4857de0e850f76fb2c.zip
llvm-20ad05f9b462e23502681f4857de0e850f76fb2c.tar.gz
llvm-20ad05f9b462e23502681f4857de0e850f76fb2c.tar.bz2
[CostModel][X86] Add CostKinds handling for abs ops
This was achieved with an updated version of the 'cost-tables vs llvm-mca' script D103695
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86TargetTransformInfo.cpp63
1 files changed, 35 insertions, 28 deletions
diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
index 373be67..36b7501 100644
--- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
+++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
@@ -3153,8 +3153,8 @@ X86TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ ISD::CTLZ, MVT::v16i8, { 4 } },
};
static const CostKindTblEntry AVX512BWCostTbl[] = {
- { ISD::ABS, MVT::v32i16, { 1 } },
- { ISD::ABS, MVT::v64i8, { 1 } },
+ { ISD::ABS, MVT::v32i16, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v64i8, { 1, 1, 1, 1 } },
{ ISD::BITREVERSE, MVT::v8i64, { 3 } },
{ ISD::BITREVERSE, MVT::v16i32, { 3 } },
{ ISD::BITREVERSE, MVT::v32i16, { 3 } },
@@ -3212,12 +3212,15 @@ X86TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ ISD::USUBSAT, MVT::v64i8, { 1 } },
};
static const CostKindTblEntry AVX512CostTbl[] = {
- { ISD::ABS, MVT::v8i64, { 1 } },
- { ISD::ABS, MVT::v16i32, { 1 } },
- { ISD::ABS, MVT::v32i16, { 2 } },
- { ISD::ABS, MVT::v64i8, { 2 } },
- { ISD::ABS, MVT::v4i64, { 1 } },
- { ISD::ABS, MVT::v2i64, { 1 } },
+ { ISD::ABS, MVT::v8i64, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v4i64, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v2i64, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v16i32, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v8i32, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v32i16, { 2, 7, 4, 4 } },
+ { ISD::ABS, MVT::v16i16, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v64i8, { 2, 7, 4, 4 } },
+ { ISD::ABS, MVT::v32i8, { 1, 1, 1, 1 } },
{ ISD::BITREVERSE, MVT::v8i64, { 36 } },
{ ISD::BITREVERSE, MVT::v16i32, { 24 } },
{ ISD::BITREVERSE, MVT::v32i16, { 10 } },
@@ -3338,10 +3341,14 @@ X86TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ ISD::ROTR, MVT::v16i8, { 2 } }
};
static const CostKindTblEntry AVX2CostTbl[] = {
- { ISD::ABS, MVT::v4i64, { 2 } }, // VBLENDVPD(X,VPSUBQ(0,X),X)
- { ISD::ABS, MVT::v8i32, { 1 } },
- { ISD::ABS, MVT::v16i16, { 1 } },
- { ISD::ABS, MVT::v32i8, { 1 } },
+ { ISD::ABS, MVT::v2i64, { 2, 4, 3, 5 } }, // VBLENDVPD(X,VPSUBQ(0,X),X)
+ { ISD::ABS, MVT::v4i64, { 2, 4, 3, 5 } }, // VBLENDVPD(X,VPSUBQ(0,X),X)
+ { ISD::ABS, MVT::v4i32, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v8i32, { 1, 1, 1, 2 } },
+ { ISD::ABS, MVT::v8i16, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v16i16, { 1, 1, 1, 2 } },
+ { ISD::ABS, MVT::v16i8, { 1, 1, 1, 1 } },
+ { ISD::ABS, MVT::v32i8, { 1, 1, 1, 2 } },
{ ISD::BITREVERSE, MVT::v2i64, { 3 } },
{ ISD::BITREVERSE, MVT::v4i64, { 3 } },
{ ISD::BITREVERSE, MVT::v4i32, { 3 } },
@@ -3409,10 +3416,10 @@ X86TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ ISD::FSQRT, MVT::v4f64, { 28, 35, 1, 3 } }, // vsqrtpd
};
static const CostKindTblEntry AVX1CostTbl[] = {
- { ISD::ABS, MVT::v4i64, { 5 } }, // VBLENDVPD(X,VPSUBQ(0,X),X)
- { ISD::ABS, MVT::v8i32, { 3 } },
- { ISD::ABS, MVT::v16i16, { 3 } },
- { ISD::ABS, MVT::v32i8, { 3 } },
+ { ISD::ABS, MVT::v4i64, { 6, 8, 6, 12 } }, // VBLENDVPD(X,VPSUBQ(0,X),X)
+ { ISD::ABS, MVT::v8i32, { 3, 6, 4, 5 } },
+ { ISD::ABS, MVT::v16i16, { 3, 6, 4, 5 } },
+ { ISD::ABS, MVT::v32i8, { 3, 6, 4, 5 } },
{ ISD::BITREVERSE, MVT::v4i64, { 12 } }, // 2 x 128-bit Op + extract/insert
{ ISD::BITREVERSE, MVT::v8i32, { 12 } }, // 2 x 128-bit Op + extract/insert
{ ISD::BITREVERSE, MVT::v16i16, { 12 } }, // 2 x 128-bit Op + extract/insert
@@ -3490,7 +3497,7 @@ X86TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ ISD::FSQRT, MVT::v4f32, { 18, 18, 1, 1 } }, // Nehalem from http://www.agner.org/
};
static const CostKindTblEntry SSE41CostTbl[] = {
- { ISD::ABS, MVT::v2i64, { 2 } }, // BLENDVPD(X,PSUBQ(0,X),X)
+ { ISD::ABS, MVT::v2i64, { 3, 4, 3, 5 } }, // BLENDVPD(X,PSUBQ(0,X),X)
{ ISD::SMAX, MVT::v4i32, { 1 } },
{ ISD::SMAX, MVT::v16i8, { 1 } },
{ ISD::SMIN, MVT::v4i32, { 1 } },
@@ -3501,9 +3508,9 @@ X86TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ ISD::UMIN, MVT::v8i16, { 1 } },
};
static const CostKindTblEntry SSSE3CostTbl[] = {
- { ISD::ABS, MVT::v4i32, { 1 } },
- { ISD::ABS, MVT::v8i16, { 1 } },
- { ISD::ABS, MVT::v16i8, { 1 } },
+ { ISD::ABS, MVT::v4i32, { 1, 2, 1, 1 } },
+ { ISD::ABS, MVT::v8i16, { 1, 2, 1, 1 } },
+ { ISD::ABS, MVT::v16i8, { 1, 2, 1, 1 } },
{ ISD::BITREVERSE, MVT::v2i64, { 5 } },
{ ISD::BITREVERSE, MVT::v4i32, { 5 } },
{ ISD::BITREVERSE, MVT::v8i16, { 5 } },
@@ -3525,10 +3532,10 @@ X86TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ ISD::CTTZ, MVT::v16i8, { 9 } }
};
static const CostKindTblEntry SSE2CostTbl[] = {
- { ISD::ABS, MVT::v2i64, { 4 } },
- { ISD::ABS, MVT::v4i32, { 3 } },
- { ISD::ABS, MVT::v8i16, { 2 } },
- { ISD::ABS, MVT::v16i8, { 2 } },
+ { ISD::ABS, MVT::v2i64, { 3, 6, 5, 5 } },
+ { ISD::ABS, MVT::v4i32, { 1, 4, 4, 4 } },
+ { ISD::ABS, MVT::v8i16, { 1, 2, 3, 3 } },
+ { ISD::ABS, MVT::v16i8, { 1, 2, 3, 3 } },
{ ISD::BITREVERSE, MVT::v2i64, { 29 } },
{ ISD::BITREVERSE, MVT::v4i32, { 27 } },
{ ISD::BITREVERSE, MVT::v8i16, { 27 } },
@@ -3598,7 +3605,7 @@ X86TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ ISD::CTPOP, MVT::i8, { 1, 1, 2, 2 } }, // popcnt(zext())
};
static const CostKindTblEntry X64CostTbl[] = { // 64-bit targets
- { ISD::ABS, MVT::i64, { 2 } }, // SUB+CMOV
+ { ISD::ABS, MVT::i64, { 1, 2, 3, 4 } }, // SUB+CMOV
{ ISD::BITREVERSE, MVT::i64, { 14 } },
{ ISD::BSWAP, MVT::i64, { 1 } },
{ ISD::CTLZ, MVT::i64, { 4 } }, // BSR+XOR or BSR+XOR+CMOV
@@ -3612,9 +3619,9 @@ X86TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ ISD::UMULO, MVT::i64, { 2 } }, // mulq + seto
};
static const CostKindTblEntry X86CostTbl[] = { // 32 or 64-bit targets
- { ISD::ABS, MVT::i32, { 2 } }, // SUB+XOR+SRA or SUB+CMOV
- { ISD::ABS, MVT::i16, { 2 } }, // SUB+XOR+SRA or SUB+CMOV
- { ISD::ABS, MVT::i8, { 2 } }, // SUB+XOR+SRA
+ { ISD::ABS, MVT::i32, { 1, 2, 3, 4 } }, // SUB+XOR+SRA or SUB+CMOV
+ { ISD::ABS, MVT::i16, { 2, 2, 3, 4 } }, // SUB+XOR+SRA or SUB+CMOV
+ { ISD::ABS, MVT::i8, { 2, 4, 4, 4 } }, // SUB+XOR+SRA
{ ISD::BITREVERSE, MVT::i32, { 14 } },
{ ISD::BITREVERSE, MVT::i16, { 14 } },
{ ISD::BITREVERSE, MVT::i8, { 11 } },