From f8f8f093aa8ba0ded2ff102d3681df11b8e68c67 Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Tue, 16 Feb 2016 21:44:19 +0000 Subject: [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 --- llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'llvm/lib') diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp index e23066c1a92..9108b4206cf 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); -- cgit v1.2.3