Skip to content

Commit

Permalink
[CodeGen][NewPM] Add MachineOptimizationRemarkEmitterAnalysis (#98601)
Browse files Browse the repository at this point in the history
Add `MachineOptimizationRemarkEmitterAnalysis` the legacy version
`MachineOptimizationRemarkEmitterPass` is already a wrapper.
  • Loading branch information
paperchalice committed Jul 14, 2024
1 parent 52139d8 commit fb12863
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 2 deletions.
19 changes: 19 additions & 0 deletions llvm/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#define LLVM_CODEGEN_MACHINEOPTIMIZATIONREMARKEMITTER_H

#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachinePassManager.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Function.h"
#include <optional>
Expand Down Expand Up @@ -155,6 +156,13 @@ class MachineOptimizationRemarkEmitter {
MachineBlockFrequencyInfo *MBFI)
: MF(MF), MBFI(MBFI) {}

MachineOptimizationRemarkEmitter(MachineOptimizationRemarkEmitter &&) =
default;

/// Handle invalidation events in the new pass manager.
bool invalidate(MachineFunction &MF, const PreservedAnalyses &PA,
MachineFunctionAnalysisManager::Invalidator &Inv);

/// Emit an optimization remark.
void emit(DiagnosticInfoOptimizationBase &OptDiag);

Expand Down Expand Up @@ -212,6 +220,17 @@ class MachineOptimizationRemarkEmitter {
bool shouldEmitVerbose() { return MBFI != nullptr; }
};

/// The analysis pass
class MachineOptimizationRemarkEmitterAnalysis
: public AnalysisInfoMixin<MachineOptimizationRemarkEmitterAnalysis> {
friend AnalysisInfoMixin<MachineOptimizationRemarkEmitterAnalysis>;
static AnalysisKey Key;

public:
using Result = MachineOptimizationRemarkEmitter;
Result run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM);
};

/// The analysis pass
///
/// Note that this pass shouldn't generally be marked as preserved by other
Expand Down
4 changes: 2 additions & 2 deletions llvm/include/llvm/Passes/MachinePassRegistry.def
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ MACHINE_FUNCTION_ANALYSIS("machine-branch-prob",
MachineBranchProbabilityAnalysis())
MACHINE_FUNCTION_ANALYSIS("machine-dom-tree", MachineDominatorTreeAnalysis())
MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopAnalysis())
MACHINE_FUNCTION_ANALYSIS("machine-opt-remark-emitter",
MachineOptimizationRemarkEmitterAnalysis())
MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
MachinePostDominatorTreeAnalysis())
MACHINE_FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
Expand All @@ -112,8 +114,6 @@ MACHINE_FUNCTION_ANALYSIS("slot-indexes", SlotIndexesAnalysis())
// MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopInfoAnalysis())
// MACHINE_FUNCTION_ANALYSIS("machine-dom-frontier",
// MachineDominanceFrontierAnalysis())
// MACHINE_FUNCTION_ANALYSIS("machine-ore",
// MachineOptimizationRemarkEmitterPassAnalysis())
// MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
// MachinePostDominatorTreeAnalysis())
// MACHINE_FUNCTION_ANALYSIS("machine-region-info",
Expand Down
20 changes: 20 additions & 0 deletions llvm/lib/CodeGen/MachineOptimizationRemarkEmitter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,14 @@ DiagnosticInfoMIROptimization::MachineArgument::MachineArgument(
/*SkipDebugLoc=*/true);
}

bool MachineOptimizationRemarkEmitter::invalidate(
MachineFunction &MF, const PreservedAnalyses &PA,
MachineFunctionAnalysisManager::Invalidator &Inv) {
// This analysis has no state and so can be trivially preserved but it needs
// a fresh view of BFI if it was constructed with one.
return MBFI && Inv.invalidate<MachineBlockFrequencyAnalysis>(MF, PA);
}

std::optional<uint64_t>
MachineOptimizationRemarkEmitter::computeHotness(const MachineBasicBlock &MBB) {
if (!MBFI)
Expand Down Expand Up @@ -86,6 +94,18 @@ void MachineOptimizationRemarkEmitterPass::getAnalysisUsage(
MachineFunctionPass::getAnalysisUsage(AU);
}

AnalysisKey MachineOptimizationRemarkEmitterAnalysis::Key;

MachineOptimizationRemarkEmitterAnalysis::Result
MachineOptimizationRemarkEmitterAnalysis::run(
MachineFunction &MF, MachineFunctionAnalysisManager &MFAM) {
MachineBlockFrequencyInfo *MBFI =
MF.getFunction().getContext().getDiagnosticsHotnessRequested()
? &MFAM.getResult<MachineBlockFrequencyAnalysis>(MF)
: nullptr;
return Result(MF, MBFI);
}

char MachineOptimizationRemarkEmitterPass::ID = 0;
static const char ore_name[] = "Machine Optimization Remark Emitter";
#define ORE_NAME "machine-opt-remark-emitter"
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Passes/PassBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@
#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"
#include "llvm/CodeGen/MachinePassManager.h"
#include "llvm/CodeGen/MachinePostDominators.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
Expand Down

0 comments on commit fb12863

Please sign in to comment.