diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-01-24 12:10:20 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-01-24 12:10:20 +0000 |
| commit | 2d1964b90fe520aa4f1e4a4639798c23eb70421b (patch) | |
| tree | 62700dbfd73998845246f51d1590ca98ea7014db /llvm/lib | |
| parent | 8198b7e7a99548f0187e5dc3fdc4b021f23e249e (diff) | |
| download | bcm5719-llvm-2d1964b90fe520aa4f1e4a4639798c23eb70421b.tar.gz bcm5719-llvm-2d1964b90fe520aa4f1e4a4639798c23eb70421b.zip | |
[TTI] Add generic UADDO/USUBO costs
Added x86 scalar uadd_with_overflow/usub_with_overflow costs.
Differential Revision: https://reviews.llvm.org/D56907
llvm-svn: 352043
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86TargetTransformInfo.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp index f73bad8882e..e1d96e7fad8 100644 --- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp @@ -2037,14 +2037,19 @@ int X86TTIImpl::getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy, { ISD::FSQRT, MVT::v4f32, 56 }, // Pentium III from http://www.agner.org/ }; static const CostTblEntry X64CostTbl[] = { // 64-bit targets - { ISD::BITREVERSE, MVT::i64, 14 } + { ISD::BITREVERSE, MVT::i64, 14 }, + { ISD::UADDO, MVT::i64, 1 }, }; static const CostTblEntry X86CostTbl[] = { // 32 or 64-bit targets { ISD::BITREVERSE, MVT::i32, 14 }, { ISD::BITREVERSE, MVT::i16, 14 }, - { ISD::BITREVERSE, MVT::i8, 11 } + { ISD::BITREVERSE, MVT::i8, 11 }, + { ISD::UADDO, MVT::i32, 1 }, + { ISD::UADDO, MVT::i16, 1 }, + { ISD::UADDO, MVT::i8, 1 }, }; + Type *OpTy = RetTy; unsigned ISD = ISD::DELETED_NODE; switch (IID) { default: @@ -2079,11 +2084,17 @@ int X86TTIImpl::getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy, case Intrinsic::sqrt: ISD = ISD::FSQRT; break; + case Intrinsic::uadd_with_overflow: + case Intrinsic::usub_with_overflow: + // USUBO has same costs so don't duplicate. + ISD = ISD::UADDO; + OpTy = RetTy->getContainedType(0); + break; } if (ISD != ISD::DELETED_NODE) { // Legalize the type. - std::pair<int, MVT> LT = TLI->getTypeLegalizationCost(DL, RetTy); + std::pair<int, MVT> LT = TLI->getTypeLegalizationCost(DL, OpTy); MVT MTy = LT.second; // Attempt to lookup cost. |

