summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/Vacuum.cpp4
-rw-r--r--test/passes/vacuum.txt14
-rw-r--r--test/passes/vacuum.wast26
3 files changed, 44 insertions, 0 deletions
diff --git a/src/passes/Vacuum.cpp b/src/passes/Vacuum.cpp
index 0178a794d..3f27fb36a 100644
--- a/src/passes/Vacuum.cpp
+++ b/src/passes/Vacuum.cpp
@@ -234,6 +234,10 @@ struct Vacuum : public WalkerPass<PostWalker<Vacuum>> {
}
// if the condition is unreachable, just return it
if (curr->condition->type == unreachable) {
+ typeUpdater.noteRecursiveRemoval(curr->ifTrue);
+ if (curr->ifFalse) {
+ typeUpdater.noteRecursiveRemoval(curr->ifFalse);
+ }
replaceCurrent(curr->condition);
return;
}
diff --git a/test/passes/vacuum.txt b/test/passes/vacuum.txt
index 7cee4edf1..f3b06af1a 100644
--- a/test/passes/vacuum.txt
+++ b/test/passes/vacuum.txt
@@ -287,4 +287,18 @@
)
)
)
+ (func $if-arm-vanishes (type $3) (result i32)
+ (block $label$0 (result i32)
+ (br $label$0
+ (i32.const 1)
+ )
+ )
+ )
+ (func $if-arm-vanishes-2 (type $3) (result i32)
+ (block $label$0 (result i32)
+ (br $label$0
+ (i32.const 1)
+ )
+ )
+ )
)
diff --git a/test/passes/vacuum.wast b/test/passes/vacuum.wast
index 1885da09b..db4bf6749 100644
--- a/test/passes/vacuum.wast
+++ b/test/passes/vacuum.wast
@@ -611,4 +611,30 @@
)
)
)
+ (func $if-arm-vanishes (result i32)
+ (block $label$0 (result i32)
+ (block $label$1
+ (if
+ (br $label$0
+ (i32.const 1)
+ )
+ (br $label$1)
+ )
+ )
+ (i32.const 1579493952)
+ )
+ )
+ (func $if-arm-vanishes-2 (result i32)
+ (block $label$0 (result i32)
+ (block $label$1
+ (if
+ (br $label$0
+ (i32.const 1)
+ )
+ (br $label$1)
+ )
+ )
+ (i32.const 1579493952)
+ )
+ )
)