diff options
Diffstat (limited to 'src/passes/OptimizeInstructions.cpp')
-rw-r--r-- | src/passes/OptimizeInstructions.cpp | 7 |
1 files changed, 5 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)}); } |