summaryrefslogtreecommitdiff
path: root/src/passes/OptimizeInstructions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/OptimizeInstructions.cpp')
-rw-r--r--src/passes/OptimizeInstructions.cpp7
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)});
}