diff options
author | Derek Schuff <dschuff@google.com> | 2016-02-16 21:44:19 +0000 |
---|---|---|
committer | Derek Schuff <dschuff@google.com> | 2016-02-16 21:44:19 +0000 |
commit | f8f8f093aa8ba0ded2ff102d3681df11b8e68c67 (patch) | |
tree | 91addacae3a431e065724490a0a682bc65fc7d21 /llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp | |
parent | 106fedab6f7ea001eb95e7f42cfc67b046ec3049 (diff) | |
download | llvm-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.cpp | 1 |
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); |