diff options
Diffstat (limited to 'vm/compiler/codegen/arm/LocalOptimizations.cpp')
| -rw-r--r-- | vm/compiler/codegen/arm/LocalOptimizations.cpp | 10 |
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; |
