Skip to content

Commit fb12863

Browse files
authored
[CodeGen][NewPM] Add MachineOptimizationRemarkEmitterAnalysis (#98601)
Add `MachineOptimizationRemarkEmitterAnalysis` the legacy version `MachineOptimizationRemarkEmitterPass` is already a wrapper.
1 parent 52139d8 commit fb12863

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

llvm/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#define LLVM_CODEGEN_MACHINEOPTIMIZATIONREMARKEMITTER_H
1717

1818
#include "llvm/CodeGen/MachineFunctionPass.h"
19+
#include "llvm/CodeGen/MachinePassManager.h"
1920
#include "llvm/IR/DiagnosticInfo.h"
2021
#include "llvm/IR/Function.h"
2122
#include <optional>
@@ -155,6 +156,13 @@ class MachineOptimizationRemarkEmitter {
155156
MachineBlockFrequencyInfo *MBFI)
156157
: MF(MF), MBFI(MBFI) {}
157158

159+
MachineOptimizationRemarkEmitter(MachineOptimizationRemarkEmitter &&) =
160+
default;
161+
162+
/// Handle invalidation events in the new pass manager.
163+
bool invalidate(MachineFunction &MF, const PreservedAnalyses &PA,
164+
MachineFunctionAnalysisManager::Invalidator &Inv);
165+
158166
/// Emit an optimization remark.
159167
void emit(DiagnosticInfoOptimizationBase &OptDiag);
160168

@@ -212,6 +220,17 @@ class MachineOptimizationRemarkEmitter {
212220
bool shouldEmitVerbose() { return MBFI != nullptr; }
213221
};
214222

223+
/// The analysis pass
224+
class MachineOptimizationRemarkEmitterAnalysis
225+
: public AnalysisInfoMixin<MachineOptimizationRemarkEmitterAnalysis> {
226+
friend AnalysisInfoMixin<MachineOptimizationRemarkEmitterAnalysis>;
227+
static AnalysisKey Key;
228+
229+
public:
230+
using Result = MachineOptimizationRemarkEmitter;
231+
Result run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM);
232+
};
233+
215234
/// The analysis pass
216235
///
217236
/// Note that this pass shouldn't generally be marked as preserved by other

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ MACHINE_FUNCTION_ANALYSIS("machine-branch-prob",
101101
MachineBranchProbabilityAnalysis())
102102
MACHINE_FUNCTION_ANALYSIS("machine-dom-tree", MachineDominatorTreeAnalysis())
103103
MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopAnalysis())
104+
MACHINE_FUNCTION_ANALYSIS("machine-opt-remark-emitter",
105+
MachineOptimizationRemarkEmitterAnalysis())
104106
MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
105107
MachinePostDominatorTreeAnalysis())
106108
MACHINE_FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
@@ -112,8 +114,6 @@ MACHINE_FUNCTION_ANALYSIS("slot-indexes", SlotIndexesAnalysis())
112114
// MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopInfoAnalysis())
113115
// MACHINE_FUNCTION_ANALYSIS("machine-dom-frontier",
114116
// MachineDominanceFrontierAnalysis())
115-
// MACHINE_FUNCTION_ANALYSIS("machine-ore",
116-
// MachineOptimizationRemarkEmitterPassAnalysis())
117117
// MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
118118
// MachinePostDominatorTreeAnalysis())
119119
// MACHINE_FUNCTION_ANALYSIS("machine-region-info",

llvm/lib/CodeGen/MachineOptimizationRemarkEmitter.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ DiagnosticInfoMIROptimization::MachineArgument::MachineArgument(
3131
/*SkipDebugLoc=*/true);
3232
}
3333

34+
bool MachineOptimizationRemarkEmitter::invalidate(
35+
MachineFunction &MF, const PreservedAnalyses &PA,
36+
MachineFunctionAnalysisManager::Invalidator &Inv) {
37+
// This analysis has no state and so can be trivially preserved but it needs
38+
// a fresh view of BFI if it was constructed with one.
39+
return MBFI && Inv.invalidate<MachineBlockFrequencyAnalysis>(MF, PA);
40+
}
41+
3442
std::optional<uint64_t>
3543
MachineOptimizationRemarkEmitter::computeHotness(const MachineBasicBlock &MBB) {
3644
if (!MBFI)
@@ -86,6 +94,18 @@ void MachineOptimizationRemarkEmitterPass::getAnalysisUsage(
8694
MachineFunctionPass::getAnalysisUsage(AU);
8795
}
8896

97+
AnalysisKey MachineOptimizationRemarkEmitterAnalysis::Key;
98+
99+
MachineOptimizationRemarkEmitterAnalysis::Result
100+
MachineOptimizationRemarkEmitterAnalysis::run(
101+
MachineFunction &MF, MachineFunctionAnalysisManager &MFAM) {
102+
MachineBlockFrequencyInfo *MBFI =
103+
MF.getFunction().getContext().getDiagnosticsHotnessRequested()
104+
? &MFAM.getResult<MachineBlockFrequencyAnalysis>(MF)
105+
: nullptr;
106+
return Result(MF, MBFI);
107+
}
108+
89109
char MachineOptimizationRemarkEmitterPass::ID = 0;
90110
static const char ore_name[] = "Machine Optimization Remark Emitter";
91111
#define ORE_NAME "machine-opt-remark-emitter"

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
#include "llvm/CodeGen/MachineDominators.h"
101101
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
102102
#include "llvm/CodeGen/MachineLoopInfo.h"
103+
#include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"
103104
#include "llvm/CodeGen/MachinePassManager.h"
104105
#include "llvm/CodeGen/MachinePostDominators.h"
105106
#include "llvm/CodeGen/MachineRegisterInfo.h"

0 commit comments

Comments
 (0)