diff options
Diffstat (limited to 'test/lit/passes')
-rw-r--r-- | test/lit/passes/coalesce-locals-gc.wast | 4 | ||||
-rw-r--r-- | test/lit/passes/dae-gc-refine-params.wast | 16 | ||||
-rw-r--r-- | test/lit/passes/dae-gc-refine-return.wast | 56 | ||||
-rw-r--r-- | test/lit/passes/dae-gc.wast | 24 | ||||
-rw-r--r-- | test/lit/passes/dae_all-features.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/local-subtyping.wast | 10 | ||||
-rw-r--r-- | test/lit/passes/merge-blocks.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/merge-similar-functions_all-features.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/optimize-instructions-call_ref.wast | 8 | ||||
-rw-r--r-- | test/lit/passes/optimize-instructions-gc-tnh.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/optimize-instructions-gc.wast | 44 | ||||
-rw-r--r-- | test/lit/passes/precompute-gc-immutable.wast | 2 | ||||
-rw-r--r-- | test/lit/passes/remove-unused-brs-gc.wast | 6 | ||||
-rw-r--r-- | test/lit/passes/rse-gc.wast | 4 | ||||
-rw-r--r-- | test/lit/passes/signature-refining.wast | 16 | ||||
-rw-r--r-- | test/lit/passes/simplify-locals-gc.wast | 8 | ||||
-rw-r--r-- | test/lit/passes/type-refining-isorecursive.wast | 4 | ||||
-rw-r--r-- | test/lit/passes/type-refining.wast | 6 | ||||
-rw-r--r-- | test/lit/passes/vacuum-gc.wast | 8 |
19 files changed, 110 insertions, 114 deletions
diff --git a/test/lit/passes/coalesce-locals-gc.wast b/test/lit/passes/coalesce-locals-gc.wast index 52243ebc8..074c9caf0 100644 --- a/test/lit/passes/coalesce-locals-gc.wast +++ b/test/lit/passes/coalesce-locals-gc.wast @@ -8,10 +8,10 @@ ;; CHECK: (global $global (ref null $array) (ref.null $array)) (global $global (ref null $array) (ref.null $array)) - ;; CHECK: (func $test-dead-get-non-nullable (param $0 dataref) + ;; CHECK: (func $test-dead-get-non-nullable (param $0 (ref data)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result dataref) + ;; CHECK-NEXT: (block (result (ref data)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/dae-gc-refine-params.wast b/test/lit/passes/dae-gc-refine-params.wast index e67600c54..3b104bdcc 100644 --- a/test/lit/passes/dae-gc-refine-params.wast +++ b/test/lit/passes/dae-gc-refine-params.wast @@ -466,11 +466,11 @@ ) ;; CHECK: (func $unused-and-refinable - ;; CHECK-NEXT: (local $0 (ref null data)) + ;; CHECK-NEXT: (local $0 dataref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $unused-and-refinable (type $none_=>_none) - ;; NOMNL-NEXT: (local $0 (ref null data)) + ;; NOMNL-NEXT: (local $0 dataref) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $unused-and-refinable (param $0 dataref) @@ -498,25 +498,21 @@ ) ;; CHECK: (func $non-nullable-fixup (param $0 (ref ${})) - ;; CHECK-NEXT: (local $1 (ref null data)) + ;; CHECK-NEXT: (local $1 dataref) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $non-nullable-fixup (type $ref|${}|_=>_none) (param $0 (ref ${})) - ;; NOMNL-NEXT: (local $1 (ref null data)) + ;; NOMNL-NEXT: (local $1 dataref) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 - ;; NOMNL-NEXT: (ref.as_non_null - ;; NOMNL-NEXT: (local.get $1) - ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $non-nullable-fixup (param $0 dataref) diff --git a/test/lit/passes/dae-gc-refine-return.wast b/test/lit/passes/dae-gc-refine-return.wast index f0a6fa18e..ccf11509c 100644 --- a/test/lit/passes/dae-gc-refine-return.wast +++ b/test/lit/passes/dae-gc-refine-return.wast @@ -80,17 +80,17 @@ ) ;; Refine the return type based on the value flowing out. - ;; CHECK: (func $refine-return-flow (result (ref null i31)) + ;; CHECK: (func $refine-return-flow (result i31ref) ;; CHECK-NEXT: (local $temp anyref) - ;; CHECK-NEXT: (local $i31 (ref null i31)) + ;; CHECK-NEXT: (local $i31 i31ref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-flow) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) - ;; NOMNL: (func $refine-return-flow (type $none_=>_ref?|i31|) (result (ref null i31)) + ;; NOMNL: (func $refine-return-flow (type $none_=>_i31ref) (result i31ref) ;; NOMNL-NEXT: (local $temp anyref) - ;; NOMNL-NEXT: (local $i31 (ref null i31)) + ;; NOMNL-NEXT: (local $i31 i31ref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-flow) ;; NOMNL-NEXT: ) @@ -104,23 +104,23 @@ (local.get $i31) ) - ;; CHECK: (func $call-refine-return-flow (result (ref null i31)) + ;; CHECK: (func $call-refine-return-flow (result i31ref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $call-refine-return-flow) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result (ref null i31)) + ;; CHECK-NEXT: (if (result i31ref) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $refine-return-flow) ;; CHECK-NEXT: (call $refine-return-flow) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $call-refine-return-flow (type $none_=>_ref?|i31|) (result (ref null i31)) + ;; NOMNL: (func $call-refine-return-flow (type $none_=>_i31ref) (result i31ref) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $call-refine-return-flow) ;; NOMNL-NEXT: ) - ;; NOMNL-NEXT: (if (result (ref null i31)) + ;; NOMNL-NEXT: (if (result i31ref) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (call $refine-return-flow) ;; NOMNL-NEXT: (call $refine-return-flow) @@ -141,9 +141,9 @@ ) ;; Refine the return type based on a return. - ;; CHECK: (func $refine-return-return (result (ref null i31)) + ;; CHECK: (func $refine-return-return (result i31ref) ;; CHECK-NEXT: (local $temp anyref) - ;; CHECK-NEXT: (local $i31 (ref null i31)) + ;; CHECK-NEXT: (local $i31 i31ref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-return) ;; CHECK-NEXT: ) @@ -151,9 +151,9 @@ ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $refine-return-return (type $none_=>_ref?|i31|) (result (ref null i31)) + ;; NOMNL: (func $refine-return-return (type $none_=>_i31ref) (result i31ref) ;; NOMNL-NEXT: (local $temp anyref) - ;; NOMNL-NEXT: (local $i31 (ref null i31)) + ;; NOMNL-NEXT: (local $i31 i31ref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-return) ;; NOMNL-NEXT: ) @@ -171,9 +171,9 @@ ) ;; Refine the return type based on multiple values. - ;; CHECK: (func $refine-return-many (result (ref null i31)) + ;; CHECK: (func $refine-return-many (result i31ref) ;; CHECK-NEXT: (local $temp anyref) - ;; CHECK-NEXT: (local $i31 (ref null i31)) + ;; CHECK-NEXT: (local $i31 i31ref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-many) ;; CHECK-NEXT: ) @@ -191,9 +191,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) - ;; NOMNL: (func $refine-return-many (type $none_=>_ref?|i31|) (result (ref null i31)) + ;; NOMNL: (func $refine-return-many (type $none_=>_i31ref) (result i31ref) ;; NOMNL-NEXT: (local $temp anyref) - ;; NOMNL-NEXT: (local $i31 (ref null i31)) + ;; NOMNL-NEXT: (local $i31 i31ref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-many) ;; NOMNL-NEXT: ) @@ -230,8 +230,8 @@ ;; CHECK: (func $refine-return-many-lub (result eqref) ;; CHECK-NEXT: (local $temp anyref) - ;; CHECK-NEXT: (local $i31 (ref null i31)) - ;; CHECK-NEXT: (local $data (ref null data)) + ;; CHECK-NEXT: (local $i31 i31ref) + ;; CHECK-NEXT: (local $data dataref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-many-lub) ;; CHECK-NEXT: ) @@ -251,8 +251,8 @@ ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-many-lub (type $none_=>_eqref) (result eqref) ;; NOMNL-NEXT: (local $temp anyref) - ;; NOMNL-NEXT: (local $i31 (ref null i31)) - ;; NOMNL-NEXT: (local $data (ref null data)) + ;; NOMNL-NEXT: (local $i31 i31ref) + ;; NOMNL-NEXT: (local $data dataref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-many-lub) ;; NOMNL-NEXT: ) @@ -291,8 +291,8 @@ ;; CHECK: (func $refine-return-many-lub-2 (result eqref) ;; CHECK-NEXT: (local $temp anyref) - ;; CHECK-NEXT: (local $i31 (ref null i31)) - ;; CHECK-NEXT: (local $data (ref null data)) + ;; CHECK-NEXT: (local $i31 i31ref) + ;; CHECK-NEXT: (local $data dataref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-many-lub-2) ;; CHECK-NEXT: ) @@ -312,8 +312,8 @@ ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-many-lub-2 (type $none_=>_eqref) (result eqref) ;; NOMNL-NEXT: (local $temp anyref) - ;; NOMNL-NEXT: (local $i31 (ref null i31)) - ;; NOMNL-NEXT: (local $data (ref null data)) + ;; NOMNL-NEXT: (local $i31 i31ref) + ;; NOMNL-NEXT: (local $data dataref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-many-lub-2) ;; NOMNL-NEXT: ) @@ -351,9 +351,9 @@ ) ;; We can refine the return types of tuples. - ;; CHECK: (func $refine-return-tuple (result (ref null i31) i32) + ;; CHECK: (func $refine-return-tuple (result i31ref i32) ;; CHECK-NEXT: (local $temp anyref) - ;; CHECK-NEXT: (local $i31 (ref null i31)) + ;; CHECK-NEXT: (local $i31 i31ref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (tuple.extract 0 ;; CHECK-NEXT: (call $refine-return-tuple) @@ -364,9 +364,9 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $refine-return-tuple (type $none_=>_ref?|i31|_i32) (result (ref null i31) i32) + ;; NOMNL: (func $refine-return-tuple (type $none_=>_i31ref_i32) (result i31ref i32) ;; NOMNL-NEXT: (local $temp anyref) - ;; NOMNL-NEXT: (local $i31 (ref null i31)) + ;; NOMNL-NEXT: (local $i31 i31ref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (tuple.extract 0 ;; NOMNL-NEXT: (call $refine-return-tuple) diff --git a/test/lit/passes/dae-gc.wast b/test/lit/passes/dae-gc.wast index 7740d8345..5ec272ea4 100644 --- a/test/lit/passes/dae-gc.wast +++ b/test/lit/passes/dae-gc.wast @@ -21,13 +21,11 @@ ) ) ;; CHECK: (func $bar - ;; CHECK-NEXT: (local $0 (ref null i31)) + ;; CHECK-NEXT: (local $0 i31ref) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i31.new - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i31.new + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -36,13 +34,11 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $bar (type $none_=>_none) - ;; NOMNL-NEXT: (local $0 (ref null i31)) + ;; NOMNL-NEXT: (local $0 i31ref) ;; NOMNL-NEXT: (drop - ;; NOMNL-NEXT: (ref.as_non_null - ;; NOMNL-NEXT: (local.tee $0 - ;; NOMNL-NEXT: (i31.new - ;; NOMNL-NEXT: (i32.const 2) - ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: (local.tee $0 + ;; NOMNL-NEXT: (i31.new + ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) @@ -164,7 +160,7 @@ ) ) - ;; CHECK: (func $bar (param $0 (ref null i31)) + ;; CHECK: (func $bar (param $0 i31ref) ;; CHECK-NEXT: (local $1 anyref) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null any) @@ -178,7 +174,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $bar (type $ref?|i31|_=>_none) (param $0 (ref null i31)) + ;; NOMNL: (func $bar (type $i31ref_=>_none) (param $0 i31ref) ;; NOMNL-NEXT: (local $1 anyref) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (ref.null any) diff --git a/test/lit/passes/dae_all-features.wast b/test/lit/passes/dae_all-features.wast index 446951561..89ce922ac 100644 --- a/test/lit/passes/dae_all-features.wast +++ b/test/lit/passes/dae_all-features.wast @@ -531,7 +531,7 @@ ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $0 - ;; CHECK-NEXT: (local $0 (ref null i31)) + ;; CHECK-NEXT: (local $0 i31ref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $0 (param $x i31ref) diff --git a/test/lit/passes/local-subtyping.wast b/test/lit/passes/local-subtyping.wast index 98de29e27..37990ad24 100644 --- a/test/lit/passes/local-subtyping.wast +++ b/test/lit/passes/local-subtyping.wast @@ -20,7 +20,7 @@ ;; not the optimal LUB. ;; CHECK: (func $refinalize (param $x i32) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (if (result i31ref) + ;; CHECK-NEXT: (if (result (ref i31)) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i31.new ;; CHECK-NEXT: (i32.const 0) @@ -31,7 +31,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block $block (result i31ref) + ;; CHECK-NEXT: (block $block (result (ref i31)) ;; CHECK-NEXT: (br $block ;; CHECK-NEXT: (i31.new ;; CHECK-NEXT: (i32.const 0) @@ -85,10 +85,10 @@ ) ) - ;; CHECK: (func $locals-with-multiple-assignments (param $data (ref null data)) + ;; CHECK: (func $locals-with-multiple-assignments (param $data dataref) ;; CHECK-NEXT: (local $x eqref) - ;; CHECK-NEXT: (local $y (ref null i31)) - ;; CHECK-NEXT: (local $z (ref null data)) + ;; CHECK-NEXT: (local $y i31ref) + ;; CHECK-NEXT: (local $z dataref) ;; CHECK-NEXT: (local $w funcref) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i31.new diff --git a/test/lit/passes/merge-blocks.wast b/test/lit/passes/merge-blocks.wast index d6ff8b3d8..e22f4c604 100644 --- a/test/lit/passes/merge-blocks.wast +++ b/test/lit/passes/merge-blocks.wast @@ -17,7 +17,7 @@ ;; CHECK: (func $br_on_to_drop ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block $label$1 (result (ref null i31)) + ;; CHECK-NEXT: (block $label$1 (result i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_on_i31 $label$1 ;; CHECK-NEXT: (ref.null any) diff --git a/test/lit/passes/merge-similar-functions_all-features.wast b/test/lit/passes/merge-similar-functions_all-features.wast index deda3b36b..bcd9c706b 100644 --- a/test/lit/passes/merge-similar-functions_all-features.wast +++ b/test/lit/passes/merge-similar-functions_all-features.wast @@ -5,7 +5,7 @@ ;; CHECK: (type $[i8] (array i8)) (type $[i8] (array i8)) - ;; CHECK: (func $take-ref-null-data (param $0 (ref null data)) + ;; CHECK: (func $take-ref-null-data (param $0 dataref) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $take-ref-null-data (param (ref null data)) diff --git a/test/lit/passes/optimize-instructions-call_ref.wast b/test/lit/passes/optimize-instructions-call_ref.wast index c2b2be364..7164fda55 100644 --- a/test/lit/passes/optimize-instructions-call_ref.wast +++ b/test/lit/passes/optimize-instructions-call_ref.wast @@ -16,7 +16,7 @@ ;; CHECK: (type $i32_=>_none (func (param i32))) - ;; CHECK: (type $data_=>_none (func (param dataref))) + ;; CHECK: (type $data_=>_none (func (param (ref data)))) (type $data_=>_none (func (param (ref data)))) ;; CHECK: (type $i32_i32_i32_ref|$i32_i32_=>_none|_=>_none (func (param i32 i32 i32 (ref $i32_i32_=>_none)))) @@ -124,10 +124,10 @@ ) ) - ;; CHECK: (func $fallthrough-non-nullable (param $x dataref) - ;; CHECK-NEXT: (local $1 (ref null data)) + ;; CHECK: (func $fallthrough-non-nullable (param $x (ref data)) + ;; CHECK-NEXT: (local $1 dataref) ;; CHECK-NEXT: (call $fallthrough-non-nullable - ;; CHECK-NEXT: (block (result dataref) + ;; CHECK-NEXT: (block (result (ref data)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/optimize-instructions-gc-tnh.wast b/test/lit/passes/optimize-instructions-gc-tnh.wast index aad02c17c..b1fc9a42b 100644 --- a/test/lit/passes/optimize-instructions-gc-tnh.wast +++ b/test/lit/passes/optimize-instructions-gc-tnh.wast @@ -75,7 +75,7 @@ ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (unreachable) ;; NO_TNH-NEXT: ) - ;; NO_TNH-NEXT: (block (result dataref) + ;; NO_TNH-NEXT: (block (result (ref data)) ;; NO_TNH-NEXT: (drop ;; NO_TNH-NEXT: (ref.func $ref.eq-no) ;; NO_TNH-NEXT: ) diff --git a/test/lit/passes/optimize-instructions-gc.wast b/test/lit/passes/optimize-instructions-gc.wast index e8db92523..6a52f2f44 100644 --- a/test/lit/passes/optimize-instructions-gc.wast +++ b/test/lit/passes/optimize-instructions-gc.wast @@ -154,7 +154,7 @@ ;; ref.is_null is not needed on a non-nullable value, and if something is ;; a func we don't need that either etc. if we know the result - ;; CHECK: (func $unneeded_is (param $struct (ref $struct)) (param $func (ref func)) (param $data dataref) (param $i31 i31ref) + ;; CHECK: (func $unneeded_is (param $struct (ref $struct)) (param $func (ref func)) (param $data (ref data)) (param $i31 (ref i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop @@ -188,7 +188,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $unneeded_is (type $ref|$struct|_ref|func|_dataref_i31ref_=>_none) (param $struct (ref $struct)) (param $func (ref func)) (param $data dataref) (param $i31 i31ref) + ;; NOMNL: (func $unneeded_is (type $ref|$struct|_ref|func|_ref|data|_ref|i31|_=>_none) (param $struct (ref $struct)) (param $func (ref func)) (param $data (ref data)) (param $i31 (ref i31)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop @@ -243,7 +243,7 @@ ;; similar to $unneeded_is, but the values are nullable. we can at least ;; leave just the null check. - ;; CHECK: (func $unneeded_is_null (param $struct (ref null $struct)) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) + ;; CHECK: (func $unneeded_is_null (param $struct (ref null $struct)) (param $func funcref) (param $data dataref) (param $i31 i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $struct) @@ -271,7 +271,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $unneeded_is_null (type $ref?|$struct|_funcref_ref?|data|_ref?|i31|_=>_none) (param $struct (ref null $struct)) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) + ;; NOMNL: (func $unneeded_is_null (type $ref?|$struct|_funcref_dataref_i31ref_=>_none) (param $struct (ref null $struct)) (param $func funcref) (param $data dataref) (param $i31 i31ref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.is_null ;; NOMNL-NEXT: (local.get $struct) @@ -320,7 +320,7 @@ ;; similar to $unneeded_is, but the values are of mixed kind (is_func of ;; data, etc.). regardless of nullability the result here is always 0. - ;; CHECK: (func $unneeded_is_bad_kinds (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) + ;; CHECK: (func $unneeded_is_bad_kinds (param $func funcref) (param $data dataref) (param $i31 i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop @@ -376,7 +376,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $unneeded_is_bad_kinds (type $funcref_ref?|data|_ref?|i31|_=>_none) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) + ;; NOMNL: (func $unneeded_is_bad_kinds (type $funcref_dataref_i31ref_=>_none) (param $func funcref) (param $data dataref) (param $i31 i31ref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop @@ -459,7 +459,7 @@ ;; ref.as_non_null is not needed on a non-nullable value, and if something is ;; a func we don't need that either etc., and can just return the value. - ;; CHECK: (func $unneeded_as (param $struct (ref $struct)) (param $func (ref func)) (param $data dataref) (param $i31 i31ref) + ;; CHECK: (func $unneeded_as (param $struct (ref $struct)) (param $func (ref func)) (param $data (ref data)) (param $i31 (ref i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) @@ -473,7 +473,7 @@ ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $unneeded_as (type $ref|$struct|_ref|func|_dataref_i31ref_=>_none) (param $struct (ref $struct)) (param $func (ref func)) (param $data dataref) (param $i31 i31ref) + ;; NOMNL: (func $unneeded_as (type $ref|$struct|_ref|func|_ref|data|_ref|i31|_=>_none) (param $struct (ref $struct)) (param $func (ref func)) (param $data (ref data)) (param $i31 (ref i31)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $struct) ;; NOMNL-NEXT: ) @@ -508,7 +508,7 @@ ;; similar to $unneeded_as, but the values are nullable. we can turn the ;; more specific things into ref.as_non_null. - ;; CHECK: (func $unneeded_as_null (param $struct (ref null $struct)) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) + ;; CHECK: (func $unneeded_as_null (param $struct (ref null $struct)) (param $func funcref) (param $data dataref) (param $i31 i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $struct) @@ -530,7 +530,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $unneeded_as_null (type $ref?|$struct|_funcref_ref?|data|_ref?|i31|_=>_none) (param $struct (ref null $struct)) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) + ;; NOMNL: (func $unneeded_as_null (type $ref?|$struct|_funcref_dataref_i31ref_=>_none) (param $struct (ref null $struct)) (param $func funcref) (param $data dataref) (param $i31 i31ref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $struct) @@ -573,7 +573,7 @@ ;; similar to $unneeded_as, but the values are of mixed kind (as_func of ;; data, etc.), so we know we will trap - ;; CHECK: (func $unneeded_as_bad_kinds (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) + ;; CHECK: (func $unneeded_as_bad_kinds (param $func funcref) (param $data dataref) (param $i31 i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref func)) ;; CHECK-NEXT: (drop @@ -583,7 +583,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result dataref) + ;; CHECK-NEXT: (block (result (ref data)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) @@ -591,7 +591,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result i31ref) + ;; CHECK-NEXT: (block (result (ref i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) @@ -607,7 +607,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result dataref) + ;; CHECK-NEXT: (block (result (ref data)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) @@ -615,7 +615,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result i31ref) + ;; CHECK-NEXT: (block (result (ref i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) @@ -623,7 +623,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; NOMNL: (func $unneeded_as_bad_kinds (type $funcref_ref?|data|_ref?|i31|_=>_none) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) + ;; NOMNL: (func $unneeded_as_bad_kinds (type $funcref_dataref_i31ref_=>_none) (param $func funcref) (param $data dataref) (param $i31 i31ref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref func)) ;; NOMNL-NEXT: (drop @@ -633,7 +633,7 @@ ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop - ;; NOMNL-NEXT: (block (result dataref) + ;; NOMNL-NEXT: (block (result (ref data)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) @@ -641,7 +641,7 @@ ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop - ;; NOMNL-NEXT: (block (result i31ref) + ;; NOMNL-NEXT: (block (result (ref i31)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) @@ -657,7 +657,7 @@ ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop - ;; NOMNL-NEXT: (block (result dataref) + ;; NOMNL-NEXT: (block (result (ref data)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) @@ -665,7 +665,7 @@ ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop - ;; NOMNL-NEXT: (block (result i31ref) + ;; NOMNL-NEXT: (block (result (ref i31)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) @@ -2130,7 +2130,7 @@ ;; CHECK: (func $consecutive-opts-with-unreachable (param $func funcref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $struct - ;; CHECK-NEXT: (block (result dataref) + ;; CHECK-NEXT: (block (result (ref data)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) @@ -2142,7 +2142,7 @@ ;; NOMNL: (func $consecutive-opts-with-unreachable (type $funcref_=>_none) (param $func funcref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $struct - ;; NOMNL-NEXT: (block (result dataref) + ;; NOMNL-NEXT: (block (result (ref data)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) diff --git a/test/lit/passes/precompute-gc-immutable.wast b/test/lit/passes/precompute-gc-immutable.wast index abee44329..bb627dfa1 100644 --- a/test/lit/passes/precompute-gc-immutable.wast +++ b/test/lit/passes/precompute-gc-immutable.wast @@ -735,7 +735,7 @@ ;; data that is filled with vtables of different types. On usage, we do a ;; cast of the vtable type. - ;; CHECK: (type $itable (array_subtype (ref null data) data)) + ;; CHECK: (type $itable (array_subtype dataref data)) (type $itable (array_subtype (ref null data) data)) ;; CHECK: (type $object (struct_subtype (field (ref $itable)) data)) diff --git a/test/lit/passes/remove-unused-brs-gc.wast b/test/lit/passes/remove-unused-brs-gc.wast index bdbf1bd07..3b7346e3f 100644 --- a/test/lit/passes/remove-unused-brs-gc.wast +++ b/test/lit/passes/remove-unused-brs-gc.wast @@ -33,7 +33,7 @@ ) ) ) - ;; CHECK: (func $br_on_non_data-2 (param $data dataref) + ;; CHECK: (func $br_on_non_data-2 (param $data (ref data)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $any (result anyref) ;; CHECK-NEXT: (drop @@ -57,10 +57,10 @@ ) ) - ;; CHECK: (func $br_on-if (param $0 dataref) + ;; CHECK: (func $br_on-if (param $0 (ref data)) ;; CHECK-NEXT: (block $label ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (select (result dataref) + ;; CHECK-NEXT: (select (result (ref data)) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) diff --git a/test/lit/passes/rse-gc.wast b/test/lit/passes/rse-gc.wast index e96b06a45..50657cf06 100644 --- a/test/lit/passes/rse-gc.wast +++ b/test/lit/passes/rse-gc.wast @@ -2,9 +2,9 @@ ;; RUN: wasm-opt %s --rse --enable-gc-nn-locals -all -S -o - | filecheck %s (module - ;; CHECK: (type $B (struct (field dataref))) + ;; CHECK: (type $B (struct (field (ref data)))) - ;; CHECK: (type $A (struct (field (ref null data)))) + ;; CHECK: (type $A (struct (field dataref))) (type $A (struct_subtype (field (ref null data)) data)) ;; $B is a subtype of $A, and its field has a more refined type (it is non- diff --git a/test/lit/passes/signature-refining.wast b/test/lit/passes/signature-refining.wast index 67d076de7..b4951a387 100644 --- a/test/lit/passes/signature-refining.wast +++ b/test/lit/passes/signature-refining.wast @@ -74,14 +74,14 @@ ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) - ;; CHECK: (type $sig (func_subtype (param (ref null data)) func)) + ;; CHECK: (type $sig (func_subtype (param dataref) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (elem declare func $func) - ;; CHECK: (func $func (type $sig) (param $x (ref null data)) + ;; CHECK: (func $func (type $sig) (param $x dataref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) @@ -356,7 +356,7 @@ ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) - ;; CHECK: (type $sig-1 (func_subtype (param (ref null data) anyref) func)) + ;; CHECK: (type $sig-1 (func_subtype (param dataref anyref) func)) (type $sig-1 (func_subtype (param anyref) (param anyref) func)) ;; CHECK: (type $sig-2 (func_subtype (param eqref (ref $struct)) func)) (type $sig-2 (func_subtype (param anyref) (param anyref) func)) @@ -365,7 +365,7 @@ ;; CHECK: (elem declare func $func-2) - ;; CHECK: (func $func-1 (type $sig-1) (param $x (ref null data)) (param $y anyref) + ;; CHECK: (func $func-1 (type $sig-1) (param $x dataref) (param $y anyref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-1 (type $sig-1) (param $x anyref) (param $y anyref) @@ -379,8 +379,8 @@ ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (local $any anyref) - ;; CHECK-NEXT: (local $data (ref null data)) - ;; CHECK-NEXT: (local $i31 (ref null i31)) + ;; CHECK-NEXT: (local $data dataref) + ;; CHECK-NEXT: (local $i31 i31ref) ;; CHECK-NEXT: (call $func-1 ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: (local.get $data) @@ -726,14 +726,14 @@ ;; Do not modify the types used on imported functions (until the spec and VM ;; support becomes stable). (module - ;; CHECK: (type $ref?|data|_=>_none (func_subtype (param (ref null data)) func)) + ;; CHECK: (type $dataref_=>_none (func_subtype (param dataref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) - ;; CHECK: (import "a" "b" (func $import (param (ref null data)))) + ;; CHECK: (import "a" "b" (func $import (param dataref))) (import "a" "b" (func $import (param (ref null data)))) ;; CHECK: (func $test (type $none_=>_none) diff --git a/test/lit/passes/simplify-locals-gc.wast b/test/lit/passes/simplify-locals-gc.wast index a930cae08..821f0a862 100644 --- a/test/lit/passes/simplify-locals-gc.wast +++ b/test/lit/passes/simplify-locals-gc.wast @@ -13,15 +13,15 @@ ;; NOMNL: (type $struct-immutable (struct_subtype (field i32) data)) (type $struct-immutable (struct (field i32))) - ;; CHECK: (type $B (struct (field dataref))) + ;; CHECK: (type $B (struct (field (ref data)))) - ;; CHECK: (type $A (struct (field (ref null data)))) - ;; NOMNL: (type $A (struct_subtype (field (ref null data)) data)) + ;; CHECK: (type $A (struct (field dataref))) + ;; NOMNL: (type $A (struct_subtype (field dataref) data)) (type $A (struct_subtype (field (ref null data)) data)) ;; $B is a subtype of $A, and its field has a more refined type (it is non- ;; nullable). - ;; NOMNL: (type $B (struct_subtype (field dataref) $A)) + ;; NOMNL: (type $B (struct_subtype (field (ref data)) $A)) (type $B (struct_subtype (field (ref data)) $A)) ;; Writes to heap objects cannot be reordered with reads. diff --git a/test/lit/passes/type-refining-isorecursive.wast b/test/lit/passes/type-refining-isorecursive.wast index eac3ba4b2..ae68a6dfb 100644 --- a/test/lit/passes/type-refining-isorecursive.wast +++ b/test/lit/passes/type-refining-isorecursive.wast @@ -9,7 +9,7 @@ (type $0 (struct_subtype (ref null any) anyref data)) ;; CHECK: (type $1 (struct_subtype (field eqref) (field (ref $2)) data)) (type $1 (struct_subtype (ref null eq) anyref data)) - ;; CHECK: (type $2 (struct_subtype (field (ref null i31)) (field (ref $0)) data)) + ;; CHECK: (type $2 (struct_subtype (field i31ref) (field (ref $0)) data)) (type $2 (struct_subtype (ref null i31) anyref data)) ;; CHECK: (type $ref|$0|_ref|$1|_ref|$2|_=>_none (func_subtype (param (ref $0) (ref $1) (ref $2)) func)) @@ -69,7 +69,7 @@ (type $0 (struct_subtype (ref null any) anyref anyref data)) ;; CHECK: (type $1 (struct_subtype (field eqref) (field (ref null $all)) (field (ref $0)) $0)) (type $1 (struct_subtype (ref null eq) anyref anyref $0)) - ;; CHECK: (type $2 (struct_subtype (field (ref null i31)) (field (ref null $all)) (field (ref $0)) $1)) + ;; CHECK: (type $2 (struct_subtype (field i31ref) (field (ref null $all)) (field (ref $0)) $1)) (type $2 (struct_subtype (ref null i31) anyref anyref $1)) ;; CHECK: (type $ref|$0|_ref|$1|_ref|$2|_=>_none (func_subtype (param (ref $0) (ref $1) (ref $2)) func)) diff --git a/test/lit/passes/type-refining.wast b/test/lit/passes/type-refining.wast index ce305e8cc..6b56e56e9 100644 --- a/test/lit/passes/type-refining.wast +++ b/test/lit/passes/type-refining.wast @@ -5,7 +5,7 @@ ;; A struct with three fields. The first will have no writes, the second one ;; write of the same type, and the last a write of a subtype, which will allow ;; us to specialize that one. - ;; CHECK: (type $struct (struct_subtype (field (mut anyref)) (field (mut anyref)) (field (mut i31ref)) data)) + ;; CHECK: (type $struct (struct_subtype (field (mut anyref)) (field (mut anyref)) (field (mut (ref i31))) data)) (type $struct (struct_subtype (field (mut anyref)) (field (mut anyref)) (field (mut anyref)) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) @@ -51,7 +51,7 @@ ;; must keep the type nullable, unlike in the previous module, due to the ;; default value being null. - ;; CHECK: (type $struct (struct_subtype (field (mut (ref null i31))) data)) + ;; CHECK: (type $struct (struct_subtype (field (mut i31ref)) data)) (type $struct (struct_subtype (field (mut anyref)) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) @@ -655,7 +655,7 @@ ) (module - ;; CHECK: (type $struct (struct_subtype (field (mut (ref null data))) data)) + ;; CHECK: (type $struct (struct_subtype (field (mut dataref)) data)) (type $struct (struct_subtype (field (mut (ref null data))) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) diff --git a/test/lit/passes/vacuum-gc.wast b/test/lit/passes/vacuum-gc.wast index 57b298443..8ec273332 100644 --- a/test/lit/passes/vacuum-gc.wast +++ b/test/lit/passes/vacuum-gc.wast @@ -72,8 +72,12 @@ ) ) - ;; CHECK: (func $drop-i31.get (param $ref i31ref) (param $ref-nn i31ref) - ;; CHECK-NEXT: (nop) + ;; CHECK: (func $drop-i31.get (param $ref i31ref) (param $ref-nn (ref i31)) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i31.get_s + ;; CHECK-NEXT: (local.get $ref) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $drop-i31.get (param $ref i31ref) (param $ref-nn (ref i31)) ;; A nullable get might trap, so only the second item can be removed. |