diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp index b7bbebf89d7..78cdc4718a0 100644 --- a/src/passes/OptimizeInstructions.cpp +++ b/src/passes/OptimizeInstructions.cpp @@ -1399,16 +1399,6 @@ struct OptimizeInstructions } Expression* optimizeMemoryCopy(MemoryCopy* memCopy) { - FeatureSet features = getModule()->features; - - // memory.copy(x, x, sz) ==> nop - if (!EffectAnalyzer(getPassOptions(), features, memCopy->dest) - .hasSideEffects() && - !EffectAnalyzer(getPassOptions(), features, memCopy->size) - .hasSideEffects() && - ExpressionAnalyzer::equal(memCopy->dest, memCopy->source)) { - return ExpressionManipulator::nop(memCopy); - } // memory.copy(dst, src, C) ==> store(dst, load(src)) if (auto* csize = memCopy->size->dynCast()) { auto bytes = csize->value.geti32(); @@ -1444,7 +1434,7 @@ struct OptimizeInstructions if (getPassOptions().shrinkLevel == 0) { // This adds an extra 2 bytes so apply it only for // minimal shrink level - if (features.hasSIMD()) { + if (getModule()->features.hasSIMD()) { return builder.makeStore( bytes, // bytes 0, // offset diff --git a/test/passes/optimize-instructions_all-features.txt b/test/passes/optimize-instructions_all-features.txt index 509a7825d76..e865fd9f821 100644 --- a/test/passes/optimize-instructions_all-features.txt +++ b/test/passes/optimize-instructions_all-features.txt @@ -3729,7 +3729,11 @@ ) ) (func $optimize-bulk-memory-copy (param $dst i32) (param $src i32) (param $sz i32) - (nop) + (memory.copy + (local.get $dst) + (local.get $dst) + (local.get $sz) + ) (block (drop (local.get $dst) diff --git a/test/passes/optimize-instructions_all-features.wast b/test/passes/optimize-instructions_all-features.wast index 7a37b366c9e..9a560fc9142 100644 --- a/test/passes/optimize-instructions_all-features.wast +++ b/test/passes/optimize-instructions_all-features.wast @@ -4234,7 +4234,7 @@ )) ) (func $optimize-bulk-memory-copy (param $dst i32) (param $src i32) (param $sz i32) - (memory.copy ;; nop + (memory.copy ;; skip (local.get $dst) (local.get $dst) (local.get $sz)