diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86TargetTransformInfo.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86TargetTransformInfo.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp index b5de8f9..338472a 100644 --- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp @@ -951,19 +951,33 @@ int X86TTIImpl::getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy, { ISD::BITREVERSE, MVT::v4i64, 5 }, { ISD::BITREVERSE, MVT::v8i32, 5 }, { ISD::BITREVERSE, MVT::v16i16, 5 }, - { ISD::BITREVERSE, MVT::v32i8, 5 } + { ISD::BITREVERSE, MVT::v32i8, 5 }, + { ISD::BSWAP, MVT::v4i64, 1 }, + { ISD::BSWAP, MVT::v8i32, 1 }, + { ISD::BSWAP, MVT::v16i16, 1 } }; static const CostTblEntry AVX1CostTbl[] = { { ISD::BITREVERSE, MVT::v4i64, 10 }, { ISD::BITREVERSE, MVT::v8i32, 10 }, { ISD::BITREVERSE, MVT::v16i16, 10 }, - { ISD::BITREVERSE, MVT::v32i8, 10 } + { ISD::BITREVERSE, MVT::v32i8, 10 }, + { ISD::BSWAP, MVT::v4i64, 4 }, + { ISD::BSWAP, MVT::v8i32, 4 }, + { ISD::BSWAP, MVT::v16i16, 4 } }; static const CostTblEntry SSSE3CostTbl[] = { { ISD::BITREVERSE, MVT::v2i64, 5 }, { ISD::BITREVERSE, MVT::v4i32, 5 }, { ISD::BITREVERSE, MVT::v8i16, 5 }, - { ISD::BITREVERSE, MVT::v16i8, 5 } + { ISD::BITREVERSE, MVT::v16i8, 5 }, + { ISD::BSWAP, MVT::v2i64, 1 }, + { ISD::BSWAP, MVT::v4i32, 1 }, + { ISD::BSWAP, MVT::v8i16, 1 } + }; + static const CostTblEntry SSE2CostTbl[] = { + { ISD::BSWAP, MVT::v2i64, 7 }, + { ISD::BSWAP, MVT::v4i32, 7 }, + { ISD::BSWAP, MVT::v8i16, 7 } }; unsigned ISD = ISD::DELETED_NODE; @@ -973,6 +987,9 @@ int X86TTIImpl::getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy, case Intrinsic::bitreverse: ISD = ISD::BITREVERSE; break; + case Intrinsic::bswap: + ISD = ISD::BSWAP; + break; } // Legalize the type. @@ -996,6 +1013,10 @@ int X86TTIImpl::getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy, if (const auto *Entry = CostTableLookup(SSSE3CostTbl, ISD, MTy)) return LT.first * Entry->Cost; + if (ST->hasSSE2()) + if (const auto *Entry = CostTableLookup(SSE2CostTbl, ISD, MTy)) + return LT.first * Entry->Cost; + return BaseT::getIntrinsicInstrCost(IID, RetTy, Tys, FMF); } |