diff options
author | Dan Gohman <dan433584@gmail.com> | 2015-12-25 00:31:02 +0000 |
---|---|---|
committer | Dan Gohman <dan433584@gmail.com> | 2015-12-25 00:31:02 +0000 |
commit | 8887d1faedb890defbeee4f849a6a9a22bda4af5 (patch) | |
tree | 9159cca49461127efe975f761adbaf3e9a225e0b /llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | |
parent | 99d235329f0e26bd0a3df51069b91e84289ca31b (diff) | |
download | bcm5719-llvm-8887d1faedb890defbeee4f849a6a9a22bda4af5.tar.gz bcm5719-llvm-8887d1faedb890defbeee4f849a6a9a22bda4af5.zip |
[WebAssembly] Fix handling of COPY instructions in WebAssemblyRegStackify.
Move RegStackify after coalescing and teach it to use LiveIntervals instead
of depending on SSA form. This avoids a problem where a register in a COPY
instruction is stackified and then subsequently coalesced with a register
that is not stackified.
This also puts it after the scheduler, which allows us to simplify the
EXPR_STACK constraint, as we no longer have instructions being reordered
after stackification and before coloring.
llvm-svn: 256402
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index c774c120bb5..e31ea46de9f 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -165,12 +165,6 @@ void WebAssemblyPassConfig::addPreRegAlloc() { // Prepare store instructions for register stackifying. addPass(createWebAssemblyStoreResults()); - - // Mark registers as representing wasm's expression stack. - addPass(createWebAssemblyRegStackify()); - // The register coalescing pass has a bad interaction with COPY MIs which have - // EXPR_STACK as an extra operand - // disablePass(&RegisterCoalescerID); } void WebAssemblyPassConfig::addPostRegAlloc() { @@ -184,6 +178,9 @@ void WebAssemblyPassConfig::addPostRegAlloc() { // Fails with: should be run after register allocation. disablePass(&MachineCopyPropagationID); + // Mark registers as representing wasm's expression stack. + addPass(createWebAssemblyRegStackify()); + // Run the register coloring pass to reduce the total number of registers. addPass(createWebAssemblyRegColoring()); |