summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2018-04-27 14:49:02 -0700
committerGitHub <noreply@github.com>2018-04-27 14:49:02 -0700
commit7e8a47add58ebf5f39523fe70461aa7119ee490d (patch)
treea88fb6058ea1f61a7a0db8b80113d9cf39377e1d /test
parent52d14d008a6a836c2cdbfe68852d274840e5de14 (diff)
downloadbinaryen-7e8a47add58ebf5f39523fe70461aa7119ee490d.tar.gz
binaryen-7e8a47add58ebf5f39523fe70461aa7119ee490d.tar.bz2
binaryen-7e8a47add58ebf5f39523fe70461aa7119ee490d.zip
precompute-propagate may benefit from multiple passes (#1518)
One pass may remove code that includes a tee which then makes more optimization possible. Found by the Souper investigations.
Diffstat (limited to 'test')
-rw-r--r--test/passes/precompute-propagate.txt7
-rw-r--r--test/passes/precompute-propagate.wast16
2 files changed, 23 insertions, 0 deletions
diff --git a/test/passes/precompute-propagate.txt b/test/passes/precompute-propagate.txt
index 15abe1f2e..919d8f3e7 100644
--- a/test/passes/precompute-propagate.txt
+++ b/test/passes/precompute-propagate.txt
@@ -2,6 +2,7 @@
(type $0 (func (param i32)))
(type $1 (func (param i32) (result i32)))
(type $2 (func (param i32 i32) (result i32)))
+ (type $3 (func (param i32 i32 i32) (result i32)))
(func $basic (; 0 ;) (type $0) (param $p i32)
(local $x i32)
(set_local $x
@@ -233,4 +234,10 @@
(i32.const 7)
)
)
+ (func $multipass (; 15 ;) (type $3) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (local $3 i32)
+ (nop)
+ (nop)
+ (get_local $2)
+ )
)
diff --git a/test/passes/precompute-propagate.wast b/test/passes/precompute-propagate.wast
index 4cf440829..5cdc720ba 100644
--- a/test/passes/precompute-propagate.wast
+++ b/test/passes/precompute-propagate.wast
@@ -137,5 +137,21 @@
)
)
)
+ (func $multipass (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (local $3 i32)
+ (if
+ (get_local $3)
+ (set_local $3 ;; this set is completely removed, allowing later opts
+ (i32.const 24)
+ )
+ )
+ (if
+ (get_local $3)
+ (set_local $2
+ (i32.const 0)
+ )
+ )
+ (get_local $2)
+ )
)