summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/RemoveUnusedBrs.cpp5
-rw-r--r--test/lit/passes/remove-unused-brs.wast53
-rw-r--r--test/passes/remove-unused-brs_enable-multivalue.txt10
3 files changed, 59 insertions, 9 deletions
diff --git a/src/passes/RemoveUnusedBrs.cpp b/src/passes/RemoveUnusedBrs.cpp
index cbad81247..01c465f18 100644
--- a/src/passes/RemoveUnusedBrs.cpp
+++ b/src/passes/RemoveUnusedBrs.cpp
@@ -80,7 +80,10 @@ static bool canTurnIfIntoBrIf(Expression* ifCondition,
return !EffectAnalyzer(options, wasm, ifCondition).invalidates(value);
}
-const Index TooCostlyToRunUnconditionally = 7;
+// This leads to similar choices as LLVM does.
+// See https://github.com/WebAssembly/binaryen/pull/4228
+// It can be tuned more later.
+const Index TooCostlyToRunUnconditionally = 9;
// Check if it is not worth it to run code unconditionally. This
// assumes we are trying to run two expressions where previously
diff --git a/test/lit/passes/remove-unused-brs.wast b/test/lit/passes/remove-unused-brs.wast
index e5b29d2e6..3c5d49988 100644
--- a/test/lit/passes/remove-unused-brs.wast
+++ b/test/lit/passes/remove-unused-brs.wast
@@ -29,6 +29,51 @@
)
)
+ ;; CHECK: (func $selectify-simple (param $0 i32) (result i32)
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.lt_u
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (i32.const 32)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 97)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.lt_u
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (i32.const 48)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $selectify-simple (param $0 i32) (result i32)
+ (if (result i32)
+ (i32.lt_u
+ (i32.sub
+ (local.get $0)
+ (i32.const 48)
+ )
+ (i32.const 10)
+ )
+ (i32.const 1)
+ (i32.lt_u
+ (i32.sub
+ (i32.or
+ (local.get $0)
+ (i32.const 32)
+ )
+ (i32.const 97)
+ )
+ (i32.const 6)
+ )
+ )
+ )
+
;; CHECK: (func $restructure-br_if (param $x i32) (result i32)
;; CHECK-NEXT: (if (result i32)
;; CHECK-NEXT: (local.get $x)
@@ -410,7 +455,9 @@
;; CHECK-NEXT: (i32.eqz
;; CHECK-NEXT: (i32.eqz
;; CHECK-NEXT: (i32.eqz
- ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
@@ -432,9 +479,9 @@
(i32.const 1)
)
(if
- (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz
+ (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz
(local.get $x)
- ))))))))
+ )))))))))
(call $if-of-if-but-too-costly)
)
)
diff --git a/test/passes/remove-unused-brs_enable-multivalue.txt b/test/passes/remove-unused-brs_enable-multivalue.txt
index 46938f784..cf8ad7ec2 100644
--- a/test/passes/remove-unused-brs_enable-multivalue.txt
+++ b/test/passes/remove-unused-brs_enable-multivalue.txt
@@ -2355,11 +2355,7 @@
)
(func $selectify (param $x i32)
(drop
- (if (result i32)
- (i32.eq
- (local.get $x)
- (i32.const 1)
- )
+ (select
(i32.mul
(i32.const 2)
(i32.const 3)
@@ -2368,6 +2364,10 @@
(i32.const 2)
(i32.const 3)
)
+ (i32.eq
+ (local.get $x)
+ (i32.const 1)
+ )
)
)
(drop