mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-29 06:30:39 +00:00
[NVPTX] Directly control the Machine SSA passes that are invoked for NVPTX.
NVPTX is a bit special in the optimizations it requires, so this gives us better control over the backend optimization pipeline. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211927 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a54609ed93
commit
7d7f3e3923
@ -106,6 +106,7 @@ public:
|
||||
bool addInstSelector() override;
|
||||
bool addPreRegAlloc() override;
|
||||
bool addPostRegAlloc() override;
|
||||
void addMachineSSAOptimization() override;
|
||||
|
||||
FunctionPass *createTargetRegisterAllocator(bool) override;
|
||||
void addFastRegAlloc(FunctionPass *RegAllocPass) override;
|
||||
@ -207,3 +208,43 @@ void NVPTXPassConfig::addOptimizedRegAlloc(FunctionPass *RegAllocPass) {
|
||||
|
||||
printAndVerify("After StackSlotColoring");
|
||||
}
|
||||
|
||||
void NVPTXPassConfig::addMachineSSAOptimization() {
|
||||
// Pre-ra tail duplication.
|
||||
if (addPass(&EarlyTailDuplicateID))
|
||||
printAndVerify("After Pre-RegAlloc TailDuplicate");
|
||||
|
||||
// Optimize PHIs before DCE: removing dead PHI cycles may make more
|
||||
// instructions dead.
|
||||
addPass(&OptimizePHIsID);
|
||||
|
||||
// This pass merges large allocas. StackSlotColoring is a different pass
|
||||
// which merges spill slots.
|
||||
addPass(&StackColoringID);
|
||||
|
||||
// If the target requests it, assign local variables to stack slots relative
|
||||
// to one another and simplify frame index references where possible.
|
||||
addPass(&LocalStackSlotAllocationID);
|
||||
|
||||
// With optimization, dead code should already be eliminated. However
|
||||
// there is one known exception: lowered code for arguments that are only
|
||||
// used by tail calls, where the tail calls reuse the incoming stack
|
||||
// arguments directly (see t11 in test/CodeGen/X86/sibcall.ll).
|
||||
addPass(&DeadMachineInstructionElimID);
|
||||
printAndVerify("After codegen DCE pass");
|
||||
|
||||
// Allow targets to insert passes that improve instruction level parallelism,
|
||||
// like if-conversion. Such passes will typically need dominator trees and
|
||||
// loop info, just like LICM and CSE below.
|
||||
if (addILPOpts())
|
||||
printAndVerify("After ILP optimizations");
|
||||
|
||||
addPass(&MachineLICMID);
|
||||
addPass(&MachineCSEID);
|
||||
|
||||
addPass(&MachineSinkingID);
|
||||
printAndVerify("After Machine LICM, CSE and Sinking passes");
|
||||
|
||||
addPass(&PeepholeOptimizerID);
|
||||
printAndVerify("After codegen peephole optimization pass");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user