Skip to content

Commit eaf3342

Browse files
committed
[CodeGen][NewPM] Port machine post dominator tree analysis to new pass manager
Follows #95879.
1 parent 4684d0c commit eaf3342

File tree

4 files changed

+61
-0
lines changed

4 files changed

+61
-0
lines changed

llvm/include/llvm/CodeGen/MachinePostDominators.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ class MachinePostDominatorTree : public PostDomTreeBase<MachineBasicBlock> {
4949
public:
5050
MachinePostDominatorTree() = default;
5151

52+
MachinePostDominatorTree(MachineFunction &MF) { recalculate(MF); }
53+
54+
/// Handle invalidation explicitly.
55+
bool invalidate(MachineFunction &, const PreservedAnalyses &PA,
56+
MachineFunctionAnalysisManager::Invalidator &);
57+
5258
/// Make findNearestCommonDominator(const NodeT *A, const NodeT *B) available.
5359
using Base::findNearestCommonDominator;
5460

@@ -58,6 +64,28 @@ class MachinePostDominatorTree : public PostDomTreeBase<MachineBasicBlock> {
5864
findNearestCommonDominator(ArrayRef<MachineBasicBlock *> Blocks) const;
5965
};
6066

67+
class MachinePostDominatorTreeAnalysis
68+
: public AnalysisInfoMixin<MachinePostDominatorTreeAnalysis> {
69+
friend AnalysisInfoMixin<MachinePostDominatorTreeAnalysis>;
70+
71+
static AnalysisKey Key;
72+
73+
public:
74+
using Result = MachinePostDominatorTree;
75+
76+
Result run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM);
77+
};
78+
79+
class MachinePostDominatorTreePrinterPass
80+
: public PassInfoMixin<MachinePostDominatorTreePrinterPass> {
81+
raw_ostream &OS;
82+
83+
public:
84+
MachinePostDominatorTreePrinterPass(raw_ostream &OS) : OS(OS) {}
85+
PreservedAnalyses run(MachineFunction &MF,
86+
MachineFunctionAnalysisManager &MFAM);
87+
};
88+
6189
class MachinePostDominatorTreeWrapperPass : public MachineFunctionPass {
6290
std::optional<MachinePostDominatorTree> PDT;
6391

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ LOOP_PASS("loop-reduce", LoopStrengthReducePass())
9090
#define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS)
9191
#endif
9292
MACHINE_FUNCTION_ANALYSIS("machine-dom-tree", MachineDominatorTreeAnalysis())
93+
MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
94+
MachinePostDominatorTreeAnalysis())
9395
MACHINE_FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
9496
// LiveVariables currently requires pure SSA form.
9597
// FIXME: Once TwoAddressInstruction pass no longer uses kill flags,
@@ -130,6 +132,8 @@ MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass())
130132
MACHINE_FUNCTION_PASS("print", PrintMIRPass())
131133
MACHINE_FUNCTION_PASS("print<machine-dom-tree>",
132134
MachineDominatorTreePrinterPass(dbgs()))
135+
MACHINE_FUNCTION_PASS("print<machine-post-dom-tree>",
136+
MachinePostDominatorTreePrinterPass(dbgs()))
133137
MACHINE_FUNCTION_PASS("require-all-machine-function-properties",
134138
RequireAllMachineFunctionPropertiesPass())
135139
MACHINE_FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass())

llvm/lib/CodeGen/MachinePostDominators.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,23 @@ template bool Verify<MBBPostDomTree>(const MBBPostDomTree &DT,
3939
extern bool VerifyMachineDomInfo;
4040
} // namespace llvm
4141

42+
AnalysisKey MachinePostDominatorTreeAnalysis::Key;
43+
44+
MachinePostDominatorTreeAnalysis::Result
45+
MachinePostDominatorTreeAnalysis::run(MachineFunction &MF,
46+
MachineFunctionAnalysisManager &) {
47+
return MachinePostDominatorTree(MF);
48+
}
49+
50+
PreservedAnalyses
51+
MachinePostDominatorTreePrinterPass::run(MachineFunction &MF,
52+
MachineFunctionAnalysisManager &MFAM) {
53+
OS << "MachinePostDominatorTree for machine function: " << MF.getName()
54+
<< '\n';
55+
MFAM.getResult<MachinePostDominatorTreeAnalysis>(MF).print(OS);
56+
return PreservedAnalyses::all();
57+
}
58+
4259
char MachinePostDominatorTreeWrapperPass::ID = 0;
4360

4461
//declare initializeMachinePostDominatorTreePass
@@ -64,6 +81,17 @@ void MachinePostDominatorTreeWrapperPass::getAnalysisUsage(
6481
MachineFunctionPass::getAnalysisUsage(AU);
6582
}
6683

84+
bool MachinePostDominatorTree::invalidate(
85+
MachineFunction &, const PreservedAnalyses &PA,
86+
MachineFunctionAnalysisManager::Invalidator &) {
87+
// Check whether the analysis, all analyses on machine functions, or the
88+
// machine function's CFG have been preserved.
89+
auto PAC = PA.getChecker<MachinePostDominatorTreeAnalysis>();
90+
return !PAC.preserved() &&
91+
!PAC.preservedSet<AllAnalysesOn<MachineFunction>>() &&
92+
!PAC.preservedSet<CFGAnalyses>();
93+
}
94+
6795
MachineBasicBlock *MachinePostDominatorTree::findNearestCommonDominator(
6896
ArrayRef<MachineBasicBlock *> Blocks) const {
6997
assert(!Blocks.empty());

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
#include "llvm/CodeGen/MachineDominators.h"
9797
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
9898
#include "llvm/CodeGen/MachinePassManager.h"
99+
#include "llvm/CodeGen/MachinePostDominators.h"
99100
#include "llvm/CodeGen/MachineRegisterInfo.h"
100101
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
101102
#include "llvm/CodeGen/RegAllocFast.h"

0 commit comments

Comments
 (0)