-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[NFC][EarlyIfConverter] Turn SSAIfConv into a local variable #107390
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-backend-systemz @llvm/pr-subscribers-backend-powerpc Author: Juan Manuel Martinez Caamaño (jmmartinez) ChangesThis change simplifies refactoring later. For more context please refer to this draft. Full diff: https://github.com/llvm/llvm-project/pull/107390.diff 1 Files Affected:
diff --git a/llvm/lib/CodeGen/EarlyIfConversion.cpp b/llvm/lib/CodeGen/EarlyIfConversion.cpp
index 0de8112fb72c89..ff2dae7a3b1784 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,9 +1199,11 @@ 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);
@@ -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;
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Didn't look at how this helps the use case, but seems fine
This will simplify refactoring later.
3887de1
to
18cc82a
Compare
…lvm#107390)" This reverts commit 09a4c23.
This change simplifies refactoring later.
For more context please refer to this draft.