1616//
1717// ===----------------------------------------------------------------------===//
1818
19+ #include " llvm/CodeGen/StackFrameLayoutAnalysisPass.h"
1920#include " llvm/ADT/SetVector.h"
2021#include " llvm/Analysis/OptimizationRemarkEmitter.h"
2122#include " llvm/CodeGen/MachineFrameInfo.h"
@@ -43,9 +44,11 @@ namespace {
4344// / StackFrameLayoutAnalysisPass - This is a pass to dump the stack frame of a
4445// / MachineFunction.
4546// /
46- struct StackFrameLayoutAnalysisPass : public MachineFunctionPass {
47+ struct StackFrameLayoutAnalysis {
4748 using SlotDbgMap = SmallDenseMap<int , SetVector<const DILocalVariable *>>;
48- static char ID;
49+ MachineOptimizationRemarkEmitter &ORE;
50+
51+ StackFrameLayoutAnalysis (MachineOptimizationRemarkEmitter &ORE) : ORE(ORE) {}
4952
5053 enum SlotType {
5154 Spill, // a Spill slot
@@ -99,19 +102,7 @@ struct StackFrameLayoutAnalysisPass : public MachineFunctionPass {
99102 }
100103 };
101104
102- StackFrameLayoutAnalysisPass () : MachineFunctionPass(ID) {}
103-
104- StringRef getPassName () const override {
105- return " Stack Frame Layout Analysis" ;
106- }
107-
108- void getAnalysisUsage (AnalysisUsage &AU) const override {
109- AU.setPreservesAll ();
110- MachineFunctionPass::getAnalysisUsage (AU);
111- AU.addRequired <MachineOptimizationRemarkEmitterPass>();
112- }
113-
114- bool runOnMachineFunction (MachineFunction &MF) override {
105+ bool run (MachineFunction &MF) {
115106 // TODO: We should implement a similar filter for remarks:
116107 // -Rpass-func-filter=<regex>
117108 if (!isFunctionInPrintList (MF.getName ()))
@@ -126,7 +117,7 @@ struct StackFrameLayoutAnalysisPass : public MachineFunctionPass {
126117 &MF.front ());
127118 Rem << (" \n Function: " + MF.getName ()).str ();
128119 emitStackFrameLayoutRemarks (MF, Rem);
129- getAnalysis<MachineOptimizationRemarkEmitterPass>(). getORE () .emit (Rem);
120+ ORE .emit (Rem);
130121 return false ;
131122 }
132123
@@ -278,17 +269,47 @@ struct StackFrameLayoutAnalysisPass : public MachineFunctionPass {
278269 }
279270};
280271
281- char StackFrameLayoutAnalysisPass::ID = 0 ;
272+ class StackFrameLayoutAnalysisLegacy : public MachineFunctionPass {
273+ public:
274+ static char ID;
275+
276+ StackFrameLayoutAnalysisLegacy () : MachineFunctionPass(ID) {}
277+
278+ StringRef getPassName () const override {
279+ return " Stack Frame Layout Analysis" ;
280+ }
281+
282+ void getAnalysisUsage (AnalysisUsage &AU) const override {
283+ AU.setPreservesAll ();
284+ MachineFunctionPass::getAnalysisUsage (AU);
285+ AU.addRequired <MachineOptimizationRemarkEmitterPass>();
286+ }
287+
288+ bool runOnMachineFunction (MachineFunction &MF) override {
289+ auto &ORE = getAnalysis<MachineOptimizationRemarkEmitterPass>().getORE ();
290+ return StackFrameLayoutAnalysis (ORE).run (MF);
291+ }
292+ };
293+
294+ char StackFrameLayoutAnalysisLegacy::ID = 0 ;
282295} // namespace
283296
284- char &llvm::StackFrameLayoutAnalysisPassID = StackFrameLayoutAnalysisPass::ID;
285- INITIALIZE_PASS (StackFrameLayoutAnalysisPass, " stack-frame-layout" ,
297+ PreservedAnalyses
298+ llvm::StackFrameLayoutAnalysisPass::run (MachineFunction &MF,
299+ MachineFunctionAnalysisManager &MFAM) {
300+ auto &ORE = MFAM.getResult <MachineOptimizationRemarkEmitterAnalysis>(MF);
301+ StackFrameLayoutAnalysis (ORE).run (MF);
302+ return PreservedAnalyses::all ();
303+ }
304+
305+ char &llvm::StackFrameLayoutAnalysisPassID = StackFrameLayoutAnalysisLegacy::ID;
306+ INITIALIZE_PASS (StackFrameLayoutAnalysisLegacy, " stack-frame-layout" ,
286307 " Stack Frame Layout" , false , false )
287308
288309namespace llvm {
289310// / Returns a newly-created StackFrameLayout pass.
290311MachineFunctionPass *createStackFrameLayoutAnalysisPass () {
291- return new StackFrameLayoutAnalysisPass ();
312+ return new StackFrameLayoutAnalysisLegacy ();
292313}
293314
294315} // namespace llvm
0 commit comments