[llvm-branch-commits] [llvm] [CodeGen][NewPM] Port machine trace metrics analysis to new pass manager. (PR #108507)
Matt Arsenault via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Oct 15 02:06:57 PDT 2024
================
@@ -395,37 +414,52 @@ MachineTraceMetrics::Ensemble *
MachineTraceMetrics::getEnsemble(MachineTraceStrategy strategy) {
assert(strategy < MachineTraceStrategy::TS_NumStrategies &&
"Invalid trace strategy enum");
- Ensemble *&E = Ensembles[static_cast<size_t>(strategy)];
+ std::unique_ptr<MachineTraceMetrics::Ensemble> &E =
+ Ensembles[static_cast<size_t>(strategy)];
if (E)
- return E;
+ return E.get();
// Allocate new Ensemble on demand.
switch (strategy) {
case MachineTraceStrategy::TS_MinInstrCount:
- return (E = new MinInstrCountEnsemble(this));
+ E = std::make_unique<MinInstrCountEnsemble>(MinInstrCountEnsemble(this));
+ break;
case MachineTraceStrategy::TS_Local:
- return (E = new LocalEnsemble(this));
+ E = std::make_unique<LocalEnsemble>(LocalEnsemble(this));
+ break;
default: llvm_unreachable("Invalid trace strategy enum");
}
+ return E.get();
}
void MachineTraceMetrics::invalidate(const MachineBasicBlock *MBB) {
LLVM_DEBUG(dbgs() << "Invalidate traces through " << printMBBReference(*MBB)
<< '\n');
BlockInfo[MBB->getNumber()].invalidate();
- for (Ensemble *E : Ensembles)
+ for (auto &E : Ensembles)
if (E)
- E->invalidate(MBB);
+ E.get()->invalidate(MBB);
+}
+
+bool MachineTraceMetrics::invalidate(
+ MachineFunction &, const PreservedAnalyses &PA,
+ MachineFunctionAnalysisManager::Invalidator &) {
+ // Check whether the analysis, all analyses on machine functions, or the
+ // machine function's CFG have been preserved.
+ auto PAC = PA.getChecker<MachineTraceMetricsAnalysis>();
+ return !PAC.preserved() &&
+ !PAC.preservedSet<AllAnalysesOn<MachineFunction>>() &&
+ !PAC.preservedSet<CFGAnalyses>();
}
void MachineTraceMetrics::verifyAnalysis() const {
if (!MF)
return;
#ifndef NDEBUG
assert(BlockInfo.size() == MF->getNumBlockIDs() && "Outdated BlockInfo size");
- for (Ensemble *E : Ensembles)
+ for (auto &E : Ensembles)
if (E)
- E->verify();
+ E.get()->verify();
----------------
arsenm wrote:
Shouldn't need .get
https://github.com/llvm/llvm-project/pull/108507
More information about the llvm-branch-commits
mailing list