diff options
-rw-r--r-- | src/passes/OptimizeInstructions.cpp | 7 | ||||
-rw-r--r-- | test/passes/optimize-instructions_optimize-level=2_all-features_ignore-implicit-traps.txt | 3 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp index d43854c28..b4a5b9217 100644 --- a/src/passes/OptimizeInstructions.cpp +++ b/src/passes/OptimizeInstructions.cpp @@ -1403,9 +1403,11 @@ private: if (options.ignoreImplicitTraps) { if (ExpressionAnalyzer::equal(memCopy->dest, memCopy->source)) { + // memory.copy(x, x, sz) ==> {drop(x), drop(x), drop(sz)} Builder builder(*getModule()); - return builder.makeBlock( - {builder.makeDrop(memCopy->dest), builder.makeDrop(memCopy->source)}); + return builder.makeBlock({builder.makeDrop(memCopy->dest), + builder.makeDrop(memCopy->source), + builder.makeDrop(memCopy->size)}); } } @@ -1417,6 +1419,7 @@ private: switch (bytes) { case 0: { if (options.ignoreImplicitTraps) { + // memory.copy(dst, src, 0) ==> {drop(dst), drop(src)} return builder.makeBlock({builder.makeDrop(memCopy->dest), builder.makeDrop(memCopy->source)}); } diff --git a/test/passes/optimize-instructions_optimize-level=2_all-features_ignore-implicit-traps.txt b/test/passes/optimize-instructions_optimize-level=2_all-features_ignore-implicit-traps.txt index ee14c6e61..8c45bb46a 100644 --- a/test/passes/optimize-instructions_optimize-level=2_all-features_ignore-implicit-traps.txt +++ b/test/passes/optimize-instructions_optimize-level=2_all-features_ignore-implicit-traps.txt @@ -368,6 +368,9 @@ (drop (local.get $dst) ) + (drop + (local.get $sz) + ) ) (block (drop |