summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/SimplifyGlobals.cpp8
-rw-r--r--test/passes/O1.txt4
-rw-r--r--test/passes/simplify-globals-optimizing_enable-mutable-globals.txt13
-rw-r--r--test/passes/simplify-globals-optimizing_enable-mutable-globals.wast20
-rw-r--r--test/passes/simplify-globals_all-features.txt12
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)
+ )
)
)