Skip to content

Commit

Permalink
Revert "[NFC][EarlyIfConverter] Turn SSAIfConv into a local variable (l…
Browse files Browse the repository at this point in the history
…lvm#107390)" (llvm#111385)

This reverts commit 09a4c23.
  • Loading branch information
jmmartinez authored Oct 8, 2024
1 parent f658c1b commit 1df8ccd
Showing 1 changed file with 22 additions and 21 deletions.
43 changes: 22 additions & 21 deletions llvm/lib/CodeGen/EarlyIfConversion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@ class SSAIfConv {
void rewritePHIOperands();

public:
SSAIfConv(MachineFunction &MF) {
/// runOnMachineFunction - Initialize per-function data structures.
void runOnMachineFunction(MachineFunction &MF) {
TII = MF.getSubtarget().getInstrInfo();
TRI = MF.getSubtarget().getRegisterInfo();
MRI = &MF.getRegInfo();
Expand Down Expand Up @@ -768,6 +769,7 @@ class EarlyIfConverter : public MachineFunctionPass {
MachineLoopInfo *Loops = nullptr;
MachineTraceMetrics *Traces = nullptr;
MachineTraceMetrics::Ensemble *MinInstr = nullptr;
SSAIfConv IfConv;

public:
static char ID;
Expand All @@ -777,9 +779,9 @@ class EarlyIfConverter : public MachineFunctionPass {
StringRef getPassName() const override { return "Early If-Conversion"; }

private:
bool tryConvertIf(SSAIfConv &IfConv, MachineBasicBlock *);
void invalidateTraces(SSAIfConv &IfConv);
bool shouldConvertIf(SSAIfConv &IfConv);
bool tryConvertIf(MachineBasicBlock *);
void invalidateTraces();
bool shouldConvertIf();
};
} // end anonymous namespace

Expand Down Expand Up @@ -835,7 +837,7 @@ void updateLoops(MachineLoopInfo *Loops,
} // namespace

/// Invalidate MachineTraceMetrics before if-conversion.
void EarlyIfConverter::invalidateTraces(SSAIfConv &IfConv) {
void EarlyIfConverter::invalidateTraces() {
Traces->verifyAnalysis();
Traces->invalidate(IfConv.Head);
Traces->invalidate(IfConv.Tail);
Expand Down Expand Up @@ -865,7 +867,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(SSAIfConv &IfConv) {
bool EarlyIfConverter::shouldConvertIf() {
// Stress testing mode disables all cost considerations.
if (Stress)
return true;
Expand Down Expand Up @@ -1058,11 +1060,11 @@ bool EarlyIfConverter::shouldConvertIf(SSAIfConv &IfConv) {

/// Attempt repeated if-conversion on MBB, return true if successful.
///
bool EarlyIfConverter::tryConvertIf(SSAIfConv &IfConv, MachineBasicBlock *MBB) {
bool EarlyIfConverter::tryConvertIf(MachineBasicBlock *MBB) {
bool Changed = false;
while (IfConv.canConvertIf(MBB) && shouldConvertIf(IfConv)) {
while (IfConv.canConvertIf(MBB) && shouldConvertIf()) {
// If-convert MBB and update analyses.
invalidateTraces(IfConv);
invalidateTraces();
SmallVector<MachineBasicBlock *, 4> RemoveBlocks;
IfConv.convertIf(RemoveBlocks);
Changed = true;
Expand Down Expand Up @@ -1095,14 +1097,14 @@ bool EarlyIfConverter::runOnMachineFunction(MachineFunction &MF) {
MinInstr = nullptr;

bool Changed = false;
SSAIfConv IfConv(MF);
IfConv.runOnMachineFunction(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(IfConv, DomNode->getBlock()))
if (tryConvertIf(DomNode->getBlock()))
Changed = true;

return Changed;
Expand All @@ -1121,6 +1123,7 @@ class EarlyIfPredicator : public MachineFunctionPass {
MachineDominatorTree *DomTree = nullptr;
MachineBranchProbabilityInfo *MBPI = nullptr;
MachineLoopInfo *Loops = nullptr;
SSAIfConv IfConv;

public:
static char ID;
Expand All @@ -1130,8 +1133,8 @@ class EarlyIfPredicator : public MachineFunctionPass {
StringRef getPassName() const override { return "Early If-predicator"; }

protected:
bool tryConvertIf(SSAIfConv &IfConv, MachineBasicBlock *);
bool shouldConvertIf(SSAIfConv &IfConv);
bool tryConvertIf(MachineBasicBlock *);
bool shouldConvertIf();
};
} // end anonymous namespace

Expand All @@ -1158,7 +1161,7 @@ void EarlyIfPredicator::getAnalysisUsage(AnalysisUsage &AU) const {
}

/// Apply the target heuristic to decide if the transformation is profitable.
bool EarlyIfPredicator::shouldConvertIf(SSAIfConv &IfConv) {
bool EarlyIfPredicator::shouldConvertIf() {
auto TrueProbability = MBPI->getEdgeProbability(IfConv.Head, IfConv.TBB);
if (IfConv.isTriangle()) {
MachineBasicBlock &IfBlock =
Expand Down Expand Up @@ -1198,14 +1201,12 @@ bool EarlyIfPredicator::shouldConvertIf(SSAIfConv &IfConv) {

/// Attempt repeated if-conversion on MBB, return true if successful.
///
bool EarlyIfPredicator::tryConvertIf(SSAIfConv &IfConv,
MachineBasicBlock *MBB) {
bool EarlyIfPredicator::tryConvertIf(MachineBasicBlock *MBB) {
bool Changed = false;
while (IfConv.canConvertIf(MBB, /*Predicate=*/true) &&
shouldConvertIf(IfConv)) {
while (IfConv.canConvertIf(MBB, /*Predicate*/ true) && shouldConvertIf()) {
// 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)
Expand All @@ -1231,14 +1232,14 @@ bool EarlyIfPredicator::runOnMachineFunction(MachineFunction &MF) {
MBPI = &getAnalysis<MachineBranchProbabilityInfoWrapperPass>().getMBPI();

bool Changed = false;
SSAIfConv IfConv(MF);
IfConv.runOnMachineFunction(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(IfConv, DomNode->getBlock()))
if (tryConvertIf(DomNode->getBlock()))
Changed = true;

return Changed;
Expand Down

0 comments on commit 1df8ccd

Please sign in to comment.