diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2022-09-12 16:34:29 +0100 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2022-09-12 16:34:37 +0100 |
commit | 20ad05f9b462e23502681f4857de0e850f76fb2c (patch) | |
tree | 0a849b536032c4b55b4a7fbcc173630d8cb4bf0d /llvm/lib | |
parent | 4758e916e1b34d800b03cd2ea6a0a554ce2483be (diff) | |
download | llvm-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.cpp | 63 |
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 } }, |