summaryrefslogtreecommitdiff
path: root/test/passes
diff options
context:
space:
mode:
Diffstat (limited to 'test/passes')
-rw-r--r--test/passes/inlining-optimizing_optimize-level=3.txt186
-rw-r--r--test/passes/simplify-locals.txt401
-rw-r--r--test/passes/simplify-locals.wast203
3 files changed, 630 insertions, 160 deletions
diff --git a/test/passes/inlining-optimizing_optimize-level=3.txt b/test/passes/inlining-optimizing_optimize-level=3.txt
index 0a2d39db3..35d1219fe 100644
--- a/test/passes/inlining-optimizing_optimize-level=3.txt
+++ b/test/passes/inlining-optimizing_optimize-level=3.txt
@@ -2322,16 +2322,16 @@
(block $label$break$L1
(if
(i32.gt_s
- (get_local $17)
+ (get_local $16)
(i32.const -1)
)
- (set_local $17
+ (set_local $16
(if (result i32)
(i32.gt_s
(get_local $10)
(i32.sub
(i32.const 2147483647)
- (get_local $17)
+ (get_local $16)
)
)
(block (result i32)
@@ -2343,7 +2343,7 @@
)
(i32.add
(get_local $10)
- (get_local $17)
+ (get_local $16)
)
)
)
@@ -2709,7 +2709,7 @@
(set_local $8
(i32.const 1)
)
- (set_local $16
+ (set_local $17
(i32.load
(get_local $6)
)
@@ -2724,7 +2724,7 @@
(if
(get_local $8)
(block
- (set_local $17
+ (set_local $16
(i32.const -1)
)
(br $label$break$L1)
@@ -2741,7 +2741,7 @@
(set_local $10
(get_local $6)
)
- (set_local $16
+ (set_local $17
(i32.const 0)
)
(br $do-once5
@@ -2749,7 +2749,7 @@
)
)
)
- (set_local $16
+ (set_local $17
(i32.load
(tee_local $10
(i32.and
@@ -2780,14 +2780,14 @@
(set_local $12
(if (result i32)
(i32.lt_s
- (get_local $16)
+ (get_local $17)
(i32.const 0)
)
(block (result i32)
- (set_local $16
+ (set_local $17
(i32.sub
(i32.const 0)
- (get_local $16)
+ (get_local $17)
)
)
(i32.or
@@ -2864,7 +2864,7 @@
(i32.const 0)
)
(block
- (set_local $17
+ (set_local $16
(i32.const -1)
)
(br $label$break$L1)
@@ -2873,7 +2873,7 @@
(set_local $12
(get_local $1)
)
- (set_local $16
+ (set_local $17
(get_local $6)
)
(get_local $8)
@@ -2884,7 +2884,7 @@
(set_local $12
(get_local $1)
)
- (set_local $16
+ (set_local $17
(i32.const 0)
)
(get_local $8)
@@ -3056,7 +3056,7 @@
(if
(get_local $1)
(block
- (set_local $17
+ (set_local $16
(i32.const -1)
)
(br $label$break$L1)
@@ -3123,7 +3123,7 @@
(i32.const 57)
)
(block
- (set_local $17
+ (set_local $16
(i32.const -1)
)
(br $label$break$L1)
@@ -3183,7 +3183,7 @@
)
)
(block
- (set_local $17
+ (set_local $16
(i32.const -1)
)
(br $label$break$L1)
@@ -3208,7 +3208,7 @@
(if
(get_local $8)
(block
- (set_local $17
+ (set_local $16
(i32.const -1)
)
(br $label$break$L1)
@@ -3260,7 +3260,7 @@
(get_local $28)
)
(block
- (set_local $17
+ (set_local $16
(i32.const 0)
)
(br $label$break$L1)
@@ -3384,7 +3384,7 @@
(i32.load
(get_local $14)
)
- (get_local $17)
+ (get_local $16)
)
(set_local $5
(get_local $10)
@@ -3398,7 +3398,7 @@
(i32.load
(get_local $14)
)
- (get_local $17)
+ (get_local $16)
)
(set_local $5
(get_local $10)
@@ -3414,14 +3414,14 @@
(get_local $14)
)
)
- (get_local $17)
+ (get_local $16)
)
(i32.store offset=4
(get_local $5)
(i32.shr_s
(i32.shl
(i32.lt_s
- (get_local $17)
+ (get_local $16)
(i32.const 0)
)
(i32.const 31)
@@ -3441,7 +3441,7 @@
(i32.load
(get_local $14)
)
- (get_local $17)
+ (get_local $16)
)
(set_local $5
(get_local $10)
@@ -3455,7 +3455,7 @@
(i32.load
(get_local $14)
)
- (get_local $17)
+ (get_local $16)
)
(set_local $5
(get_local $10)
@@ -3469,7 +3469,7 @@
(i32.load
(get_local $14)
)
- (get_local $17)
+ (get_local $16)
)
(set_local $5
(get_local $10)
@@ -3485,14 +3485,14 @@
(get_local $14)
)
)
- (get_local $17)
+ (get_local $16)
)
(i32.store offset=4
(get_local $5)
(i32.shr_s
(i32.shl
(i32.lt_s
- (get_local $17)
+ (get_local $16)
(i32.const 0)
)
(i32.const 31)
@@ -3832,7 +3832,7 @@
(call $_pad
(get_local $0)
(i32.const 32)
- (get_local $16)
+ (get_local $17)
(i32.const 0)
(get_local $12)
)
@@ -4047,6 +4047,12 @@
)
)
)
+ (set_local $11
+ (i32.or
+ (get_local $27)
+ (i32.const 2)
+ )
+ )
(if
(i32.eq
(tee_local $5
@@ -4093,12 +4099,6 @@
)
)
)
- (set_local $11
- (i32.or
- (get_local $27)
- (i32.const 2)
- )
- )
(i32.store8
(i32.add
(get_local $5)
@@ -4243,7 +4243,7 @@
(call $_pad
(get_local $0)
(i32.const 32)
- (get_local $16)
+ (get_local $17)
(tee_local $7
(i32.add
(tee_local $6
@@ -4302,7 +4302,7 @@
(call $_pad
(get_local $0)
(i32.const 48)
- (get_local $16)
+ (get_local $17)
(get_local $7)
(i32.xor
(get_local $12)
@@ -4370,7 +4370,7 @@
(call $_pad
(get_local $0)
(i32.const 32)
- (get_local $16)
+ (get_local $17)
(get_local $7)
(i32.xor
(get_local $12)
@@ -4379,11 +4379,11 @@
)
(br $do-once49
(select
- (get_local $16)
+ (get_local $17)
(get_local $7)
(i32.lt_s
(get_local $7)
- (get_local $16)
+ (get_local $17)
)
)
)
@@ -5356,7 +5356,7 @@
(call $_pad
(get_local $0)
(i32.const 32)
- (get_local $16)
+ (get_local $17)
(tee_local $13
(i32.add
(i32.add
@@ -5748,7 +5748,7 @@
(call $_pad
(get_local $0)
(i32.const 48)
- (get_local $16)
+ (get_local $17)
(get_local $13)
(i32.xor
(get_local $12)
@@ -6223,7 +6223,7 @@
(call $_pad
(get_local $0)
(i32.const 32)
- (get_local $16)
+ (get_local $17)
(get_local $13)
(i32.xor
(get_local $12)
@@ -6231,11 +6231,11 @@
)
)
(select
- (get_local $16)
+ (get_local $17)
(get_local $13)
(i32.lt_s
(get_local $13)
- (get_local $16)
+ (get_local $17)
)
)
)
@@ -6243,7 +6243,7 @@
(call $_pad
(get_local $0)
(i32.const 32)
- (get_local $16)
+ (get_local $17)
(tee_local $7
(i32.add
(tee_local $9
@@ -6263,32 +6263,6 @@
)
(get_local $8)
)
- (if
- (i32.eqz
- (i32.and
- (tee_local $5
- (i32.load
- (get_local $0)
- )
- )
- (i32.const 32)
- )
- )
- (block
- (drop
- (call $___fwritex
- (get_local $30)
- (get_local $9)
- (get_local $0)
- )
- )
- (set_local $5
- (i32.load
- (get_local $0)
- )
- )
- )
- )
(set_local $6
(select
(select
@@ -6313,10 +6287,38 @@
)
)
(if
- (i32.eqz
- (i32.and
- (get_local $5)
- (i32.const 32)
+ (block (result i32)
+ (if
+ (i32.eqz
+ (i32.and
+ (tee_local $5
+ (i32.load
+ (get_local $0)
+ )
+ )
+ (i32.const 32)
+ )
+ )
+ (block
+ (drop
+ (call $___fwritex
+ (get_local $30)
+ (get_local $9)
+ (get_local $0)
+ )
+ )
+ (set_local $5
+ (i32.load
+ (get_local $0)
+ )
+ )
+ )
+ )
+ (i32.eqz
+ (i32.and
+ (get_local $5)
+ (i32.const 32)
+ )
)
)
(drop
@@ -6330,7 +6332,7 @@
(call $_pad
(get_local $0)
(i32.const 32)
- (get_local $16)
+ (get_local $17)
(get_local $7)
(i32.xor
(get_local $12)
@@ -6338,11 +6340,11 @@
)
)
(select
- (get_local $16)
+ (get_local $17)
(get_local $7)
(i32.lt_s
(get_local $7)
- (get_local $16)
+ (get_local $17)
)
)
)
@@ -6614,7 +6616,7 @@
(i32.const 0)
)
(block
- (set_local $17
+ (set_local $16
(i32.const -1)
)
(br $label$break$L1)
@@ -6623,7 +6625,7 @@
(call $_pad
(get_local $0)
(i32.const 32)
- (get_local $16)
+ (get_local $17)
(get_local $5)
(get_local $12)
)
@@ -6718,7 +6720,7 @@
(call $_pad
(get_local $0)
(i32.const 32)
- (get_local $16)
+ (get_local $17)
(get_local $7)
(i32.xor
(get_local $12)
@@ -6730,10 +6732,10 @@
)
(set_local $10
(select
- (get_local $16)
+ (get_local $17)
(get_local $7)
(i32.gt_s
- (get_local $16)
+ (get_local $17)
(get_local $7)
)
)
@@ -6821,9 +6823,9 @@
(get_local $8)
)
)
- (get_local $16)
+ (get_local $17)
(i32.lt_s
- (get_local $16)
+ (get_local $17)
(get_local $5)
)
)
@@ -6949,7 +6951,7 @@
(i32.const 10)
)
)
- (set_local $17
+ (set_local $16
(i32.const 1)
)
(br $label$break$L343)
@@ -6973,7 +6975,7 @@
)
)
(block
- (set_local $17
+ (set_local $16
(i32.const -1)
)
(br $label$break$L343)
@@ -6990,16 +6992,16 @@
(i32.const 10)
)
)
- (set_local $17
+ (set_local $16
(i32.const 1)
)
)
- (set_local $17
+ (set_local $16
(i32.const 1)
)
)
)
- (set_local $17
+ (set_local $16
(i32.const 0)
)
)
@@ -7008,7 +7010,7 @@
(set_global $STACKTOP
(get_local $34)
)
- (get_local $17)
+ (get_local $16)
)
(func $_pop_arg_336 (; 45 ;) (type $10) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
diff --git a/test/passes/simplify-locals.txt b/test/passes/simplify-locals.txt
index 2e380049f..ae1355032 100644
--- a/test/passes/simplify-locals.txt
+++ b/test/passes/simplify-locals.txt
@@ -7,16 +7,20 @@
(type $5 (func (param i32) (result i32)))
(type $6 (func (param i32 i32 i32 i32 i32 i32)))
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $8 (func (param i32 i32)))
- (type $9 (func (param i32 i32 i32) (result i32)))
- (type $10 (func (param i64)))
+ (type $FUNCSIG$vf (func (param f32)))
+ (type $9 (func (param i32 i32)))
+ (type $10 (func (param i32 i32 i32) (result i32)))
+ (type $11 (func (param i64)))
+ (type $12 (func (param i32 f64 f64 f32 i32) (result f64)))
(import "env" "waka" (func $waka))
(import "env" "waka_int" (func $waka_int (result i32)))
(import "env" "i64sub" (func $_i64Subtract (param i32 i32 i32 i32) (result i32)))
(import "env" "moddi" (func $___udivmoddi4 (param i32 i32 i32 i32 i32) (result i32)))
(import "env" "lp" (func $lp (param i32 i32) (result i32)))
+ (import "fuzzing-support" "log-f32" (func $fimport$0 (param f32)))
(memory $0 256 256)
- (func $contrast (; 5 ;) (type $FUNCSIG$v)
+ (global $global$0 (mut i32) (i32.const 10))
+ (func $contrast (; 6 ;) (type $FUNCSIG$v)
(local $x i32)
(local $y i32)
(local $z i32)
@@ -78,7 +82,7 @@
)
)
)
- (func $b0-yes (; 6 ;) (type $4) (param $i1 i32)
+ (func $b0-yes (; 7 ;) (type $4) (param $i1 i32)
(local $x i32)
(local $y i32)
(local $a i32)
@@ -400,7 +404,7 @@
)
)
)
- (func $Ia (; 7 ;) (type $5) (param $a i32) (result i32)
+ (func $Ia (; 8 ;) (type $5) (param $a i32) (result i32)
(local $b i32)
(block $switch$0
(block $switch-default$6
@@ -411,7 +415,7 @@
(i32.const 60)
)
)
- (func $memories (; 8 ;) (type $6) (param $i2 i32) (param $i3 i32) (param $bi2 i32) (param $bi3 i32) (param $ci3 i32) (param $di3 i32)
+ (func $memories (; 9 ;) (type $6) (param $i2 i32) (param $i3 i32) (param $bi2 i32) (param $bi3 i32) (param $ci3 i32) (param $di3 i32)
(local $set_with_no_get i32)
(nop)
(i32.store8
@@ -443,7 +447,7 @@
(i32.const 456)
)
)
- (func $___remdi3 (; 9 ;) (type $FUNCSIG$iiiii) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32)
+ (func $___remdi3 (; 10 ;) (type $FUNCSIG$iiiii) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32)
(local $$1$1 i32)
(local $$1$0 i32)
(local $$rem i32)
@@ -636,7 +640,7 @@
)
)
)
- (func $block-returns (; 10 ;) (type $FUNCSIG$v)
+ (func $block-returns (; 11 ;) (type $FUNCSIG$v)
(local $x i32)
(set_local $x
(block $out (result i32)
@@ -685,12 +689,16 @@
(tee_local $x
(if (result i32)
(i32.const 1)
- (block $block3 (result i32)
- (nop)
+ (block (result i32)
+ (block $block3
+ (nop)
+ )
(i32.const 14)
)
- (block $block5 (result i32)
- (nop)
+ (block (result i32)
+ (block $block5
+ (nop)
+ )
(i32.const 25)
)
)
@@ -706,7 +714,7 @@
)
)
)
- (func $multiple (; 11 ;) (type $6) (param $s i32) (param $r i32) (param $f i32) (param $p i32) (param $t i32) (param $m i32)
+ (func $multiple (; 12 ;) (type $6) (param $s i32) (param $r i32) (param $f i32) (param $p i32) (param $t i32) (param $m i32)
(nop)
(set_local $r
(i32.add
@@ -733,7 +741,7 @@
(get_local $t)
)
)
- (func $switch-def (; 12 ;) (type $5) (param $i3 i32) (result i32)
+ (func $switch-def (; 13 ;) (type $5) (param $i3 i32) (result i32)
(local $i1 i32)
(set_local $i1
(i32.const 10)
@@ -752,7 +760,7 @@
(get_local $i1)
)
)
- (func $no-out-of-label (; 13 ;) (type $8) (param $x i32) (param $y i32)
+ (func $no-out-of-label (; 14 ;) (type $9) (param $x i32) (param $y i32)
(nop)
(set_local $x
(loop $moar (result i32)
@@ -778,7 +786,7 @@
(get_local $y)
)
)
- (func $freetype-cd (; 14 ;) (type $5) (param $a i32) (result i32)
+ (func $freetype-cd (; 15 ;) (type $5) (param $a i32) (result i32)
(local $e i32)
(nop)
(tee_local $a
@@ -805,7 +813,7 @@
)
)
)
- (func $drop-if-value (; 15 ;) (type $9) (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (func $drop-if-value (; 16 ;) (type $10) (param $x i32) (param $y i32) (param $z i32) (result i32)
(local $temp i32)
(drop
(if (result i32)
@@ -833,7 +841,7 @@
(i32.const 0)
)
)
- (func $drop-br_if (; 16 ;) (type $9) (param $label i32) (param $$cond2 i32) (param $$$0151 i32) (result i32)
+ (func $drop-br_if (; 17 ;) (type $10) (param $label i32) (param $$cond2 i32) (param $$$0151 i32) (result i32)
(nop)
(tee_local $label
(block $label$break$L4 (result i32)
@@ -865,7 +873,7 @@
)
)
)
- (func $drop-tee-unreachable (; 17 ;) (type $FUNCSIG$v)
+ (func $drop-tee-unreachable (; 18 ;) (type $FUNCSIG$v)
(local $x i32)
(tee_local $x
(unreachable)
@@ -874,7 +882,7 @@
(get_local $x)
)
)
- (func $if-return-but-unreachable (; 18 ;) (type $10) (param $var$0 i64)
+ (func $if-return-but-unreachable (; 19 ;) (type $11) (param $var$0 i64)
(if
(unreachable)
(drop
@@ -885,6 +893,231 @@
)
)
)
+ (func $if-one-side (; 20 ;) (type $FUNCSIG$i) (result i32)
+ (local $x i32)
+ (nop)
+ (tee_local $x
+ (if (result i32)
+ (i32.const 1)
+ (block (result i32)
+ (nop)
+ (i32.const 2)
+ )
+ (get_local $x)
+ )
+ )
+ )
+ (func $if-one-side-undo (; 21 ;) (type $FUNCSIG$i) (result i32)
+ (local $x i32)
+ (local $y i32)
+ (set_local $y
+ (i32.const 0)
+ )
+ (set_local $x
+ (if (result i32)
+ (i32.const 1)
+ (block (result i32)
+ (nop)
+ (i32.const 2)
+ )
+ (get_local $x)
+ )
+ )
+ (get_local $y)
+ )
+ (func $if-one-side-multi (; 22 ;) (type $5) (param $0 i32) (result i32)
+ (nop)
+ (tee_local $0
+ (if (result i32)
+ (i32.lt_s
+ (get_local $0)
+ (i32.const -1073741824)
+ )
+ (block (result i32)
+ (nop)
+ (i32.const -1073741824)
+ )
+ (block (result i32)
+ (nop)
+ (if (result i32)
+ (i32.gt_s
+ (get_local $0)
+ (i32.const 1073741823)
+ )
+ (block (result i32)
+ (nop)
+ (i32.const 1073741823)
+ )
+ (get_local $0)
+ )
+ )
+ )
+ )
+ )
+ (func $if-one-side-undo-but-its-a-tee (; 23 ;) (type $5) (param $0 i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $x i32)
+ (local $y i32)
+ (local $z i32)
+ (set_local $x
+ (if (result i32)
+ (i32.const -1)
+ (i32.const -2)
+ (get_local $x)
+ )
+ )
+ (drop
+ (call $if-one-side-undo-but-its-a-tee
+ (tee_local $x
+ (if (result i32)
+ (i32.const -3)
+ (i32.const -4)
+ (get_local $x)
+ )
+ )
+ )
+ )
+ (nop)
+ (drop
+ (i32.eqz
+ (tee_local $y
+ (if (result i32)
+ (i32.const -5)
+ (i32.const -6)
+ (get_local $y)
+ )
+ )
+ )
+ )
+ (nop)
+ (drop
+ (i32.add
+ (tee_local $z
+ (if (result i32)
+ (i32.const -7)
+ (i32.const -8)
+ (get_local $z)
+ )
+ )
+ (get_local $z)
+ )
+ )
+ (if
+ (block $label$1 (result i32)
+ (nop)
+ (nop)
+ (tee_local $4
+ (if (result i32)
+ (tee_local $4
+ (if (result i32)
+ (i32.const 1)
+ (block (result i32)
+ (nop)
+ (i32.const 2)
+ )
+ (get_local $4)
+ )
+ )
+ (block (result i32)
+ (nop)
+ (i32.const 0)
+ )
+ (get_local $4)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (i32.const 0)
+ )
+ (func $splittable-ifs-multicycle (; 24 ;) (type $5) (param $20 i32) (result i32)
+ (nop)
+ (tee_local $20
+ (if (result i32)
+ (i32.const 1)
+ (if (result i32)
+ (i32.const 2)
+ (if (result i32)
+ (i32.const 3)
+ (i32.const 4)
+ (get_local $20)
+ )
+ (get_local $20)
+ )
+ (get_local $20)
+ )
+ )
+ )
+ (func $update-getCounter (; 25 ;) (type $12) (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f32) (param $4 i32) (result f64)
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (loop $label$1 (result f64)
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (call $fimport$0
+ (tee_local $3
+ (if (result f32)
+ (i32.eqz
+ (get_local $0)
+ )
+ (f32.const 4623408228068004207103214e13)
+ (get_local $3)
+ )
+ )
+ )
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (if (result f64)
+ (get_global $global$0)
+ (block $block
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (set_local $0
+ (i32.const -65)
+ )
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (br $label$1)
+ )
+ (f64.const -70)
+ )
+ )
+ )
)
(module
(type $FUNCSIG$v (func))
@@ -1118,20 +1351,24 @@
(drop
(if (result i32)
(i32.const 1)
- (block $block
- (drop
- (i32.const 2)
- )
- (drop
- (i32.const 3)
+ (block
+ (block $block
+ (drop
+ (i32.const 2)
+ )
+ (drop
+ (i32.const 3)
+ )
+ (br $out)
)
- (br $out)
(nop)
)
- (block $block2 (result i32)
- (nop)
- (drop
- (i32.const 5)
+ (block (result i32)
+ (block $block2
+ (nop)
+ (drop
+ (i32.const 5)
+ )
)
(i32.const 4)
)
@@ -1140,21 +1377,25 @@
(drop
(if (result i32)
(i32.const 6)
- (block $block4 (result i32)
- (nop)
- (drop
- (i32.const 8)
+ (block (result i32)
+ (block $block4
+ (nop)
+ (drop
+ (i32.const 8)
+ )
)
(i32.const 7)
)
- (block $block5
- (drop
- (i32.const 9)
- )
- (drop
- (i32.const 10)
+ (block
+ (block $block5
+ (drop
+ (i32.const 9)
+ )
+ (drop
+ (i32.const 10)
+ )
+ (br $out)
)
- (br $out)
(nop)
)
)
@@ -1241,38 +1482,46 @@
(func $pick (; 16 ;) (type $FUNCSIG$v)
(local $x i32)
(local $y i32)
- (drop
+ (set_local $x
(get_local $y)
)
- (if
- (i32.const 1)
- (drop
+ (drop
+ (if (result i32)
(i32.const 1)
+ (block (result i32)
+ (nop)
+ (i32.const 1)
+ )
+ (get_local $x)
)
)
(drop
(get_local $y)
)
- (drop
+ (set_local $x
(get_local $y)
)
)
(func $pick-2 (; 17 ;) (type $FUNCSIG$v)
(local $x i32)
(local $y i32)
- (drop
+ (set_local $y
(get_local $x)
)
- (if
- (i32.const 1)
- (drop
+ (drop
+ (if (result i32)
(i32.const 1)
+ (block (result i32)
+ (nop)
+ (i32.const 1)
+ )
+ (get_local $y)
)
)
(drop
(get_local $x)
)
- (drop
+ (set_local $y
(get_local $x)
)
)
@@ -1284,29 +1533,39 @@
(nop)
(nop)
(set_local $z
- (get_local $x)
+ (tee_local $y
+ (get_local $x)
+ )
)
(drop
(get_local $x)
)
- (if
- (i32.const 1)
- (drop
+ (set_local $y
+ (if (result i32)
(i32.const 1)
+ (block (result i32)
+ (nop)
+ (i32.const 1)
+ )
+ (get_local $y)
)
)
(set_local $x
(get_local $z)
)
- (if
- (i32.const 1)
- (drop
+ (drop
+ (if (result i32)
(i32.const 1)
+ (block (result i32)
+ (nop)
+ (i32.const 1)
+ )
+ (get_local $y)
)
)
(nop)
(nop)
- (drop
+ (set_local $y
(get_local $x)
)
(nop)
@@ -1315,15 +1574,19 @@
(i32.const 2)
)
)
- (if
- (i32.const 1)
- (drop
+ (drop
+ (if (result i32)
(i32.const 1)
+ (block (result i32)
+ (nop)
+ (i32.const 1)
+ )
+ (get_local $y)
)
)
(nop)
(nop)
- (drop
+ (set_local $y
(get_local $x)
)
(set_local $z
@@ -1379,9 +1642,11 @@
(nop)
(i32.const 2)
)
- (block $block (result i32)
- (nop)
- (nop)
+ (block (result i32)
+ (block $block
+ (nop)
+ (nop)
+ )
(get_local $x)
)
)
diff --git a/test/passes/simplify-locals.wast b/test/passes/simplify-locals.wast
index 60531717c..5396e6a5b 100644
--- a/test/passes/simplify-locals.wast
+++ b/test/passes/simplify-locals.wast
@@ -12,6 +12,8 @@
(import $_i64Subtract "env" "i64sub" (param i32 i32 i32 i32) (result i32))
(import $___udivmoddi4 "env" "moddi" (param i32 i32 i32 i32 i32) (result i32))
(import $lp "env" "lp" (param i32 i32) (result i32))
+ (import "fuzzing-support" "log-f32" (func $fimport$0 (param f32)))
+ (global $global$0 (mut i32) (i32.const 10))
(func $contrast ;; check for tee and structure sinking
(local $x i32)
(local $y i32)
@@ -882,6 +884,207 @@
)
)
)
+ (func $if-one-side (result i32)
+ (local $x i32)
+ (if
+ (i32.const 1)
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ (get_local $x)
+ )
+ (func $if-one-side-undo (result i32)
+ (local $x i32)
+ (local $y i32)
+ (set_local $y
+ (i32.const 0)
+ )
+ (if
+ (i32.const 1)
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ (get_local $y)
+ )
+ (func $if-one-side-multi (param $0 i32) (result i32)
+ (if
+ (i32.lt_s
+ (get_local $0)
+ (i32.const -1073741824)
+ )
+ (set_local $0
+ (i32.const -1073741824)
+ )
+ (if
+ (i32.gt_s
+ (get_local $0)
+ (i32.const 1073741823)
+ )
+ (set_local $0
+ (i32.const 1073741823)
+ )
+ )
+ )
+ (get_local $0)
+ )
+ (func $if-one-side-undo-but-its-a-tee (param $0 i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $x i32)
+ (local $y i32)
+ (local $z i32)
+ ;; break these splittable ifs up
+ (set_local $x
+ (if (result i32)
+ (i32.const -1)
+ (i32.const -2)
+ (get_local $x)
+ )
+ )
+ ;; oops, this one is a tee
+ (drop
+ (call $if-one-side-undo-but-its-a-tee
+ (tee_local $x
+ (if (result i32)
+ (i32.const -3)
+ (i32.const -4)
+ (get_local $x)
+ )
+ )
+ )
+ )
+ ;; sinkable
+ (set_local $y
+ (if (result i32)
+ (i32.const -5)
+ (i32.const -6)
+ (get_local $y)
+ )
+ )
+ (drop (i32.eqz (get_local $y)))
+ ;; tee-able at best
+ (set_local $z
+ (if (result i32)
+ (i32.const -7)
+ (i32.const -8)
+ (get_local $z)
+ )
+ )
+ (drop
+ (i32.add
+ (get_local $z)
+ (get_local $z)
+ )
+ )
+ (if
+ (block $label$1 (result i32)
+ (if
+ (i32.const 1)
+ (set_local $4
+ (i32.const 2)
+ )
+ )
+ (if
+ (get_local $4)
+ (set_local $4
+ (i32.const 0)
+ )
+ )
+ (get_local $4)
+ )
+ (unreachable)
+ )
+ (i32.const 0)
+ )
+ (func $splittable-ifs-multicycle (param $20 i32) (result i32)
+ (set_local $20
+ (if (result i32)
+ (i32.const 1)
+ (if (result i32)
+ (i32.const 2)
+ (if (result i32)
+ (i32.const 3)
+ (i32.const 4)
+ (get_local $20)
+ )
+ (get_local $20)
+ )
+ (get_local $20)
+ )
+ )
+ (get_local $20)
+ )
+ (func $update-getCounter (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f32) (param $4 i32) (result f64)
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (loop $label$1 (result f64)
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (call $fimport$0
+ (tee_local $3
+ (if (result f32)
+ (i32.eqz
+ (get_local $0)
+ )
+ (f32.const 4623408228068004207103214e13)
+ (get_local $3)
+ )
+ )
+ )
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (if (result f64)
+ (get_global $global$0)
+ (block
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (set_local $0
+ (i32.const -65)
+ )
+ (set_global $global$0
+ (i32.sub
+ (get_global $global$0)
+ (i32.const 1)
+ )
+ )
+ (br $label$1)
+ )
+ (f64.const -70)
+ )
+ )
+ )
)
(module
(memory (shared 256 256))