diff options
| author | Dan Gohman <dan433584@gmail.com> | 2015-09-08 20:36:33 +0000 |
|---|---|---|
| committer | Dan Gohman <dan433584@gmail.com> | 2015-09-08 20:36:33 +0000 |
| commit | e32c57443fc52c0dfff7a9da2822c3a7a5f18fc4 (patch) | |
| tree | 9ddece68ea089478ed5778a4d7506256760c4fad | |
| parent | 88f0d63beacfc39d7224ee7d044e83d8f43d040a (diff) | |
| download | bcm5719-llvm-e32c57443fc52c0dfff7a9da2822c3a7a5f18fc4.tar.gz bcm5719-llvm-e32c57443fc52c0dfff7a9da2822c3a7a5f18fc4.zip | |
[WebAssembly] Support running without a register allocator in the default CodeGen passes
This allows backends which don't use a traditional register allocator,
but do need PHI lowering and other passes, to use the default
TargetPassConfig::addFastRegAlloc and
TargetPassConfig::addOptimizedRegAlloc implementations.
Differential Revision: http://reviews.llvm.org/D12691
llvm-svn: 247065
| -rw-r--r-- | llvm/lib/CodeGen/Passes.cpp | 35 | ||||
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | 35 |
2 files changed, 19 insertions, 51 deletions
diff --git a/llvm/lib/CodeGen/Passes.cpp b/llvm/lib/CodeGen/Passes.cpp index 9b6bd4e6ad2..7196275dfd5 100644 --- a/llvm/lib/CodeGen/Passes.cpp +++ b/llvm/lib/CodeGen/Passes.cpp @@ -704,7 +704,8 @@ void TargetPassConfig::addFastRegAlloc(FunctionPass *RegAllocPass) { addPass(&PHIEliminationID, false); addPass(&TwoAddressInstructionPassID, false); - addPass(RegAllocPass); + if (RegAllocPass) + addPass(RegAllocPass); } /// Add standard target-independent passes that are tightly coupled with @@ -735,25 +736,27 @@ void TargetPassConfig::addOptimizedRegAlloc(FunctionPass *RegAllocPass) { // PreRA instruction scheduling. addPass(&MachineSchedulerID); - // Add the selected register allocation pass. - addPass(RegAllocPass); + if (RegAllocPass) { + // Add the selected register allocation pass. + addPass(RegAllocPass); - // Allow targets to change the register assignments before rewriting. - addPreRewrite(); + // Allow targets to change the register assignments before rewriting. + addPreRewrite(); - // Finally rewrite virtual registers. - addPass(&VirtRegRewriterID); + // Finally rewrite virtual registers. + addPass(&VirtRegRewriterID); - // Perform stack slot coloring and post-ra machine LICM. - // - // FIXME: Re-enable coloring with register when it's capable of adding - // kill markers. - addPass(&StackSlotColoringID); + // Perform stack slot coloring and post-ra machine LICM. + // + // FIXME: Re-enable coloring with register when it's capable of adding + // kill markers. + addPass(&StackSlotColoringID); - // Run post-ra machine LICM to hoist reloads / remats. - // - // FIXME: can this move into MachineLateOptimization? - addPass(&PostRAMachineLICMID); + // Run post-ra machine LICM to hoist reloads / remats. + // + // FIXME: can this move into MachineLateOptimization? + addPass(&PostRAMachineLICMID); + } } //===---------------------------------------------------------------------===// diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index 4950e3bbea7..60bb8eb178b 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -94,15 +94,12 @@ public: } FunctionPass *createTargetRegisterAllocator(bool) override; - void addFastRegAlloc(FunctionPass *RegAllocPass) override; - void addOptimizedRegAlloc(FunctionPass *RegAllocPass) override; void addIRPasses() override; bool addPreISel() override; bool addInstSelector() override; bool addILPOpts() override; void addPreRegAlloc() override; - void addRegAllocPasses(bool Optimized); void addPostRegAlloc() override; void addPreSched2() override; void addPreEmitPass() override; @@ -124,16 +121,6 @@ FunctionPass *WebAssemblyPassConfig::createTargetRegisterAllocator(bool) { return nullptr; // No reg alloc } -void WebAssemblyPassConfig::addFastRegAlloc(FunctionPass *RegAllocPass) { - assert(!RegAllocPass && "WebAssembly uses no regalloc!"); - addRegAllocPasses(false); -} - -void WebAssemblyPassConfig::addOptimizedRegAlloc(FunctionPass *RegAllocPass) { - assert(!RegAllocPass && "WebAssembly uses no regalloc!"); - addRegAllocPasses(true); -} - //===----------------------------------------------------------------------===// // The following functions are called from lib/CodeGen/Passes.cpp to modify // the CodeGen pass sequence. @@ -164,28 +151,6 @@ bool WebAssemblyPassConfig::addILPOpts() { return true; } void WebAssemblyPassConfig::addPreRegAlloc() {} -void WebAssemblyPassConfig::addRegAllocPasses(bool Optimized) { - // This is list is derived from the regalloc pass list used in - // addFastRegAlloc and addOptimizedRegAlloc in lib/CodeGen/Passes.cpp. We - // don't run the actual register allocator, but we do run the passes which - // lower SSA form, so after these passes are complete, we have non-SSA - // virtual registers. - - if (Optimized) { - addPass(&ProcessImplicitDefsID); - addPass(&LiveVariablesID); - addPass(&MachineLoopInfoID); - } - - addPass(&PHIEliminationID); - addPass(&TwoAddressInstructionPassID, false); - - if (Optimized) { - addPass(&RegisterCoalescerID); - addPass(&MachineSchedulerID); - } -} - void WebAssemblyPassConfig::addPostRegAlloc() { // FIXME: the following passes dislike virtual registers. Disable them for now // so that basic tests can pass. Future patches will remedy this. |

