[PATCH] D134114: [Analysis] Introduce isSoleCallToLocalFunction (NFC)
Kazu Hirata via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 17 14:09:51 PDT 2022
kazu created this revision.
Herald added subscribers: ChuanqiXu, haicheng, hiraditya, inglorion.
Herald added a project: All.
kazu requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
We check to see if a given CallBase is a sole call to a local function
at multiple places in InlineCost.cpp. This patch factors out the
common code.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D134114
Files:
llvm/lib/Analysis/InlineCost.cpp
Index: llvm/lib/Analysis/InlineCost.cpp
===================================================================
--- llvm/lib/Analysis/InlineCost.cpp
+++ llvm/lib/Analysis/InlineCost.cpp
@@ -1063,6 +1063,13 @@
bool wasDecidedByCostThreshold() const { return DecidedByCostThreshold; }
};
+// Return true if CB is the sole call to local function Callee.
+static bool isSoleCallToLocalFunction(const CallBase &CB,
+ const Function &Callee) {
+ return Callee.hasLocalLinkage() && Callee.hasOneLiveUse() &&
+ &Callee == CB.getCalledFunction();
+}
+
class InlineCostFeaturesAnalyzer final : public CallAnalyzer {
private:
InlineCostFeatures Cost = {};
@@ -1236,8 +1243,7 @@
(F.getCallingConv() == CallingConv::Cold));
set(InlineCostFeatureIndex::LastCallToStaticBonus,
- (F.hasLocalLinkage() && F.hasOneLiveUse() &&
- &F == CandidateCall.getCalledFunction()));
+ isSoleCallToLocalFunction(CandidateCall, F));
// FIXME: we shouldn't repeat this logic in both the Features and Cost
// analyzer - instead, we should abstract it to a common method in the
@@ -1913,12 +1919,10 @@
SingleBBBonus = Threshold * SingleBBBonusPercent / 100;
VectorBonus = Threshold * VectorBonusPercent / 100;
- bool OnlyOneCallAndLocalLinkage = F.hasLocalLinkage() && F.hasOneLiveUse() &&
- &F == Call.getCalledFunction();
// If there is only one call of the function, and it has internal linkage,
// the cost of inlining it drops dramatically. It may seem odd to update
// Cost in updateThreshold, but the bonus depends on the logic in this method.
- if (OnlyOneCallAndLocalLinkage)
+ if (isSoleCallToLocalFunction(Call, F))
Cost -= LastCallToStaticBonus;
}
@@ -2712,12 +2716,10 @@
onBlockAnalyzed(BB);
}
- bool OnlyOneCallAndLocalLinkage = F.hasLocalLinkage() && F.hasOneLiveUse() &&
- &F == CandidateCall.getCalledFunction();
// If this is a noduplicate call, we can still inline as long as
// inlining this would cause the removal of the caller (so the instruction
// is not actually duplicated, just moved).
- if (!OnlyOneCallAndLocalLinkage && ContainsNoDuplicateCall)
+ if (!isSoleCallToLocalFunction(CandidateCall, F) && ContainsNoDuplicateCall)
return InlineResult::failure("noduplicate");
// If the callee's stack size exceeds the user-specified threshold,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D134114.461028.patch
Type: text/x-patch
Size: 2467 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220917/aebf4c6f/attachment.bin>
More information about the llvm-commits
mailing list