Skip to content

Commit d06f385

Browse files
optimisanvar-const
authored andcommitted
[CodeGen][NPM] Port StackFrameLayoutAnalysisPass to NPM (llvm#130070)
1 parent 536802b commit d06f385

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
@@ -292,7 +292,7 @@ void initializeSlotIndexesWrapperPassPass(PassRegistry &);
292292
void initializeSpeculativeExecutionLegacyPassPass(PassRegistry &);
293293
void initializeSpillPlacementWrapperLegacyPass(PassRegistry &);
294294
void initializeStackColoringLegacyPass(PassRegistry &);
295-
void initializeStackFrameLayoutAnalysisPassPass(PassRegistry &);
295+
void initializeStackFrameLayoutAnalysisLegacyPass(PassRegistry &);
296296
void initializeStaticDataSplitterPass(PassRegistry &);
297297
void initializeStackMapLivenessPass(PassRegistry &);
298298
void initializeStackProtectorPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
#include "llvm/CodeGen/ShadowStackGCLowering.h"
8585
#include "llvm/CodeGen/SjLjEHPrepare.h"
8686
#include "llvm/CodeGen/StackColoring.h"
87+
#include "llvm/CodeGen/StackFrameLayoutAnalysisPass.h"
8788
#include "llvm/CodeGen/StackProtector.h"
8889
#include "llvm/CodeGen/StackSlotColoring.h"
8990
#include "llvm/CodeGen/TailDuplication.h"
@@ -1021,6 +1022,8 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::addMachinePasses(
10211022
addPass(MachineOutlinerPass(RunOnAllFunctions));
10221023
}
10231024

1025+
addPass(StackFrameLayoutAnalysisPass());
1026+
10241027
// Add passes that directly emit MI after all other MI passes.
10251028
derived().addPreEmitPass2(addPass);
10261029

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ MACHINE_FUNCTION_PASS("remove-redundant-debug-values", RemoveRedundantDebugValue
188188
MACHINE_FUNCTION_PASS("require-all-machine-function-properties",
189189
RequireAllMachineFunctionPropertiesPass())
190190
MACHINE_FUNCTION_PASS("stack-coloring", StackColoringPass())
191+
MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass())
191192
MACHINE_FUNCTION_PASS("stack-slot-coloring", StackSlotColoringPass())
192193
MACHINE_FUNCTION_PASS("tailduplication", TailDuplicatePass())
193194
MACHINE_FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass())
@@ -314,7 +315,6 @@ DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass", RegAllocScoringPass)
314315
DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass)
315316
DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass)
316317
DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap", ShrinkWrapPass)
317-
DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass)
318318
DUMMY_MACHINE_FUNCTION_PASS("stackmap-liveness", StackMapLivenessPass)
319319
DUMMY_MACHINE_FUNCTION_PASS("unpack-mi-bundles", UnpackMachineBundlesPass)
320320
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
@@ -160,6 +160,7 @@
160160
#include "llvm/CodeGen/SlotIndexes.h"
161161
#include "llvm/CodeGen/SpillPlacement.h"
162162
#include "llvm/CodeGen/StackColoring.h"
163+
#include "llvm/CodeGen/StackFrameLayoutAnalysisPass.h"
163164
#include "llvm/CodeGen/StackProtector.h"
164165
#include "llvm/CodeGen/StackSlotColoring.h"
165166
#include "llvm/CodeGen/TailDuplication.h"

0 commit comments

Comments
 (0)