Skip to content

Commit cc9405a

Browse files
committed
[CodeGen][NewPM] Port RegisterUsageInfo to NPM
1 parent 5d4a0d5 commit cc9405a

File tree

8 files changed

+84
-20
lines changed

8 files changed

+84
-20
lines changed

llvm/include/llvm/CodeGen/RegisterUsageInfo.h

Lines changed: 51 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
#include "llvm/ADT/ArrayRef.h"
2222
#include "llvm/ADT/DenseMap.h"
23+
#include "llvm/IR/PassManager.h"
2324
#include "llvm/InitializePasses.h"
2425
#include "llvm/Pass.h"
2526
#include "llvm/PassRegistry.h"
@@ -31,21 +32,14 @@ namespace llvm {
3132
class Function;
3233
class LLVMTargetMachine;
3334

34-
class PhysicalRegisterUsageInfo : public ImmutablePass {
35+
class PhysicalRegisterUsageInfo {
3536
public:
36-
static char ID;
37-
38-
PhysicalRegisterUsageInfo() : ImmutablePass(ID) {
39-
PassRegistry &Registry = *PassRegistry::getPassRegistry();
40-
initializePhysicalRegisterUsageInfoPass(Registry);
41-
}
42-
4337
/// Set TargetMachine which is used to print analysis.
4438
void setTargetMachine(const LLVMTargetMachine &TM);
4539

46-
bool doInitialization(Module &M) override;
40+
bool doInitialization(Module &M);
4741

48-
bool doFinalization(Module &M) override;
42+
bool doFinalization(Module &M);
4943

5044
/// To store RegMask for given Function *.
5145
void storeUpdateRegUsageInfo(const Function &FP,
@@ -55,7 +49,7 @@ class PhysicalRegisterUsageInfo : public ImmutablePass {
5549
/// array if function is not known.
5650
ArrayRef<uint32_t> getRegUsageInfo(const Function &FP);
5751

58-
void print(raw_ostream &OS, const Module *M = nullptr) const override;
52+
void print(raw_ostream &OS, const Module *M = nullptr) const;
5953

6054
private:
6155
/// A Dense map from Function * to RegMask.
@@ -66,6 +60,52 @@ class PhysicalRegisterUsageInfo : public ImmutablePass {
6660
const LLVMTargetMachine *TM = nullptr;
6761
};
6862

63+
class PhysicalRegisterUsageInfoWrapperLegacy : public ImmutablePass {
64+
std::unique_ptr<PhysicalRegisterUsageInfo> PRUI;
65+
66+
public:
67+
static char ID;
68+
PhysicalRegisterUsageInfoWrapperLegacy() : ImmutablePass(ID) {
69+
initializePhysicalRegisterUsageInfoWrapperLegacyPass(
70+
*PassRegistry::getPassRegistry());
71+
}
72+
73+
PhysicalRegisterUsageInfo &getPRUI() { return *PRUI; }
74+
const PhysicalRegisterUsageInfo &getPRUI() const { return *PRUI; }
75+
76+
bool doInitialization(Module &M) override {
77+
PRUI.reset(new PhysicalRegisterUsageInfo());
78+
return PRUI->doInitialization(M);
79+
}
80+
81+
bool doFinalization(Module &M) override { return PRUI->doFinalization(M); }
82+
83+
void print(raw_ostream &OS, const Module *M = nullptr) const override {
84+
PRUI->print(OS, M);
85+
}
86+
};
87+
88+
class PhysicalRegisterUsageInfoAnalysis
89+
: public AnalysisInfoMixin<PhysicalRegisterUsageInfoAnalysis> {
90+
friend AnalysisInfoMixin<PhysicalRegisterUsageInfoAnalysis>;
91+
static AnalysisKey Key;
92+
93+
public:
94+
using Result = PhysicalRegisterUsageInfo;
95+
96+
PhysicalRegisterUsageInfo run(Module &M, ModuleAnalysisManager &);
97+
};
98+
99+
class PhysicalRegisterUsageInfoPrinterPass
100+
: public PassInfoMixin<PhysicalRegisterUsageInfoPrinterPass> {
101+
raw_ostream &OS;
102+
103+
public:
104+
explicit PhysicalRegisterUsageInfoPrinterPass(raw_ostream &OS) : OS(OS) {}
105+
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
106+
static bool isRequired() { return true; }
107+
};
108+
69109
} // end namespace llvm
70110

71111
#endif // LLVM_CODEGEN_REGISTERUSAGEINFO_H

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ void initializePartiallyInlineLibCallsLegacyPassPass(PassRegistry &);
228228
void initializePatchableFunctionPass(PassRegistry &);
229229
void initializePeepholeOptimizerPass(PassRegistry &);
230230
void initializePhiValuesWrapperPassPass(PassRegistry &);
231-
void initializePhysicalRegisterUsageInfoPass(PassRegistry &);
231+
void initializePhysicalRegisterUsageInfoWrapperLegacyPass(PassRegistry &);
232232
void initializePlaceBackedgeSafepointsLegacyPassPass(PassRegistry &);
233233
void initializePostDomOnlyPrinterWrapperPassPass(PassRegistry &);
234234
void initializePostDomOnlyViewerWrapperPassPass(PassRegistry &);

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ MODULE_PASS("jmc-instrumenter", JMCInstrumenterPass())
2929
MODULE_PASS("lower-emutls", LowerEmuTLSPass())
3030
MODULE_PASS("pre-isel-intrinsic-lowering", PreISelIntrinsicLoweringPass())
3131
MODULE_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass())
32+
MODULE_PASS("print<regusage>", PhysicalRegisterUsageInfoPrinterPass(dbgs()))
3233
#undef MODULE_PASS
3334

3435
#ifndef FUNCTION_ANALYSIS

llvm/lib/CodeGen/RegUsageInfoCollector.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class RegUsageInfoCollector : public MachineFunctionPass {
4848
}
4949

5050
void getAnalysisUsage(AnalysisUsage &AU) const override {
51-
AU.addRequired<PhysicalRegisterUsageInfo>();
51+
AU.addRequired<PhysicalRegisterUsageInfoWrapperLegacy>();
5252
AU.setPreservesAll();
5353
MachineFunctionPass::getAnalysisUsage(AU);
5454
}
@@ -68,7 +68,7 @@ char RegUsageInfoCollector::ID = 0;
6868

6969
INITIALIZE_PASS_BEGIN(RegUsageInfoCollector, "RegUsageInfoCollector",
7070
"Register Usage Information Collector", false, false)
71-
INITIALIZE_PASS_DEPENDENCY(PhysicalRegisterUsageInfo)
71+
INITIALIZE_PASS_DEPENDENCY(PhysicalRegisterUsageInfoWrapperLegacy)
7272
INITIALIZE_PASS_END(RegUsageInfoCollector, "RegUsageInfoCollector",
7373
"Register Usage Information Collector", false, false)
7474

@@ -129,7 +129,8 @@ bool RegUsageInfoCollector::runOnMachineFunction(MachineFunction &MF) {
129129

130130
const Function &F = MF.getFunction();
131131

132-
PhysicalRegisterUsageInfo &PRUI = getAnalysis<PhysicalRegisterUsageInfo>();
132+
PhysicalRegisterUsageInfo &PRUI =
133+
getAnalysis<PhysicalRegisterUsageInfoWrapperLegacy>().getPRUI();
133134
PRUI.setTargetMachine(TM);
134135

135136
LLVM_DEBUG(dbgs() << "Clobbered Registers: ");

llvm/lib/CodeGen/RegUsageInfoPropagate.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class RegUsageInfoPropagation : public MachineFunctionPass {
5050
bool runOnMachineFunction(MachineFunction &MF) override;
5151

5252
void getAnalysisUsage(AnalysisUsage &AU) const override {
53-
AU.addRequired<PhysicalRegisterUsageInfo>();
53+
AU.addRequired<PhysicalRegisterUsageInfoWrapperLegacy>();
5454
AU.setPreservesAll();
5555
MachineFunctionPass::getAnalysisUsage(AU);
5656
}
@@ -75,7 +75,7 @@ class RegUsageInfoPropagation : public MachineFunctionPass {
7575

7676
INITIALIZE_PASS_BEGIN(RegUsageInfoPropagation, "reg-usage-propagation",
7777
RUIP_NAME, false, false)
78-
INITIALIZE_PASS_DEPENDENCY(PhysicalRegisterUsageInfo)
78+
INITIALIZE_PASS_DEPENDENCY(PhysicalRegisterUsageInfoWrapperLegacy)
7979
INITIALIZE_PASS_END(RegUsageInfoPropagation, "reg-usage-propagation",
8080
RUIP_NAME, false, false)
8181

@@ -97,7 +97,8 @@ static const Function *findCalledFunction(const Module &M,
9797

9898
bool RegUsageInfoPropagation::runOnMachineFunction(MachineFunction &MF) {
9999
const Module &M = *MF.getFunction().getParent();
100-
PhysicalRegisterUsageInfo *PRUI = &getAnalysis<PhysicalRegisterUsageInfo>();
100+
PhysicalRegisterUsageInfo *PRUI =
101+
&getAnalysis<PhysicalRegisterUsageInfoWrapperLegacy>().getPRUI();
101102

102103
LLVM_DEBUG(dbgs() << " ++++++++++++++++++++ " << getPassName()
103104
<< " ++++++++++++++++++++ \n");

llvm/lib/CodeGen/RegisterUsageInfo.cpp

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
#include "llvm/CodeGen/MachineOperand.h"
1717
#include "llvm/CodeGen/TargetRegisterInfo.h"
1818
#include "llvm/CodeGen/TargetSubtargetInfo.h"
19+
#include "llvm/IR/Analysis.h"
1920
#include "llvm/IR/Function.h"
2021
#include "llvm/IR/Module.h"
22+
#include "llvm/IR/PassManager.h"
2123
#include "llvm/Pass.h"
2224
#include "llvm/Support/CommandLine.h"
2325
#include "llvm/Support/raw_ostream.h"
@@ -32,10 +34,10 @@ static cl::opt<bool> DumpRegUsage(
3234
"print-regusage", cl::init(false), cl::Hidden,
3335
cl::desc("print register usage details collected for analysis."));
3436

35-
INITIALIZE_PASS(PhysicalRegisterUsageInfo, "reg-usage-info",
37+
INITIALIZE_PASS(PhysicalRegisterUsageInfoWrapperLegacy, "reg-usage-info",
3638
"Register Usage Information Storage", false, true)
3739

38-
char PhysicalRegisterUsageInfo::ID = 0;
40+
char PhysicalRegisterUsageInfoWrapperLegacy::ID = 0;
3941

4042
void PhysicalRegisterUsageInfo::setTargetMachine(const LLVMTargetMachine &TM) {
4143
this->TM = &TM;
@@ -97,3 +99,19 @@ void PhysicalRegisterUsageInfo::print(raw_ostream &OS, const Module *M) const {
9799
OS << "\n";
98100
}
99101
}
102+
103+
AnalysisKey PhysicalRegisterUsageInfoAnalysis::Key;
104+
PhysicalRegisterUsageInfo
105+
PhysicalRegisterUsageInfoAnalysis::run(Module &M, ModuleAnalysisManager &) {
106+
PhysicalRegisterUsageInfo PRUI;
107+
PRUI.doInitialization(M);
108+
return PRUI;
109+
}
110+
111+
PreservedAnalyses
112+
PhysicalRegisterUsageInfoPrinterPass::run(Module &M,
113+
ModuleAnalysisManager &AM) {
114+
auto *PRUI = &AM.getResult<PhysicalRegisterUsageInfoAnalysis>(M);
115+
PRUI->print(OS, &M);
116+
return PreservedAnalyses::all();
117+
}

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118
#include "llvm/CodeGen/PHIElimination.h"
119119
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
120120
#include "llvm/CodeGen/RegAllocFast.h"
121+
#include "llvm/CodeGen/RegisterUsageInfo.h"
121122
#include "llvm/CodeGen/SafeStack.h"
122123
#include "llvm/CodeGen/SelectOptimize.h"
123124
#include "llvm/CodeGen/ShadowStackGCLowering.h"

llvm/lib/Passes/PassRegistry.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ MODULE_ANALYSIS("module-summary", ModuleSummaryIndexAnalysis())
3030
MODULE_ANALYSIS("no-op-module", NoOpModuleAnalysis())
3131
MODULE_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
3232
MODULE_ANALYSIS("profile-summary", ProfileSummaryAnalysis())
33+
MODULE_ANALYSIS("reg-usage-info", PhysicalRegisterUsageInfoAnalysis())
3334
MODULE_ANALYSIS("stack-safety", StackSafetyGlobalAnalysis())
3435
MODULE_ANALYSIS("verify", VerifierAnalysis())
3536

@@ -127,6 +128,7 @@ MODULE_PASS("print<dxil-metadata>", DXILMetadataAnalysisPrinterPass(dbgs()))
127128
MODULE_PASS("print<dxil-resource>", DXILResourcePrinterPass(dbgs()))
128129
MODULE_PASS("print<inline-advisor>", InlineAdvisorAnalysisPrinterPass(dbgs()))
129130
MODULE_PASS("print<module-debuginfo>", ModuleDebugInfoPrinterPass(dbgs()))
131+
MODULE_PASS("print<regusage>", PhysicalRegisterUsageInfoPrinterPass(dbgs()))
130132
MODULE_PASS("pseudo-probe", SampleProfileProbePass(TM))
131133
MODULE_PASS("pseudo-probe-update", PseudoProbeUpdatePass())
132134
MODULE_PASS("recompute-globalsaa", RecomputeGlobalsAAPass())

0 commit comments

Comments
 (0)