Skip to content

Commit cfb6555

Browse files
fixup! determine when DT and MLI need to be recalculated
1 parent 09678c4 commit cfb6555

File tree

6 files changed

+33
-10
lines changed

6 files changed

+33
-10
lines changed

llvm/lib/CodeGen/PeepholeOptimizer.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,8 @@ class PeepholeOptimizer : private MachineFunction::Delegate {
433433
MachineDominatorTree *DT = nullptr; // Machine dominator tree
434434
MachineLoopInfo *MLI = nullptr;
435435

436+
bool NeedToInvalidateMLI = false;
437+
436438
public:
437439
PeepholeOptimizer(MachineDominatorTree *DT, MachineLoopInfo *MLI)
438440
: DT(DT), MLI(MLI) {}
@@ -444,6 +446,7 @@ class PeepholeOptimizer : private MachineFunction::Delegate {
444446
/// Sequence of instructions that formulate recurrence cycle.
445447
using RecurrenceCycle = SmallVector<RecurrenceInstr, 4>;
446448

449+
bool needToInvalidateMLI() const { return NeedToInvalidateMLI; }
447450
private:
448451
bool optimizeCmpInstr(MachineInstr &MI);
449452
bool optimizeExtInstr(MachineInstr &MI, MachineBasicBlock &MBB,
@@ -568,8 +571,10 @@ class PeepholeOptimizerLegacy : public MachineFunctionPass {
568571
void getAnalysisUsage(AnalysisUsage &AU) const override {
569572
MachineFunctionPass::getAnalysisUsage(AU);
570573
AU.addRequired<MachineLoopInfoWrapperPass>();
571-
if (Aggressive)
574+
if (Aggressive) {
572575
AU.addRequired<MachineDominatorTreeWrapperPass>();
576+
AU.addPreserved<MachineDominatorTreeWrapperPass>();
577+
}
573578
}
574579

575580
MachineFunctionProperties getRequiredProperties() const override {
@@ -1654,7 +1659,13 @@ PeepholeOptimizerPass::run(MachineFunction &MF,
16541659
if (!Changed)
16551660
return PreservedAnalyses::all();
16561661

1657-
return getMachineFunctionPassPreservedAnalyses();
1662+
auto PA = getMachineFunctionPassPreservedAnalyses();
1663+
PA.preserve<MachineDominatorTreeAnalysis>();
1664+
if (!Impl.needToInvalidateMLI()) {
1665+
PA.preserve<MachineLoopAnalysis>();
1666+
PA.preserveSet<CFGAnalyses>();
1667+
}
1668+
return PA;
16581669
}
16591670

16601671
bool PeepholeOptimizerLegacy::runOnMachineFunction(MachineFunction &MF) {
@@ -1783,17 +1794,21 @@ bool PeepholeOptimizer::run(MachineFunction &MF) {
17831794
}
17841795

17851796
if (MI->isConditionalBranch() && optimizeCondBranch(*MI)) {
1797+
NeedToInvalidateMLI = true;
17861798
// optimizeCondBranch might have converted a conditional branch to
17871799
// an unconditional branch. If there is a branch instruction after it,
17881800
// delete it.
17891801
MachineInstr *NewBr = &*std::prev(MII);
17901802
if (NewBr->isUnconditionalBranch()) {
17911803
if (MII != MBB.end()) {
17921804
MachineInstr *Dead = &*MII;
1793-
++MII;
17941805
MachineBasicBlock *DeadDest = TII->getBranchDestBlock(*Dead);
1795-
if (DT && TII->getBranchDestBlock(*NewBr) != DeadDest)
1806+
if (DT && TII->getBranchDestBlock(*NewBr) != DeadDest) {
17961807
DT->deleteEdge(&MBB, DeadDest);
1808+
MLI->calculate(*DT);
1809+
NeedToInvalidateMLI = false;
1810+
}
1811+
++MII;
17971812
Dead->eraseFromParent();
17981813
}
17991814
}

llvm/test/CodeGen/AArch64/O3-pipeline.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@
160160
; CHECK-NEXT: Machine code sinking
161161
; CHECK-NEXT: Peephole Optimizations
162162
; CHECK-NEXT: Remove dead machine instructions
163+
; CHECK-NEXT: MachineDominator Tree Construction
164+
; CHECK-NEXT: Machine Natural Loop Construction
163165
; CHECK-NEXT: AArch64 MI Peephole Optimization pass
164166
; CHECK-NEXT: AArch64 Dead register definitions
165167
; CHECK-NEXT: Detect Dead Lanes
@@ -169,7 +171,6 @@
169171
; CHECK-NEXT: Live Variable Analysis
170172
; CHECK-NEXT: Eliminate PHI nodes for register allocation
171173
; CHECK-NEXT: Two-Address instruction pass
172-
; CHECK-NEXT: MachineDominator Tree Construction
173174
; CHECK-NEXT: Slot index numbering
174175
; CHECK-NEXT: Live Interval Analysis
175176
; CHECK-NEXT: Register Coalescer

llvm/test/CodeGen/AMDGPU/llc-pipeline.ll

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@
343343
; GCN-O1-NEXT: Remove unreachable machine basic blocks
344344
; GCN-O1-NEXT: Live Variable Analysis
345345
; GCN-O1-NEXT: MachineDominator Tree Construction
346+
; GCN-O1-NEXT: Machine Natural Loop Construction
346347
; GCN-O1-NEXT: SI Optimize VGPR LiveRange
347348
; GCN-O1-NEXT: Eliminate PHI nodes for register allocation
348349
; GCN-O1-NEXT: SI Lower control flow pseudo instructions
@@ -639,8 +640,9 @@
639640
; GCN-O1-OPTS-NEXT: GCN DPP Combine
640641
; GCN-O1-OPTS-NEXT: SI Load Store Optimizer
641642
; GCN-O1-OPTS-NEXT: SI Peephole SDWA
642-
; GCN-O1-OPTS-NEXT: Machine Block Frequency Analysis
643643
; GCN-O1-OPTS-NEXT: MachineDominator Tree Construction
644+
; GCN-O1-OPTS-NEXT: Machine Natural Loop Construction
645+
; GCN-O1-OPTS-NEXT: Machine Block Frequency Analysis
644646
; GCN-O1-OPTS-NEXT: Early Machine Loop Invariant Code Motion
645647
; GCN-O1-OPTS-NEXT: MachineDominator Tree Construction
646648
; GCN-O1-OPTS-NEXT: Machine Block Frequency Analysis
@@ -957,8 +959,9 @@
957959
; GCN-O2-NEXT: GCN DPP Combine
958960
; GCN-O2-NEXT: SI Load Store Optimizer
959961
; GCN-O2-NEXT: SI Peephole SDWA
960-
; GCN-O2-NEXT: Machine Block Frequency Analysis
961962
; GCN-O2-NEXT: MachineDominator Tree Construction
963+
; GCN-O2-NEXT: Machine Natural Loop Construction
964+
; GCN-O2-NEXT: Machine Block Frequency Analysis
962965
; GCN-O2-NEXT: Early Machine Loop Invariant Code Motion
963966
; GCN-O2-NEXT: MachineDominator Tree Construction
964967
; GCN-O2-NEXT: Machine Block Frequency Analysis
@@ -1289,8 +1292,9 @@
12891292
; GCN-O3-NEXT: GCN DPP Combine
12901293
; GCN-O3-NEXT: SI Load Store Optimizer
12911294
; GCN-O3-NEXT: SI Peephole SDWA
1292-
; GCN-O3-NEXT: Machine Block Frequency Analysis
12931295
; GCN-O3-NEXT: MachineDominator Tree Construction
1296+
; GCN-O3-NEXT: Machine Natural Loop Construction
1297+
; GCN-O3-NEXT: Machine Block Frequency Analysis
12941298
; GCN-O3-NEXT: Early Machine Loop Invariant Code Motion
12951299
; GCN-O3-NEXT: MachineDominator Tree Construction
12961300
; GCN-O3-NEXT: Machine Block Frequency Analysis

llvm/test/CodeGen/ARM/O3-pipeline.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
; CHECK-NEXT: Peephole Optimizations
105105
; CHECK-NEXT: Remove dead machine instructions
106106
; CHECK-NEXT: MachineDominator Tree Construction
107+
; CHECK-NEXT: Machine Natural Loop Construction
107108
; CHECK-NEXT: Slot index numbering
108109
; CHECK-NEXT: Live Interval Analysis
109110
; CHECK-NEXT: Lazy Machine Block Frequency Analysis

llvm/test/CodeGen/LoongArch/opt-pipeline.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,10 @@
116116
; LAXX-NEXT: Process Implicit Definitions
117117
; LAXX-NEXT: Remove unreachable machine basic blocks
118118
; LAXX-NEXT: Live Variable Analysis
119+
; LAXX-NEXT: MachineDominator Tree Construction
120+
; LAXX-NEXT: Machine Natural Loop Construction
119121
; LAXX-NEXT: Eliminate PHI nodes for register allocation
120122
; LAXX-NEXT: Two-Address instruction pass
121-
; LAXX-NEXT: MachineDominator Tree Construction
122123
; LAXX-NEXT: Slot index numbering
123124
; LAXX-NEXT: Live Interval Analysis
124125
; LAXX-NEXT: Register Coalescer

llvm/test/CodeGen/RISCV/O3-pipeline.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,14 @@
117117
; CHECK-NEXT: Machine code sinking
118118
; CHECK-NEXT: Peephole Optimizations
119119
; CHECK-NEXT: Remove dead machine instructions
120+
; CHECK-NEXT: MachineDominator Tree Construction
121+
; CHECK-NEXT: Machine Natural Loop Construction
120122
; CHECK-NEXT: Machine Trace Metrics
121123
; CHECK-NEXT: Lazy Machine Block Frequency Analysis
122124
; CHECK-NEXT: Machine InstCombiner
123125
; RV64-NEXT: RISC-V Optimize W Instructions
124126
; CHECK-NEXT: RISC-V Pre-RA pseudo instruction expansion pass
125127
; CHECK-NEXT: RISC-V Merge Base Offset
126-
; CHECK-NEXT: MachineDominator Tree Construction
127128
; CHECK-NEXT: RISC-V VL Optimizer
128129
; CHECK-NEXT: RISC-V Insert Read/Write CSR Pass
129130
; CHECK-NEXT: RISC-V Insert Write VXRM Pass

0 commit comments

Comments
 (0)