[llvm] [BranchFolding] Add a hook to override tail merge size (PR #99025)
Pengcheng Wang via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 16 05:44:23 PDT 2024
https://github.com/wangpc-pp created https://github.com/llvm/llvm-project/pull/99025
A new hook `TargetInstrInfo::getTailMergeSize()` is added so that
targets can override it.
This removes an existing TODO.
>From 6c2c8fc42d4e540ece65af5cbe1f5ce6bb4f4f75 Mon Sep 17 00:00:00 2001
From: Wang Pengcheng <wangpengcheng.pp at bytedance.com>
Date: Tue, 16 Jul 2024 20:41:22 +0800
Subject: [PATCH] [BranchFolding] Add a hook to override tail merge size
A new hook `TargetInstrInfo::getTailMergeSize()` is added so that
targets can override it.
This removes an existing TODO.
---
llvm/include/llvm/CodeGen/TargetInstrInfo.h | 6 ++++++
llvm/lib/CodeGen/BranchFolding.cpp | 8 +++++---
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/TargetInstrInfo.h b/llvm/include/llvm/CodeGen/TargetInstrInfo.h
index 5c7f6ddc94840..f0728cd4ccb14 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 {
+ 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..4f7e57502f50c 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,11 @@ bool BranchFolder::OptimizeFunction(MachineFunction &MF,
MLI = mli;
this->MRI = &MRI;
+ if (MinCommonTailLength == 0)
+ MinCommonTailLength = TailMergeSize.getNumOccurrences() > 0
+ ? TailMergeSize
+ : TII->getTailMergeSize();
+
UpdateLiveIns = MRI.tracksLiveness() && TRI->trackLivenessAfterRegAlloc(MF);
if (!UpdateLiveIns)
MRI.invalidateLiveness();
More information about the llvm-commits
mailing list