diff options
author | Max Graey <maxgraey@gmail.com> | 2020-08-25 00:03:28 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-24 14:03:28 -0700 |
commit | 429b2611f3a159efe3b27f99be34d7aebe9bf45f (patch) | |
tree | eb94bc1f3d273bf199408d674457fdea02735c56 | |
parent | fa43b5070b9c46c88d725ceb76f61340324d2ea0 (diff) | |
download | binaryen-429b2611f3a159efe3b27f99be34d7aebe9bf45f.tar.gz binaryen-429b2611f3a159efe3b27f99be34d7aebe9bf45f.tar.bz2 binaryen-429b2611f3a159efe3b27f99be34d7aebe9bf45f.zip |
also drop size for memory.copy(x, x, y) (#3075)
This fixes a bug in which a side effect in the calculation of the size could be lost.
-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 |