[llvm] [NFC][EarlyIfConverter] Turn SSAIfConv into a local variable (PR #107390)
Juan Manuel Martinez CaamaƱo via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 13 01:36:39 PDT 2024
https://github.com/jmmartinez updated https://github.com/llvm/llvm-project/pull/107390
>From 18cc82a9913cbc4b95a3dc476604e6b4675bd52c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Juan=20Manuel=20Martinez=20Caama=C3=B1o?= <juamarti at amd.com>
Date: Tue, 3 Sep 2024 16:05:00 +0200
Subject: [PATCH] [NFC][EarlyIfConverter] Make SSAIfConv into a local variable
This will simplify refactoring later.
---
llvm/lib/CodeGen/EarlyIfConversion.cpp | 43 +++++++++++++-------------
1 file changed, 21 insertions(+), 22 deletions(-)
diff --git a/llvm/lib/CodeGen/EarlyIfConversion.cpp b/llvm/lib/CodeGen/EarlyIfConversion.cpp
index 0de8112fb72c89..99ffc01ca4ebb9 100644
--- a/llvm/lib/CodeGen/EarlyIfConversion.cpp
+++ b/llvm/lib/CodeGen/EarlyIfConversion.cpp
@@ -163,8 +163,7 @@ class SSAIfConv {
void rewritePHIOperands();
public:
- /// runOnMachineFunction - Initialize per-function data structures.
- void runOnMachineFunction(MachineFunction &MF) {
+ SSAIfConv(MachineFunction &MF) {
TII = MF.getSubtarget().getInstrInfo();
TRI = MF.getSubtarget().getRegisterInfo();
MRI = &MF.getRegInfo();
@@ -770,7 +769,6 @@ class EarlyIfConverter : public MachineFunctionPass {
MachineLoopInfo *Loops = nullptr;
MachineTraceMetrics *Traces = nullptr;
MachineTraceMetrics::Ensemble *MinInstr = nullptr;
- SSAIfConv IfConv;
public:
static char ID;
@@ -780,9 +778,9 @@ class EarlyIfConverter : public MachineFunctionPass {
StringRef getPassName() const override { return "Early If-Conversion"; }
private:
- bool tryConvertIf(MachineBasicBlock*);
- void invalidateTraces();
- bool shouldConvertIf();
+ bool tryConvertIf(SSAIfConv &IfConv, MachineBasicBlock *);
+ void invalidateTraces(SSAIfConv &IfConv);
+ bool shouldConvertIf(SSAIfConv &IfConv);
};
} // end anonymous namespace
@@ -838,7 +836,7 @@ void updateLoops(MachineLoopInfo *Loops,
} // namespace
/// Invalidate MachineTraceMetrics before if-conversion.
-void EarlyIfConverter::invalidateTraces() {
+void EarlyIfConverter::invalidateTraces(SSAIfConv &IfConv) {
Traces->verifyAnalysis();
Traces->invalidate(IfConv.Head);
Traces->invalidate(IfConv.Tail);
@@ -868,7 +866,7 @@ template <typename Remark> Remark &operator<<(Remark &R, Cycles C) {
/// Apply cost model and heuristics to the if-conversion in IfConv.
/// Return true if the conversion is a good idea.
///
-bool EarlyIfConverter::shouldConvertIf() {
+bool EarlyIfConverter::shouldConvertIf(SSAIfConv &IfConv) {
// Stress testing mode disables all cost considerations.
if (Stress)
return true;
@@ -1061,11 +1059,11 @@ bool EarlyIfConverter::shouldConvertIf() {
/// Attempt repeated if-conversion on MBB, return true if successful.
///
-bool EarlyIfConverter::tryConvertIf(MachineBasicBlock *MBB) {
+bool EarlyIfConverter::tryConvertIf(SSAIfConv &IfConv, MachineBasicBlock *MBB) {
bool Changed = false;
- while (IfConv.canConvertIf(MBB) && shouldConvertIf()) {
+ while (IfConv.canConvertIf(MBB) && shouldConvertIf(IfConv)) {
// If-convert MBB and update analyses.
- invalidateTraces();
+ invalidateTraces(IfConv);
SmallVector<MachineBasicBlock *, 4> RemoveBlocks;
IfConv.convertIf(RemoveBlocks);
Changed = true;
@@ -1098,14 +1096,14 @@ bool EarlyIfConverter::runOnMachineFunction(MachineFunction &MF) {
MinInstr = nullptr;
bool Changed = false;
- IfConv.runOnMachineFunction(MF);
+ SSAIfConv IfConv(MF);
// Visit blocks in dominator tree post-order. The post-order enables nested
// if-conversion in a single pass. The tryConvertIf() function may erase
// blocks, but only blocks dominated by the head block. This makes it safe to
// update the dominator tree while the post-order iterator is still active.
for (auto *DomNode : post_order(DomTree))
- if (tryConvertIf(DomNode->getBlock()))
+ if (tryConvertIf(IfConv, DomNode->getBlock()))
Changed = true;
return Changed;
@@ -1124,7 +1122,6 @@ class EarlyIfPredicator : public MachineFunctionPass {
MachineDominatorTree *DomTree = nullptr;
MachineBranchProbabilityInfo *MBPI = nullptr;
MachineLoopInfo *Loops = nullptr;
- SSAIfConv IfConv;
public:
static char ID;
@@ -1134,8 +1131,8 @@ class EarlyIfPredicator : public MachineFunctionPass {
StringRef getPassName() const override { return "Early If-predicator"; }
protected:
- bool tryConvertIf(MachineBasicBlock *);
- bool shouldConvertIf();
+ bool tryConvertIf(SSAIfConv &IfConv, MachineBasicBlock *);
+ bool shouldConvertIf(SSAIfConv &IfConv);
};
} // end anonymous namespace
@@ -1162,7 +1159,7 @@ void EarlyIfPredicator::getAnalysisUsage(AnalysisUsage &AU) const {
}
/// Apply the target heuristic to decide if the transformation is profitable.
-bool EarlyIfPredicator::shouldConvertIf() {
+bool EarlyIfPredicator::shouldConvertIf(SSAIfConv &IfConv) {
auto TrueProbability = MBPI->getEdgeProbability(IfConv.Head, IfConv.TBB);
if (IfConv.isTriangle()) {
MachineBasicBlock &IfBlock =
@@ -1202,12 +1199,14 @@ bool EarlyIfPredicator::shouldConvertIf() {
/// Attempt repeated if-conversion on MBB, return true if successful.
///
-bool EarlyIfPredicator::tryConvertIf(MachineBasicBlock *MBB) {
+bool EarlyIfPredicator::tryConvertIf(SSAIfConv &IfConv,
+ MachineBasicBlock *MBB) {
bool Changed = false;
- while (IfConv.canConvertIf(MBB, /*Predicate*/ true) && shouldConvertIf()) {
+ while (IfConv.canConvertIf(MBB, /*Predicate=*/true) &&
+ shouldConvertIf(IfConv)) {
// If-convert MBB and update analyses.
SmallVector<MachineBasicBlock *, 4> RemoveBlocks;
- IfConv.convertIf(RemoveBlocks, /*Predicate*/ true);
+ IfConv.convertIf(RemoveBlocks, /*Predicate=*/true);
Changed = true;
updateDomTree(DomTree, IfConv, RemoveBlocks);
for (MachineBasicBlock *MBB : RemoveBlocks)
@@ -1233,14 +1232,14 @@ bool EarlyIfPredicator::runOnMachineFunction(MachineFunction &MF) {
MBPI = &getAnalysis<MachineBranchProbabilityInfoWrapperPass>().getMBPI();
bool Changed = false;
- IfConv.runOnMachineFunction(MF);
+ SSAIfConv IfConv(MF);
// Visit blocks in dominator tree post-order. The post-order enables nested
// if-conversion in a single pass. The tryConvertIf() function may erase
// blocks, but only blocks dominated by the head block. This makes it safe to
// update the dominator tree while the post-order iterator is still active.
for (auto *DomNode : post_order(DomTree))
- if (tryConvertIf(DomNode->getBlock()))
+ if (tryConvertIf(IfConv, DomNode->getBlock()))
Changed = true;
return Changed;
More information about the llvm-commits
mailing list