2020#include " X86Subtarget.h"
2121#include " llvm/ADT/MapVector.h"
2222#include " llvm/ADT/PostOrderIterator.h"
23+ #include " llvm/CodeGen/MachineFunctionAnalysisManager.h"
2324#include " llvm/CodeGen/MachineFunctionPass.h"
2425#include " llvm/CodeGen/MachineInstrBuilder.h"
2526#include " llvm/CodeGen/MachineRegisterInfo.h"
2627#include " llvm/CodeGen/Passes.h"
2728#include " llvm/CodeGen/TargetInstrInfo.h"
29+ #include " llvm/IR/Analysis.h"
2830#include " llvm/IR/Function.h"
2931
3032using namespace llvm ;
3133
3234namespace {
3335
34- class X86DynAllocaExpander : public MachineFunctionPass {
36+ class X86DynAllocaExpander {
3537public:
36- X86DynAllocaExpander () : MachineFunctionPass(ID) {}
37-
38- bool runOnMachineFunction (MachineFunction &MF) override ;
38+ bool run (MachineFunction &MF);
3939
4040private:
4141 // / Strategies for lowering a DynAlloca.
@@ -61,22 +61,30 @@ class X86DynAllocaExpander : public MachineFunctionPass {
6161 unsigned SlotSize = 0 ;
6262 int64_t StackProbeSize = 0 ;
6363 bool NoStackArgProbe = false ;
64+ };
65+
66+ class X86DynAllocaExpanderLegacy : public MachineFunctionPass {
67+ public:
68+ X86DynAllocaExpanderLegacy () : MachineFunctionPass(ID) {}
69+
70+ bool runOnMachineFunction (MachineFunction &MF) override ;
6471
72+ private:
6573 StringRef getPassName () const override { return " X86 DynAlloca Expander" ; }
6674
6775public:
6876 static char ID;
6977};
7078
71- char X86DynAllocaExpander ::ID = 0 ;
79+ char X86DynAllocaExpanderLegacy ::ID = 0 ;
7280
7381} // end anonymous namespace
7482
75- INITIALIZE_PASS (X86DynAllocaExpander , " x86-dyn-alloca-expander" ,
83+ INITIALIZE_PASS (X86DynAllocaExpanderLegacy , " x86-dyn-alloca-expander" ,
7684 " X86 DynAlloca Expander" , false , false )
7785
78- FunctionPass *llvm::createX86DynAllocaExpander () {
79- return new X86DynAllocaExpander ();
86+ FunctionPass *llvm::createX86DynAllocaExpanderLegacyPass () {
87+ return new X86DynAllocaExpanderLegacy ();
8088}
8189
8290// / Return the allocation amount for a DynAlloca instruction, or -1 if unknown.
@@ -277,7 +285,7 @@ void X86DynAllocaExpander::lower(MachineInstr *MI, Lowering L) {
277285 AmountDef->eraseFromParent ();
278286}
279287
280- bool X86DynAllocaExpander::runOnMachineFunction (MachineFunction &MF) {
288+ bool X86DynAllocaExpander::run (MachineFunction &MF) {
281289 if (!MF.getInfo <X86MachineFunctionInfo>()->hasDynAlloca ())
282290 return false ;
283291
@@ -299,3 +307,19 @@ bool X86DynAllocaExpander::runOnMachineFunction(MachineFunction &MF) {
299307
300308 return true ;
301309}
310+
311+ bool X86DynAllocaExpanderLegacy::runOnMachineFunction (MachineFunction &MF) {
312+ return X86DynAllocaExpander ().run (MF);
313+ }
314+
315+ PreservedAnalyses
316+ X86DynAllocaExpanderPass::run (MachineFunction &MF,
317+ MachineFunctionAnalysisManager &MFAM) {
318+ bool Changed = X86DynAllocaExpander ().run (MF);
319+ if (!Changed)
320+ return PreservedAnalyses::all ();
321+
322+ PreservedAnalyses PA = PreservedAnalyses::none ();
323+ PA.preserveSet <CFGAnalyses>();
324+ return PA;
325+ }
0 commit comments