diff options
-rw-r--r-- | src/passes/SimplifyGlobals.cpp | 8 | ||||
-rw-r--r-- | test/passes/O1.txt | 4 | ||||
-rw-r--r-- | test/passes/simplify-globals-optimizing_enable-mutable-globals.txt | 13 | ||||
-rw-r--r-- | test/passes/simplify-globals-optimizing_enable-mutable-globals.wast | 20 | ||||
-rw-r--r-- | test/passes/simplify-globals_all-features.txt | 12 |
5 files changed, 48 insertions, 9 deletions
diff --git a/src/passes/SimplifyGlobals.cpp b/src/passes/SimplifyGlobals.cpp index a8012aa44..361e0bb61 100644 --- a/src/passes/SimplifyGlobals.cpp +++ b/src/passes/SimplifyGlobals.cpp @@ -178,13 +178,13 @@ struct GlobalSetRemover : public WalkerPass<PostWalker<GlobalSetRemover>> { void visitGlobalSet(GlobalSet* curr) { if (toRemove->count(curr->name) != 0) { - ExpressionManipulator::nop(curr); - nopped = true; + replaceCurrent(Builder(*getModule()).makeDrop(curr->value)); + removed = true; } } void visitFunction(Function* curr) { - if (nopped && optimize) { + if (removed && optimize) { PassRunner runner(getModule(), getPassRunner()->options); runner.setIsNested(true); runner.addDefaultFunctionOptimizationPasses(); @@ -195,7 +195,7 @@ struct GlobalSetRemover : public WalkerPass<PostWalker<GlobalSetRemover>> { private: const NameSet* toRemove; bool optimize; - bool nopped = false; + bool removed = false; }; } // anonymous namespace diff --git a/test/passes/O1.txt b/test/passes/O1.txt index 1a63c5dbc..8c286d8e6 100644 --- a/test/passes/O1.txt +++ b/test/passes/O1.txt @@ -3,7 +3,9 @@ (memory $0 1 1) (export "foo" (func $0)) (func $0 (result i32) - (nop) + (drop + (i32.const 0) + ) (i32.load align=1 (i32.const 4) ) diff --git a/test/passes/simplify-globals-optimizing_enable-mutable-globals.txt b/test/passes/simplify-globals-optimizing_enable-mutable-globals.txt index 2876b4f37..fdb82e15d 100644 --- a/test/passes/simplify-globals-optimizing_enable-mutable-globals.txt +++ b/test/passes/simplify-globals-optimizing_enable-mutable-globals.txt @@ -41,7 +41,7 @@ (import "env" "global-1" (global $g1 i32)) (global $g2 i32 (global.get $g1)) (func $foo - (nop) + (unreachable) ) ) (module @@ -160,3 +160,14 @@ (i32.const 100) ) ) +(module + (type $none_=>_f64 (func (result f64))) + (global $global$0 i32 (i32.const 0)) + (global $global$1 i32 (i32.const 0)) + (export "func_9" (func $0)) + (func $0 (result f64) + (drop + (unreachable) + ) + ) +) diff --git a/test/passes/simplify-globals-optimizing_enable-mutable-globals.wast b/test/passes/simplify-globals-optimizing_enable-mutable-globals.wast index 91ef66ebf..152672385 100644 --- a/test/passes/simplify-globals-optimizing_enable-mutable-globals.wast +++ b/test/passes/simplify-globals-optimizing_enable-mutable-globals.wast @@ -126,3 +126,23 @@ (global.get $g1) ) ) +;; don't remove a value with a side effect +(module + (global $global$0 (mut i32) (i32.const 0)) + (global $global$1 (mut i32) (i32.const 0)) + (export "func_9" (func $0)) + (func $0 (result f64) + (global.set $global$0 + (block $label$1 (result i32) + (if + (i32.eqz + (global.get $global$1) + ) + (unreachable) + ) + (i32.const 2) + ) + ) + (f64.const 1) + ) +) diff --git a/test/passes/simplify-globals_all-features.txt b/test/passes/simplify-globals_all-features.txt index c851d67b5..9c1663b0a 100644 --- a/test/passes/simplify-globals_all-features.txt +++ b/test/passes/simplify-globals_all-features.txt @@ -41,7 +41,9 @@ (import "env" "global-1" (global $g1 i32)) (global $g2 i32 (global.get $g1)) (func $foo - (nop) + (drop + (unreachable) + ) ) ) (module @@ -203,7 +205,9 @@ (global.set $g1 (i32.const 100) ) - (nop) + (drop + (local.get $x) + ) (i32.const 100) ) ) @@ -230,6 +234,8 @@ (type $none_=>_none (func)) (global $write-only i32 (i32.const 1)) (func $foo - (nop) + (drop + (i32.const 2) + ) ) ) |