Skip to content

Commit 92a1774

Browse files
committed
[CodeGen][NPM] Port StackFrameLayoutAnalysisPass to NPM
1 parent ca3edf5 commit 92a1774

File tree

7 files changed

+74
-23
lines changed

7 files changed

+74
-23
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//===- llvm/CodeGen/StackFrameLayoutAnalysisPass.h --------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_CODEGEN_STACKFRAMELAYOUTANALYSISPASS_H
10+
#define LLVM_CODEGEN_STACKFRAMELAYOUTANALYSISPASS_H
11+
12+
#include "llvm/CodeGen/MachinePassManager.h"
13+
14+
namespace llvm {
15+
16+
class StackFrameLayoutAnalysisPass
17+
: public PassInfoMixin<StackFrameLayoutAnalysisPass> {
18+
public:
19+
PreservedAnalyses run(MachineFunction &MF,
20+
MachineFunctionAnalysisManager &MFAM);
21+
static bool isRequired() { return true; }
22+
};
23+
24+
} // namespace llvm
25+
26+
#endif // LLVM_CODEGEN_STACKFRAMELAYOUTANALYSISPASS_H

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ void initializeSlotIndexesWrapperPassPass(PassRegistry &);
290290
void initializeSpeculativeExecutionLegacyPassPass(PassRegistry &);
291291
void initializeSpillPlacementWrapperLegacyPass(PassRegistry &);
292292
void initializeStackColoringLegacyPass(PassRegistry &);
293-
void initializeStackFrameLayoutAnalysisPassPass(PassRegistry &);
293+
void initializeStackFrameLayoutAnalysisLegacyPass(PassRegistry &);
294294
void initializeStaticDataSplitterPass(PassRegistry &);
295295
void initializeStackMapLivenessPass(PassRegistry &);
296296
void initializeStackProtectorPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
#include "llvm/CodeGen/ShadowStackGCLowering.h"
8181
#include "llvm/CodeGen/SjLjEHPrepare.h"
8282
#include "llvm/CodeGen/StackColoring.h"
83+
#include "llvm/CodeGen/StackFrameLayoutAnalysisPass.h"
8384
#include "llvm/CodeGen/StackProtector.h"
8485
#include "llvm/CodeGen/StackSlotColoring.h"
8586
#include "llvm/CodeGen/TailDuplication.h"
@@ -1015,6 +1016,8 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::addMachinePasses(
10151016
addPass(MachineOutlinerPass(RunOnAllFunctions));
10161017
}
10171018

1019+
addPass(StackFrameLayoutAnalysisPass());
1020+
10181021
// Add passes that directly emit MI after all other MI passes.
10191022
derived().addPreEmitPass2(addPass);
10201023

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ MACHINE_FUNCTION_PASS("remove-redundant-debug-values", RemoveRedundantDebugValue
187187
MACHINE_FUNCTION_PASS("require-all-machine-function-properties",
188188
RequireAllMachineFunctionPropertiesPass())
189189
MACHINE_FUNCTION_PASS("stack-coloring", StackColoringPass())
190+
MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass())
190191
MACHINE_FUNCTION_PASS("stack-slot-coloring", StackSlotColoringPass())
191192
MACHINE_FUNCTION_PASS("tailduplication", TailDuplicatePass())
192193
MACHINE_FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass())
@@ -295,7 +296,6 @@ DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass", RegAllocScoringPass)
295296
DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass)
296297
DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass)
297298
DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap", ShrinkWrapPass)
298-
DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass)
299299
DUMMY_MACHINE_FUNCTION_PASS("stackmap-liveness", StackMapLivenessPass)
300300
DUMMY_MACHINE_FUNCTION_PASS("unpack-mi-bundles", UnpackMachineBundlesPass)
301301
DUMMY_MACHINE_FUNCTION_PASS("virtregrewriter", VirtRegRewriterPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
127127
initializeSjLjEHPreparePass(Registry);
128128
initializeSlotIndexesWrapperPassPass(Registry);
129129
initializeStackColoringLegacyPass(Registry);
130-
initializeStackFrameLayoutAnalysisPassPass(Registry);
130+
initializeStackFrameLayoutAnalysisLegacyPass(Registry);
131131
initializeStackMapLivenessPass(Registry);
132132
initializeStackProtectorPass(Registry);
133133
initializeStackSlotColoringLegacyPass(Registry);

llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
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 << ("\nFunction: " + 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

288309
namespace llvm {
289310
/// Returns a newly-created StackFrameLayout pass.
290311
MachineFunctionPass *createStackFrameLayoutAnalysisPass() {
291-
return new StackFrameLayoutAnalysisPass();
312+
return new StackFrameLayoutAnalysisLegacy();
292313
}
293314

294315
} // namespace llvm

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@
155155
#include "llvm/CodeGen/SlotIndexes.h"
156156
#include "llvm/CodeGen/SpillPlacement.h"
157157
#include "llvm/CodeGen/StackColoring.h"
158+
#include "llvm/CodeGen/StackFrameLayoutAnalysisPass.h"
158159
#include "llvm/CodeGen/StackProtector.h"
159160
#include "llvm/CodeGen/StackSlotColoring.h"
160161
#include "llvm/CodeGen/TailDuplication.h"

0 commit comments

Comments
 (0)