[llvm] 6b9ac2a - [BranchFolding] Add a hook to override tail merge size (#99025)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 21 23:41:10 PDT 2024
Author: Pengcheng Wang
Date: 2024-07-22T14:41:07+08:00
New Revision: 6b9ac2a4951453fa61fbda285a23be1b32bbff49
URL: https://github.com/llvm/llvm-project/commit/6b9ac2a4951453fa61fbda285a23be1b32bbff49
DIFF: https://github.com/llvm/llvm-project/commit/6b9ac2a4951453fa61fbda285a23be1b32bbff49.diff
LOG: [BranchFolding] Add a hook to override tail merge size (#99025)
A new hook `TargetInstrInfo::getTailMergeSize()` is added so that
targets can override it.
This removes an existing TODO.
Added:
Modified:
llvm/include/llvm/CodeGen/TargetInstrInfo.h
llvm/lib/CodeGen/BranchFolding.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/TargetInstrInfo.h b/llvm/include/llvm/CodeGen/TargetInstrInfo.h
index 5c7f6ddc94840..649711d8faf65 100644
--- a/llvm/include/llvm/CodeGen/TargetInstrInfo.h
+++ b/llvm/include/llvm/CodeGen/TargetInstrInfo.h
@@ -2226,6 +2226,12 @@ class TargetInstrInfo : public MCInstrInfo {
return OptLevel >= CodeGenOptLevel::Aggressive ? 4 : 2;
}
+ /// Returns the target-specific default value for tail merging.
+ /// This value will be used if the tail-merge-size argument is not provided.
+ virtual unsigned getTailMergeSize(const MachineFunction &MF) const {
+ return 3;
+ }
+
/// Returns the callee operand from the given \p MI.
virtual const MachineOperand &getCalleeOperand(const MachineInstr &MI) const {
return MI.getOperand(0);
diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp
index c0fc7a2b35ea3..92a03eb52e35d 100644
--- a/llvm/lib/CodeGen/BranchFolding.cpp
+++ b/llvm/lib/CodeGen/BranchFolding.cpp
@@ -80,7 +80,6 @@ TailMergeThreshold("tail-merge-threshold",
cl::init(150), cl::Hidden);
// Heuristic for tail merging (and, inversely, tail duplication).
-// TODO: This should be replaced with a target query.
static cl::opt<unsigned>
TailMergeSize("tail-merge-size",
cl::desc("Min number of instructions to consider tail merging"),
@@ -145,8 +144,6 @@ BranchFolder::BranchFolder(bool DefaultEnableTailMerge, bool CommonHoist,
ProfileSummaryInfo *PSI, unsigned MinTailLength)
: EnableHoistCommonCode(CommonHoist), MinCommonTailLength(MinTailLength),
MBBFreqInfo(FreqInfo), MBPI(ProbInfo), PSI(PSI) {
- if (MinCommonTailLength == 0)
- MinCommonTailLength = TailMergeSize;
switch (FlagEnableTailMerge) {
case cl::BOU_UNSET:
EnableTailMerge = DefaultEnableTailMerge;
@@ -195,6 +192,12 @@ bool BranchFolder::OptimizeFunction(MachineFunction &MF,
MLI = mli;
this->MRI = &MRI;
+ if (MinCommonTailLength == 0) {
+ MinCommonTailLength = TailMergeSize.getNumOccurrences() > 0
+ ? TailMergeSize
+ : TII->getTailMergeSize(MF);
+ }
+
UpdateLiveIns = MRI.tracksLiveness() && TRI->trackLivenessAfterRegAlloc(MF);
if (!UpdateLiveIns)
MRI.invalidateLiveness();
More information about the llvm-commits
mailing list