diff options
-rw-r--r-- | test/lit/passes/vacuum_all-features.wast (renamed from test/passes/vacuum_all-features.wast) | 458 | ||||
-rw-r--r-- | test/passes/vacuum_all-features.txt | 452 |
2 files changed, 458 insertions, 452 deletions
diff --git a/test/passes/vacuum_all-features.wast b/test/lit/passes/vacuum_all-features.wast index c3643e420..36074af30 100644 --- a/test/passes/vacuum_all-features.wast +++ b/test/lit/passes/vacuum_all-features.wast @@ -1,12 +1,35 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. +;; NOTE: This test was ported using port_passes_tests_to_lit.py and could be cleaned up. + +;; RUN: foreach %s %t wasm-opt --vacuum --all-features -S -o - | filecheck %s + (module (memory 256 256) + ;; CHECK: (type $0 (func)) (type $0 (func)) + ;; CHECK: (type $3 (func (result i32))) + + ;; CHECK: (type $1 (func (param i32))) (type $1 (func (param i32))) + ;; CHECK: (type $2 (func (result f32))) (type $2 (func (result f32))) (type $3 (func (result i32))) + ;; CHECK: (type $4 (func (param i32 f64 i32 i32))) (type $4 (func (param i32 f64 i32 i32))) (import $int "env" "int" (result i32)) + ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) + + ;; CHECK: (type $none_=>_f64 (func (result f64))) + + ;; CHECK: (import "env" "int" (func $int (result i32))) + + ;; CHECK: (global $Int i32 (i32.const 0)) (global $Int i32 (i32.const 0)) + ;; CHECK: (memory $0 256 256) + + ;; CHECK: (func $b (type $0) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $b (type $0) (drop (i32.const 50) @@ -64,6 +87,20 @@ (nop) ) ) + ;; CHECK: (func $l (type $3) (result i32) + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local $y i32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) (func $l (result i32) (local $x i32) (local $y i32) @@ -101,6 +138,9 @@ ) (local.get $x) ) + ;; CHECK: (func $loopy (type $1) (param $0 i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $loopy (type $1) (param $0 i32) (loop $loop-in1 (nop) @@ -118,6 +158,11 @@ ) ) ) + ;; CHECK: (func $unary (type $2) (result f32) + ;; CHECK-NEXT: (f32.abs + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $unary (type $2) (result f32) (drop (f32.abs @@ -131,6 +176,14 @@ (f32.const 2) ) ) + ;; CHECK: (func $binary (type $2) (result f32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.add + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (f32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $binary (type $2) (result f32) (drop (f32.add @@ -159,6 +212,15 @@ (f32.const 6) ) ) + ;; CHECK: (func $select (type $3) (result i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $select (type $3) (result i32) (drop (select @@ -218,6 +280,9 @@ (i32.const 15) ) ) + ;; CHECK: (func $block-to-one (type $0) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) (func $block-to-one (type $0) (block $block0 (nop) @@ -240,6 +305,9 @@ (unreachable) ) ) + ;; CHECK: (func $recurse (type $0) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $recurse (type $0) (nop) (drop @@ -258,6 +326,9 @@ ) ) ) + ;; CHECK: (func $func-block (type $0) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $func-block (type $0) (drop (f32.abs @@ -275,6 +346,28 @@ ) ) ) + ;; CHECK: (func $Gu (type $4) (param $b i32) (param $e f64) (param $l i32) (param $d i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.get $d) + ;; CHECK-NEXT: (f64.ne + ;; CHECK-NEXT: (f64.promote_f32 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.tee $l + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $b) + ;; CHECK-NEXT: (i32.const 60) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $e) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $Gu (type $4) (param $b i32) (param $e f64) (param $l i32) (param $d i32) (if (if (result i32) @@ -300,6 +393,25 @@ (unreachable) ) ) + ;; CHECK: (func $if-drop (type $3) (result i32) + ;; CHECK-NEXT: (block $out + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (call $if-drop) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $out) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (call $if-drop) + ;; CHECK-NEXT: (br $out) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) (func $if-drop (result i32) (block $out (drop @@ -319,6 +431,25 @@ ) (i32.const 1) ) + ;; CHECK: (func $drop-silly (type $0) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $drop-silly (drop (i32.eqz @@ -359,6 +490,9 @@ ) ) ) + ;; CHECK: (func $drop-get-global (type $0) + ;; CHECK-NEXT: (call $drop-get-global) + ;; CHECK-NEXT: ) (func $drop-get-global (drop (block (result i32) @@ -367,6 +501,11 @@ ) ) ) + ;; CHECK: (func $relooperJumpThreading1 (type $0) + ;; CHECK-NEXT: (local $$vararg_ptr5 i32) + ;; CHECK-NEXT: (local $$11 i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $relooperJumpThreading1 (local $$vararg_ptr5 i32) (local $$11 i32) @@ -387,6 +526,9 @@ ) ) ) + ;; CHECK: (func $relooperJumpThreading2 (type $0) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $relooperJumpThreading2 (loop $while-in$1 (drop @@ -401,6 +543,9 @@ ) ) ) + ;; CHECK: (func $relooperJumpThreading3 (type $0) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $relooperJumpThreading3 (loop $while-in$1 (drop @@ -416,6 +561,16 @@ ) ) ) + ;; CHECK: (func $if2drops (type $3) (result i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) (func $if2drops (result i32) (if (call $if2drops) @@ -428,6 +583,18 @@ ) (i32.const 2) ) + ;; CHECK: (func $if2drops-different (type $3) (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $unary) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) (func $if2drops-different (result i32) (if (call $if2drops) @@ -440,12 +607,41 @@ ) (i32.const 2) ) + ;; CHECK: (func $if-const (type $1) (param $x i32) + ;; CHECK-NEXT: (call $if-const + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (call $if-const + ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (call $if-const + ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $if-const (param $x i32) (if (i32.const 0) (call $if-const (i32.const 1))) (if (i32.const 2) (call $if-const (i32.const 3))) (if (i32.const 0) (call $if-const (i32.const 4)) (call $if-const (i32.const 5))) (if (i32.const 6) (call $if-const (i32.const 7)) (call $if-const (i32.const 8))) ) + ;; CHECK: (func $drop-if-both-unreachable (type $1) (param $0 i32) + ;; CHECK-NEXT: (block $out + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (br $out) + ;; CHECK-NEXT: (br $out) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $drop-if-both-unreachable (param $0 i32) (block $out (drop @@ -464,6 +660,20 @@ ) ) ) + ;; CHECK: (func $if-1-block (type $i32_=>_i32) (param $x i32) (result i32) + ;; CHECK-NEXT: (block $out + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $out) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) (func $if-1-block (param $x i32) (result i32) (block $out (if @@ -483,6 +693,15 @@ ) (local.get $x) ) + ;; CHECK: (func $block-resize-br-gone (type $0) + ;; CHECK-NEXT: (block $out + ;; CHECK-NEXT: (block $in + ;; CHECK-NEXT: (call $block-resize-br-gone) + ;; CHECK-NEXT: (br $in) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $block-resize-br-gone (block $out (block $in @@ -500,6 +719,10 @@ (return) ) ) + ;; CHECK: (func $block-unreachable-but-last-element-concrete (type $0) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $block-unreachable-but-last-element-concrete (local $2 i32) (block $label$0 @@ -511,6 +734,18 @@ ) ) ) + ;; CHECK: (func $a (type $0) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f64.div + ;; CHECK-NEXT: (f64.const -nan:0xfffffffffa361) + ;; CHECK-NEXT: (loop $label$1 + ;; CHECK-NEXT: (br $label$1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $a (block (i32.store (i32.const 1) (i32.const 2)) @@ -522,6 +757,19 @@ ) ) ) + ;; CHECK: (func $leave-block-even-if-br-not-taken (type $none_=>_f64) (result f64) + ;; CHECK-NEXT: (block $label$0 (result f64) + ;; CHECK-NEXT: (f64.store align=1 + ;; CHECK-NEXT: (i32.const 879179022) + ;; CHECK-NEXT: (br_if $label$0 + ;; CHECK-NEXT: (loop $label$9 + ;; CHECK-NEXT: (br $label$9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 677803374) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $leave-block-even-if-br-not-taken (result f64) (block $label$0 (result f64) (f64.store align=1 @@ -536,6 +784,9 @@ (f64.const 2097914503796645752267195e31) ) ) + ;; CHECK: (func $executed-if-in-block (type $0) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) (func $executed-if-in-block (block $label$0 (if @@ -546,6 +797,9 @@ ) (unreachable) ) + ;; CHECK: (func $executed-if-in-block2 (type $0) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) (func $executed-if-in-block2 (block $label$0 (if @@ -556,6 +810,12 @@ ) (unreachable) ) + ;; CHECK: (func $executed-if-in-block3 (type $0) + ;; CHECK-NEXT: (block $label$0 + ;; CHECK-NEXT: (br $label$0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) (func $executed-if-in-block3 (block $label$0 (if @@ -566,6 +826,19 @@ ) (unreachable) ) + ;; CHECK: (func $load-may-have-side-effects (type $3) (result i32) + ;; CHECK-NEXT: (i64.ge_s + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.load32_s + ;; CHECK-NEXT: (i32.const 678585719) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 2912825531628789796) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $load-may-have-side-effects (result i32) (i64.ge_s (block (result i64) @@ -582,6 +855,13 @@ (i64.const 0) ) ) + ;; CHECK: (func $unary-binary-may-trap (type $0) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.trunc_f32_u + ;; CHECK-NEXT: (f32.const 70847791997969805621592064) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $unary-binary-may-trap (drop (i64.div_s @@ -595,6 +875,19 @@ ) ) ) + ;; CHECK: (func $unreachable-if-with-nop-arm-that-leaves-a-concrete-value-if-nop-is-removed (type $0) + ;; CHECK-NEXT: (block $label$0 + ;; CHECK-NEXT: (loop $label$1 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (br_if $label$0 + ;; CHECK-NEXT: (loop $label$9 + ;; CHECK-NEXT: (br $label$9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $unreachable-if-with-nop-arm-that-leaves-a-concrete-value-if-nop-is-removed (block $label$0 (loop $label$1 @@ -612,6 +905,13 @@ ) ) ) + ;; CHECK: (func $if-arm-vanishes (type $3) (result i32) + ;; CHECK-NEXT: (block $label$0 (result i32) + ;; CHECK-NEXT: (br $label$0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $if-arm-vanishes (result i32) (block $label$0 (result i32) (block $label$1 @@ -625,6 +925,13 @@ (i32.const 1579493952) ) ) + ;; CHECK: (func $if-arm-vanishes-2 (type $3) (result i32) + ;; CHECK-NEXT: (block $label$0 (result i32) + ;; CHECK-NEXT: (br $label$0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $if-arm-vanishes-2 (result i32) (block $label$0 (result i32) (block $label$1 @@ -638,6 +945,10 @@ (i32.const 1579493952) ) ) + ;; CHECK: (func $nop-if-type-changes (type $0) + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $nop-if-type-changes (type $0) (local $0 i32) (block $label$0 @@ -663,11 +974,30 @@ ) ) (module ;; a child with a different type, cannot simply replace the parent with it + ;; CHECK: (type $0 (func (param i64))) (type $0 (func (param i64))) + ;; CHECK: (type $1 (func (param f32 i32) (result i32))) (type $1 (func (param f32 i32) (result i32))) + ;; CHECK: (func $0 (type $0) (param $0 i64) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $0 (; 0 ;) (type $0) (param $0 i64) (nop) ) + ;; CHECK: (func $1 (type $1) (param $0 f32) (param $1 i32) (result i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block $label$2 (result i64) + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (br_if $label$2 + ;; CHECK-NEXT: (i64.const -137438953472) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) (func $1 (; 1 ;) (type $1) (param $0 f32) (param $1 i32) (result i32) (drop (block $label$1 (result i32) @@ -689,13 +1019,37 @@ ) (module ;; vacuum away a drop on an if where both arms can be vacuumed (memory 1 1) + ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) + + ;; CHECK: (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + + ;; CHECK: (global $global$1 (mut i32) (i32.const 0)) (global $global$1 (mut i32) (i32.const 0)) + ;; CHECK: (memory $0 1 1) + + ;; CHECK: (export "compress" (func $3)) + + ;; CHECK: (func $_deflate (type $i32_=>_i32) (param $0 i32) (result i32) + ;; CHECK-NEXT: (call $_deflate + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $_deflate (param i32) (result i32) (call $_deflate (local.get $0)) ) + ;; CHECK: (func $_deflateInit2_ (type $i32_=>_i32) (param $0 i32) (result i32) + ;; CHECK-NEXT: (call $_deflateInit2_ + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $_deflateInit2_ (param i32) (result i32) (call $_deflateInit2_ (local.get $0)) ) + ;; CHECK: (func $_deflateEnd (type $i32_=>_i32) (param $0 i32) (result i32) + ;; CHECK-NEXT: (call $_deflateEnd + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) (func $_deflateEnd (param i32) (result i32) (call $_deflateEnd (local.get $0)) ) @@ -798,8 +1152,106 @@ ) ) +;; CHECK: (func $3 (type $i32_i32_i32_=>_none) (param $0 i32) (param $1 i32) (param $2 i32) +;; CHECK-NEXT: (local $3 i32) +;; CHECK-NEXT: (local.set $3 +;; CHECK-NEXT: (global.get $global$1) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.set $global$1 +;; CHECK-NEXT: (i32.sub +;; CHECK-NEXT: (global.get $global$1) +;; CHECK-NEXT: (i32.const -64) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.store +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: (local.get $2) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.store offset=4 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: (i32.const 100000) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.store offset=12 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: (local.get $0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.store offset=16 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: (i32.load +;; CHECK-NEXT: (local.get $1) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.store offset=32 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: (i32.const 0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.store offset=36 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: (i32.const 0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.store offset=40 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: (i32.const 0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (if +;; CHECK-NEXT: (call $_deflateInit2_ +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (block +;; CHECK-NEXT: (global.set $global$1 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (return) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (drop +;; CHECK-NEXT: (if (result i32) +;; CHECK-NEXT: (i32.eq +;; CHECK-NEXT: (local.tee $0 +;; CHECK-NEXT: (call $_deflate +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.const 1) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (block (result i32) +;; CHECK-NEXT: (i32.store +;; CHECK-NEXT: (local.get $1) +;; CHECK-NEXT: (i32.load offset=20 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (local.set $0 +;; CHECK-NEXT: (call $_deflateEnd +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.set $global$1 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.const 0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (block (result i32) +;; CHECK-NEXT: (drop +;; CHECK-NEXT: (call $_deflateEnd +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.set $global$1 +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.const 0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) (module (type $A (struct (field (mut i32)))) + ;; CHECK: (type $none_=>_none (func)) + + ;; CHECK: (func $foo (type $none_=>_none) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $foo (drop (block (result structref) @@ -813,7 +1265,13 @@ ) ) (module + ;; CHECK: (type $none_=>_none (func)) + + ;; CHECK: (global $global$0 (mut i32) (i32.const 10)) (global $global$0 (mut i32) (i32.const 10)) + ;; CHECK: (func $1 (type $none_=>_none) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) (func $1 (drop (block $block (result funcref i32) diff --git a/test/passes/vacuum_all-features.txt b/test/passes/vacuum_all-features.txt deleted file mode 100644 index b4e4aea72..000000000 --- a/test/passes/vacuum_all-features.txt +++ /dev/null @@ -1,452 +0,0 @@ -(module - (type $0 (func)) - (type $3 (func (result i32))) - (type $1 (func (param i32))) - (type $2 (func (result f32))) - (type $4 (func (param i32 f64 i32 i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $none_=>_f64 (func (result f64))) - (import "env" "int" (func $int (result i32))) - (global $Int i32 (i32.const 0)) - (memory $0 256 256) - (func $b (type $0) - (nop) - ) - (func $l (type $3) (result i32) - (local $x i32) - (local $y i32) - (local.set $x - (local.get $x) - ) - (local.set $x - (local.get $x) - ) - (local.set $x - (local.get $y) - ) - (local.get $x) - ) - (func $loopy (type $1) (param $0 i32) - (nop) - ) - (func $unary (type $2) (result f32) - (f32.abs - (unreachable) - ) - ) - (func $binary (type $2) (result f32) - (drop - (f32.add - (unreachable) - (f32.const 3) - ) - ) - ) - (func $select (type $3) (result i32) - (drop - (select - (unreachable) - (i32.const 4) - (i32.const 5) - ) - ) - ) - (func $block-to-one (type $0) - (unreachable) - ) - (func $recurse (type $0) - (nop) - ) - (func $func-block (type $0) - (nop) - ) - (func $Gu (type $4) (param $b i32) (param $e f64) (param $l i32) (param $d i32) - (if - (if (result i32) - (local.get $d) - (f64.ne - (f64.promote_f32 - (f32.load - (local.tee $l - (i32.add - (local.get $b) - (i32.const 60) - ) - ) - ) - ) - (local.get $e) - ) - (i32.const 0) - ) - (unreachable) - ) - ) - (func $if-drop (type $3) (result i32) - (block $out - (if - (call $if-drop) - (drop - (call $int) - ) - (br $out) - ) - (if - (call $if-drop) - (br $out) - (drop - (call $int) - ) - ) - ) - (i32.const 1) - ) - (func $drop-silly (type $0) - (drop - (call $int) - ) - (drop - (call $int) - ) - (drop - (call $int) - ) - (block - (drop - (call $int) - ) - (drop - (call $int) - ) - ) - ) - (func $drop-get-global (type $0) - (call $drop-get-global) - ) - (func $relooperJumpThreading1 (type $0) - (local $$vararg_ptr5 i32) - (local $$11 i32) - (nop) - ) - (func $relooperJumpThreading2 (type $0) - (nop) - ) - (func $relooperJumpThreading3 (type $0) - (nop) - ) - (func $if2drops (type $3) (result i32) - (drop - (if (result i32) - (call $if2drops) - (call $if2drops) - (call $if2drops) - ) - ) - (i32.const 2) - ) - (func $if2drops-different (type $3) (result i32) - (if - (call $if2drops) - (drop - (call $if2drops) - ) - (drop - (call $unary) - ) - ) - (i32.const 2) - ) - (func $if-const (type $1) (param $x i32) - (call $if-const - (i32.const 3) - ) - (call $if-const - (i32.const 5) - ) - (call $if-const - (i32.const 7) - ) - ) - (func $drop-if-both-unreachable (type $1) (param $0 i32) - (block $out - (drop - (if (result i32) - (local.get $0) - (br $out) - (br $out) - ) - ) - ) - (drop - (if (result i32) - (local.get $0) - (unreachable) - (unreachable) - ) - ) - ) - (func $if-1-block (type $i32_=>_i32) (param $x i32) (result i32) - (block $out - (if - (local.get $x) - (block - (local.set $x - (local.get $x) - ) - (br $out) - ) - ) - ) - (local.get $x) - ) - (func $block-resize-br-gone (type $0) - (block $out - (block $in - (call $block-resize-br-gone) - (br $in) - ) - (return) - ) - ) - (func $block-unreachable-but-last-element-concrete (type $0) - (local $2 i32) - (nop) - ) - (func $a (type $0) - (i32.store - (i32.const 1) - (i32.const 2) - ) - (f64.div - (f64.const -nan:0xfffffffffa361) - (loop $label$1 - (br $label$1) - ) - ) - ) - (func $leave-block-even-if-br-not-taken (type $none_=>_f64) (result f64) - (block $label$0 (result f64) - (f64.store align=1 - (i32.const 879179022) - (br_if $label$0 - (loop $label$9 - (br $label$9) - ) - (i32.const 677803374) - ) - ) - ) - ) - (func $executed-if-in-block (type $0) - (unreachable) - ) - (func $executed-if-in-block2 (type $0) - (unreachable) - ) - (func $executed-if-in-block3 (type $0) - (block $label$0 - (br $label$0) - ) - (unreachable) - ) - (func $load-may-have-side-effects (type $3) (result i32) - (i64.ge_s - (block (result i64) - (drop - (i64.load32_s - (i32.const 678585719) - ) - ) - (i64.const 2912825531628789796) - ) - (i64.const 0) - ) - ) - (func $unary-binary-may-trap (type $0) - (drop - (i64.trunc_f32_u - (f32.const 70847791997969805621592064) - ) - ) - ) - (func $unreachable-if-with-nop-arm-that-leaves-a-concrete-value-if-nop-is-removed (type $0) - (block $label$0 - (loop $label$1 - (drop - (br_if $label$0 - (loop $label$9 - (br $label$9) - ) - ) - ) - ) - ) - ) - (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) - ) - ) - ) - (func $nop-if-type-changes (type $0) - (local $0 i32) - (nop) - ) -) -(module - (type $0 (func (param i64))) - (type $1 (func (param f32 i32) (result i32))) - (func $0 (type $0) (param $0 i64) - (nop) - ) - (func $1 (type $1) (param $0 f32) (param $1 i32) (result i32) - (drop - (block $label$2 (result i64) - (call $0 - (br_if $label$2 - (i64.const -137438953472) - (i32.const 1) - ) - ) - (unreachable) - ) - ) - (unreachable) - ) -) -(module - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (global $global$1 (mut i32) (i32.const 0)) - (memory $0 1 1) - (export "compress" (func $3)) - (func $_deflate (type $i32_=>_i32) (param $0 i32) (result i32) - (call $_deflate - (local.get $0) - ) - ) - (func $_deflateInit2_ (type $i32_=>_i32) (param $0 i32) (result i32) - (call $_deflateInit2_ - (local.get $0) - ) - ) - (func $_deflateEnd (type $i32_=>_i32) (param $0 i32) (result i32) - (call $_deflateEnd - (local.get $0) - ) - ) - (func $3 (type $i32_i32_i32_=>_none) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local.set $3 - (global.get $global$1) - ) - (global.set $global$1 - (i32.sub - (global.get $global$1) - (i32.const -64) - ) - ) - (i32.store - (local.get $3) - (local.get $2) - ) - (i32.store offset=4 - (local.get $3) - (i32.const 100000) - ) - (i32.store offset=12 - (local.get $3) - (local.get $0) - ) - (i32.store offset=16 - (local.get $3) - (i32.load - (local.get $1) - ) - ) - (i32.store offset=32 - (local.get $3) - (i32.const 0) - ) - (i32.store offset=36 - (local.get $3) - (i32.const 0) - ) - (i32.store offset=40 - (local.get $3) - (i32.const 0) - ) - (if - (call $_deflateInit2_ - (local.get $3) - ) - (block - (global.set $global$1 - (local.get $3) - ) - (return) - ) - ) - (drop - (if (result i32) - (i32.eq - (local.tee $0 - (call $_deflate - (local.get $3) - ) - ) - (i32.const 1) - ) - (block (result i32) - (i32.store - (local.get $1) - (i32.load offset=20 - (local.get $3) - ) - ) - (local.set $0 - (call $_deflateEnd - (local.get $3) - ) - ) - (global.set $global$1 - (local.get $3) - ) - (i32.const 0) - ) - (block (result i32) - (drop - (call $_deflateEnd - (local.get $3) - ) - ) - (global.set $global$1 - (local.get $3) - ) - (i32.const 0) - ) - ) - ) - ) -) -(module - (type $none_=>_none (func)) - (func $foo (type $none_=>_none) - (nop) - ) -) -(module - (type $none_=>_none (func)) - (global $global$0 (mut i32) (i32.const 10)) - (func $1 (type $none_=>_none) - (nop) - ) -) |