Skip to content

Commit 0c0c1a7

Browse files
[X86][NewPM] Port DynAllocaExpander to New PM
No tests modified as there are none that explicitly stop at DynAllocaExpander, and we do not have enough of a pipeline to run those yet anyways. Reviewers: phoebewang, RKSimon, paperchalice, arsenm Reviewed By: arsenm Pull Request: #167740
1 parent cc54ee8 commit 0c0c1a7

File tree

4 files changed

+45
-14
lines changed

4 files changed

+45
-14
lines changed

llvm/lib/Target/X86/X86.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,14 @@ FunctionPass *createX86AvoidStoreForwardingBlocks();
8484
FunctionPass *createX86FlagsCopyLoweringPass();
8585

8686
/// Return a pass that expands DynAlloca pseudo-instructions.
87-
FunctionPass *createX86DynAllocaExpander();
87+
class X86DynAllocaExpanderPass
88+
: public PassInfoMixin<X86DynAllocaExpanderPass> {
89+
public:
90+
PreservedAnalyses run(MachineFunction &MF,
91+
MachineFunctionAnalysisManager &MFAM);
92+
};
93+
94+
FunctionPass *createX86DynAllocaExpanderLegacyPass();
8895

8996
/// Return a pass that config the tile registers.
9097
FunctionPass *createX86TileConfigPass();
@@ -236,7 +243,7 @@ void initializeX86CallFrameOptimizationPass(PassRegistry &);
236243
void initializeX86CmovConverterPassPass(PassRegistry &);
237244
void initializeX86DAGToDAGISelLegacyPass(PassRegistry &);
238245
void initializeX86DomainReassignmentPass(PassRegistry &);
239-
void initializeX86DynAllocaExpanderPass(PassRegistry &);
246+
void initializeX86DynAllocaExpanderLegacyPass(PassRegistry &);
240247
void initializeX86ExecutionDomainFixPass(PassRegistry &);
241248
void initializeX86ExpandPseudoPass(PassRegistry &);
242249
void initializeX86FastPreTileConfigPass(PassRegistry &);

llvm/lib/Target/X86/X86DynAllocaExpander.cpp

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@
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

3032
using namespace llvm;
3133

3234
namespace {
3335

34-
class X86DynAllocaExpander : public MachineFunctionPass {
36+
class X86DynAllocaExpander {
3537
public:
36-
X86DynAllocaExpander() : MachineFunctionPass(ID) {}
37-
38-
bool runOnMachineFunction(MachineFunction &MF) override;
38+
bool run(MachineFunction &MF);
3939

4040
private:
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

6775
public:
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+
}

llvm/lib/Target/X86/X86PassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ DUMMY_FUNCTION_PASS("x86-winehstate", WinEHStatePass())
3030
#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
3131
#endif
3232
MACHINE_FUNCTION_PASS("x86-avoid-trailing-call", X86AvoidTrailingCallPass())
33+
MACHINE_FUNCTION_PASS("x86-dyn-alloca-expander", X86DynAllocaExpanderPass())
3334
MACHINE_FUNCTION_PASS("x86-isel", X86ISelDAGToDAGPass(*this))
3435
#undef MACHINE_FUNCTION_PASS
3536

@@ -42,7 +43,6 @@ DUMMY_MACHINE_FUNCTION_PASS("x86-cmov-conversion", X86CmovConverterPass())
4243
DUMMY_MACHINE_FUNCTION_PASS("x86-codege", FPS())
4344
DUMMY_MACHINE_FUNCTION_PASS("x86-compress-evex", CompressEVEXPass())
4445
DUMMY_MACHINE_FUNCTION_PASS("x86-domain-reassignment", X86DomainReassignment())
45-
DUMMY_MACHINE_FUNCTION_PASS("x86-dyn-alloca-expander", X86DynAllocaExpander())
4646
DUMMY_MACHINE_FUNCTION_PASS("x86-execution-domain-fix", X86ExecutionDomainFix())
4747
DUMMY_MACHINE_FUNCTION_PASS("fastpretileconfig", X86FastPreTileConfig())
4848
DUMMY_MACHINE_FUNCTION_PASS("fasttileconfig", X86FastTileConfig())

llvm/lib/Target/X86/X86TargetMachine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ extern "C" LLVM_C_ABI void LLVMInitializeX86Target() {
104104
initializeX86AsmPrinterPass(PR);
105105
initializeX86FixupInstTuningPassPass(PR);
106106
initializeX86FixupVectorConstantsPassPass(PR);
107-
initializeX86DynAllocaExpanderPass(PR);
107+
initializeX86DynAllocaExpanderLegacyPass(PR);
108108
initializeX86SuppressAPXForRelocationPassPass(PR);
109109
initializeX86WinEHUnwindV2Pass(PR);
110110
}
@@ -516,7 +516,7 @@ void X86PassConfig::addPreRegAlloc() {
516516

517517
addPass(createX86SpeculativeLoadHardeningPass());
518518
addPass(createX86FlagsCopyLoweringPass());
519-
addPass(createX86DynAllocaExpander());
519+
addPass(createX86DynAllocaExpanderLegacyPass());
520520

521521
if (getOptLevel() != CodeGenOptLevel::None)
522522
addPass(createX86PreTileConfigPass());

0 commit comments

Comments
 (0)