mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
[TTI] Improved cost heuristic for cttz/ctlz calls.
This patch is a follow-up of r228826 (see code-review: D7506). Now that SimplifyCFG uses TargetTransformInfo for cost analysis, we have to fix the cost heuristic for intrinsic calls to cttz/ctlz. This patch defines method 'getIntrinsicCost' in BasicTTIImpl: now, BasicTTIImpl queries TLI to check if a call to cttz/ctlz is cheap for the target. Added test cases in Transforms/SimplifyCFG/X86 to verify that on x86, SimplifyCFG only speculates a call to cttz/ctlz if it is cheap. Differential Revision: http://reviews.llvm.org/D7554 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228829 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -150,6 +150,28 @@ public:
|
||||
return getTLI()->isTypeLegal(VT);
|
||||
}
|
||||
|
||||
unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
|
||||
ArrayRef<const Value *> Arguments) {
|
||||
return BaseT::getIntrinsicCost(IID, RetTy, Arguments);
|
||||
}
|
||||
|
||||
unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
|
||||
ArrayRef<Type *> ParamTys) {
|
||||
if (IID == Intrinsic::cttz) {
|
||||
if (getTLI()->isCheapToSpeculateCttz())
|
||||
return TargetTransformInfo::TCC_Basic;
|
||||
return TargetTransformInfo::TCC_Expensive;
|
||||
}
|
||||
|
||||
if (IID == Intrinsic::ctlz) {
|
||||
if (getTLI()->isCheapToSpeculateCtlz())
|
||||
return TargetTransformInfo::TCC_Basic;
|
||||
return TargetTransformInfo::TCC_Expensive;
|
||||
}
|
||||
|
||||
return BaseT::getIntrinsicCost(IID, RetTy, ParamTys);
|
||||
}
|
||||
|
||||
unsigned getJumpBufAlignment() { return getTLI()->getJumpBufAlignment(); }
|
||||
|
||||
unsigned getJumpBufSize() { return getTLI()->getJumpBufSize(); }
|
||||
|
||||
Reference in New Issue
Block a user