aboutsummaryrefslogtreecommitdiff
path: root/vm/compiler/codegen/arm/LocalOptimizations.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vm/compiler/codegen/arm/LocalOptimizations.cpp')
-rw-r--r--vm/compiler/codegen/arm/LocalOptimizations.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/vm/compiler/codegen/arm/LocalOptimizations.cpp b/vm/compiler/codegen/arm/LocalOptimizations.cpp
index 4c0354ac8..ffeaa576f 100644
--- a/vm/compiler/codegen/arm/LocalOptimizations.cpp
+++ b/vm/compiler/codegen/arm/LocalOptimizations.cpp
@@ -131,6 +131,12 @@ static void applyLoadStoreElimination(CompilationUnit *cUnit,
checkLIR != tailLIR;
checkLIR = NEXT_LIR(checkLIR)) {
+ /*
+ * Skip already dead instructions (whose dataflow information is
+ * outdated and misleading).
+ */
+ if (checkLIR->flags.isNop) continue;
+
u8 checkMemMask = (checkLIR->useMask | checkLIR->defMask) &
ENCODE_MEM;
u8 aliasCondition = thisMemMask & checkMemMask;
@@ -312,6 +318,10 @@ static void applyLoadHoisting(CompilationUnit *cUnit,
checkLIR != headLIR;
checkLIR = PREV_LIR(checkLIR)) {
+ /*
+ * Skip already dead instructions (whose dataflow information is
+ * outdated and misleading).
+ */
if (checkLIR->flags.isNop) continue;
u8 checkMemMask = checkLIR->defMask & ENCODE_MEM;