[PATCH] D121341: [SystemZ] implement adjustInliningThreshold()
Jonas Paulsson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 9 14:20:00 PST 2022
jonpa created this revision.
jonpa added a reviewer: uweigand.
Herald added a subscriber: hiraditya.
Herald added a project: All.
jonpa requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
This patch boosts the inlining threshold for a particular type of functions that are using an incoming argument only as a memcpy source.
https://reviews.llvm.org/D121341
Files:
llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp
llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.h
Index: llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.h
===================================================================
--- llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.h
+++ llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.h
@@ -37,6 +37,7 @@
/// @{
unsigned getInliningThresholdMultiplier() { return 3; }
+ unsigned adjustInliningThreshold(const CallBase *CB) const;
InstructionCost getIntImmCost(const APInt &Imm, Type *Ty,
TTI::TargetCostKind CostKind);
Index: llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp
===================================================================
--- llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp
+++ llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp
@@ -30,6 +30,42 @@
//
//===----------------------------------------------------------------------===//
+static bool isUsedAsMemCpySource(const Value *V, bool &OtherUse) {
+ bool UsedAsMemCpySource = false;
+ for (const User *U : V->users())
+ if (const Instruction *User = dyn_cast<Instruction>(U)) {
+ if (isa<BitCastInst>(User) || isa<GetElementPtrInst>(User)) {
+ UsedAsMemCpySource |= isUsedAsMemCpySource(User, OtherUse);
+ continue;
+ }
+ if (const MemCpyInst *Memcpy = dyn_cast<MemCpyInst>(User)) {
+ if (Memcpy->getOperand(1) == V && !Memcpy->isVolatile()) {
+ UsedAsMemCpySource = true;
+ continue;
+ }
+ }
+ OtherUse = true;
+ }
+ return UsedAsMemCpySource;
+}
+
+unsigned SystemZTTIImpl::adjustInliningThreshold(const CallBase *CB) const {
+ unsigned Bonus = 0;
+
+ // Increase the threshold if an incoming argument is used only as a memcpy
+ // source.
+ if (Function *Callee = CB->getCalledFunction())
+ for (Argument &Arg : Callee->args()) {
+ bool OtherUse = false;
+ if (isUsedAsMemCpySource(&Arg, OtherUse) && !OtherUse)
+ Bonus += 150;
+ }
+
+ LLVM_DEBUG(if (Bonus)
+ dbgs() << "++ SZTTI Adding inlining bonus: " << Bonus << "\n";);
+ return Bonus;
+}
+
InstructionCost SystemZTTIImpl::getIntImmCost(const APInt &Imm, Type *Ty,
TTI::TargetCostKind CostKind) {
assert(Ty->isIntegerTy());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D121341.414217.patch
Type: text/x-patch
Size: 2252 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220309/c7f5409a/attachment.bin>
More information about the llvm-commits
mailing list