aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
diff options
context:
space:
mode:
authorDerek Schuff <dschuff@google.com>2016-02-16 21:44:19 +0000
committerDerek Schuff <dschuff@google.com>2016-02-16 21:44:19 +0000
commitf8f8f093aa8ba0ded2ff102d3681df11b8e68c67 (patch)
tree91addacae3a431e065724490a0a682bc65fc7d21 /llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
parent106fedab6f7ea001eb95e7f42cfc67b046ec3049 (diff)
downloadllvm-f8f8f093aa8ba0ded2ff102d3681df11b8e68c67.zip
llvm-f8f8f093aa8ba0ded2ff102d3681df11b8e68c67.tar.gz
llvm-f8f8f093aa8ba0ded2ff102d3681df11b8e68c67.tar.bz2
[WebAssemly] Don't move calls or stores past intervening loads
The register stackifier currently checks for intervening stores (and loads that may alias them) but doesn't account for the fact that the instruction being moved may affect intervening loads. Differential Revision: http://reviews.llvm.org/D17298 llvm-svn: 261014
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
index e23066c..9108b42 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
@@ -129,6 +129,7 @@ static bool IsSafeToMove(const MachineInstr *Def, const MachineInstr *Insert,
return false;
}
+ SawStore = Def->isCall() || Def->mayStore();
// Check for memory dependencies and side effects.
for (--I; I != D; --I)
SawSideEffects |= !I->isSafeToMove(&AA, SawStore);