diff options
author | Alon Zakai <alonzakai@gmail.com> | 2018-04-27 14:49:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-27 14:49:02 -0700 |
commit | 7e8a47add58ebf5f39523fe70461aa7119ee490d (patch) | |
tree | a88fb6058ea1f61a7a0db8b80113d9cf39377e1d /test | |
parent | 52d14d008a6a836c2cdbfe68852d274840e5de14 (diff) | |
download | binaryen-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.txt | 7 | ||||
-rw-r--r-- | test/passes/precompute-propagate.wast | 16 |
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) + ) ) |