[llvm] [CodeGen][NewPM] Port LiveDebugVariables to NPM (PR #115468)
Akshat Oke via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 2 00:39:42 PST 2024
================
@@ -1298,31 +1299,63 @@ static void removeDebugInstrs(MachineFunction &mf) {
}
}
-bool LiveDebugVariables::runOnMachineFunction(MachineFunction &mf) {
- if (!EnableLDV)
- return false;
- if (!mf.getFunction().getSubprogram()) {
- removeDebugInstrs(mf);
- return false;
- }
+bool LiveDebugVariablesWrapperLegacy::runOnMachineFunction(
+ MachineFunction &mf) {
+ auto *LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS();
- // Have we been asked to track variable locations using instruction
- // referencing?
- bool InstrRef = mf.useDebugInstrRef();
+ Impl = std::make_unique<LiveDebugVariables>();
+ Impl->analyze(mf, LIS);
+ return false;
+}
+
+AnalysisKey LiveDebugVariablesAnalysis::Key;
- if (!pImpl)
- pImpl = new LDVImpl(this);
- return static_cast<LDVImpl *>(pImpl)->runOnMachineFunction(mf, InstrRef);
+LiveDebugVariables
+LiveDebugVariablesAnalysis::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ auto *LIS = &MFAM.getResult<LiveIntervalsAnalysis>(MF);
+ LiveDebugVariables LDV;
+ LDV.analyze(MF, LIS);
+ return LDV;
+}
+
+PreservedAnalyses
+LiveDebugVariablesPrinterPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ auto &LDV = MFAM.getResult<LiveDebugVariablesAnalysis>(MF);
+ LDV.print(dbgs());
+ return PreservedAnalyses::all();
}
void LiveDebugVariables::releaseMemory() {
- if (pImpl)
- static_cast<LDVImpl*>(pImpl)->clear();
+ if (PImpl)
+ PImpl->clear();
}
-LiveDebugVariables::~LiveDebugVariables() {
- if (pImpl)
- delete static_cast<LDVImpl*>(pImpl);
+bool LiveDebugVariables::invalidate(
+ MachineFunction &, const PreservedAnalyses &PA,
+ MachineFunctionAnalysisManager::Invalidator &) {
+ auto PAC = PA.getChecker<LiveDebugVariablesAnalysis>();
+ // Some architectures split the register allocation into multiple phases based
+ // on register classes. This requires preserving analyses between the phases
+ // by default.
+ return !PAC.preservedWhenStateless();
----------------
optimisan wrote:
All passes are preserving this analysis and VirtRegRewriter will abandon this if it's the final one in the pipeline (`ClearVirtRegs = true`)
https://github.com/llvm/llvm-project/pull/115468
More information about the llvm-commits
mailing list