diff options
Diffstat (limited to 'test/lit/passes/inlining_all-features.wast')
-rw-r--r-- | test/lit/passes/inlining_all-features.wast | 83 |
1 files changed, 82 insertions, 1 deletions
diff --git a/test/lit/passes/inlining_all-features.wast b/test/lit/passes/inlining_all-features.wast index b3089baeb..fce3cc460 100644 --- a/test/lit/passes/inlining_all-features.wast +++ b/test/lit/passes/inlining_all-features.wast @@ -1,7 +1,7 @@ ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --inlining --all-features -S -o - | filecheck %s -;; RUN: foreach %s %t wasm-opt --inlining --all-features --nominal -S -o - | filecheck %s +;; RUN: foreach %s %t wasm-opt --inlining --all-features --nominal -S -o - | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $none_=>_none (func)) @@ -11,6 +11,13 @@ ;; CHECK: (elem declare func $foo) ;; CHECK: (export "ref_func_test" (func $ref_func_test)) + ;; NOMNL: (type $none_=>_none (func_subtype func)) + + ;; NOMNL: (type $none_=>_funcref (func_subtype (result funcref) func)) + + ;; NOMNL: (elem declare func $foo) + + ;; NOMNL: (export "ref_func_test" (func $ref_func_test)) (export "ref_func_test" (func $ref_func_test)) ;; $foo should not be removed after being inlined, because there is 'ref.func' @@ -18,6 +25,9 @@ ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) + ;; NOMNL: (func $foo + ;; NOMNL-NEXT: (nop) + ;; NOMNL-NEXT: ) (func $foo) ;; CHECK: (func $ref_func_test (result funcref) @@ -28,6 +38,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) + ;; NOMNL: (func $ref_func_test (result funcref) + ;; NOMNL-NEXT: (block + ;; NOMNL-NEXT: (block $__inlined_func$foo + ;; NOMNL-NEXT: (nop) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: (ref.func $foo) + ;; NOMNL-NEXT: ) (func $ref_func_test (result funcref) (call $foo) (ref.func $foo) @@ -40,11 +58,17 @@ ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (global $global$0 (mut funcref) (ref.func $0)) + ;; NOMNL: (type $none_=>_i32 (func_subtype (result i32) func)) + + ;; NOMNL: (global $global$0 (mut funcref) (ref.func $0)) (global $global$0 (mut funcref) (ref.func $0)) ;; CHECK: (func $0 (result i32) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) + ;; NOMNL: (func $0 (result i32) + ;; NOMNL-NEXT: (i32.const 1337) + ;; NOMNL-NEXT: ) (func $0 (result i32) (i32.const 1337) ) @@ -54,6 +78,11 @@ ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; NOMNL: (func $1 (result i32) + ;; NOMNL-NEXT: (block $__inlined_func$0 (result i32) + ;; NOMNL-NEXT: (i32.const 1337) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) (func $1 (result i32) (call $0) ) @@ -65,11 +94,17 @@ ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (start $0) + ;; NOMNL: (type $none_=>_none (func_subtype func)) + + ;; NOMNL: (start $0) (start $0) ;; CHECK: (func $0 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) + ;; NOMNL: (func $0 + ;; NOMNL-NEXT: (nop) + ;; NOMNL-NEXT: ) (func $0 (nop) ) @@ -79,6 +114,11 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; NOMNL: (func $1 + ;; NOMNL-NEXT: (block $__inlined_func$0 + ;; NOMNL-NEXT: (nop) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) (func $1 (call $0) ) @@ -87,9 +127,11 @@ ;; inline a return_call_ref (module ;; CHECK: (type $none_=>_none (func)) + ;; NOMNL: (type $none_=>_none (func_subtype func)) (type $none_=>_none (func)) ;; CHECK: (export "func_36_invoker" (func $1)) + ;; NOMNL: (export "func_36_invoker" (func $1)) (export "func_36_invoker" (func $1)) (func $0 @@ -108,6 +150,17 @@ ;; CHECK-NEXT: (br $__inlined_func$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; NOMNL: (func $1 + ;; NOMNL-NEXT: (block $__inlined_func$0 + ;; NOMNL-NEXT: (block + ;; NOMNL-NEXT: (call_ref + ;; NOMNL-NEXT: (ref.null $none_=>_none) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: (br $__inlined_func$0) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: (br $__inlined_func$0) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) (func $1 (call $0) ) @@ -134,6 +187,21 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; NOMNL: (type $none_=>_ref|func| (func_subtype (result (ref func)) func)) + + ;; NOMNL: (elem declare func $1) + + ;; NOMNL: (func $1 (result (ref func)) + ;; NOMNL-NEXT: (local $0 funcref) + ;; NOMNL-NEXT: (block $__inlined_func$0 (result (ref func)) + ;; NOMNL-NEXT: (local.set $0 + ;; NOMNL-NEXT: (ref.func $1) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: (ref.as_non_null + ;; NOMNL-NEXT: (local.get $0) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) (func $1 (result (ref func)) (call $0 (ref.func $1) @@ -144,6 +212,7 @@ ;; never inline an rtt parameter, as those cannot be handled as locals (module ;; CHECK: (type $struct (struct )) + ;; NOMNL: (type $struct (struct_subtype data)) (type $struct (struct)) ;; CHECK: (type $rtt_$struct_=>_none (func (param (rtt $struct)))) @@ -152,6 +221,13 @@ ;; CHECK: (func $0 (param $rtt (rtt $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) + ;; NOMNL: (type $rtt_$struct_=>_none (func_subtype (param (rtt $struct)) func)) + + ;; NOMNL: (type $none_=>_none (func_subtype func)) + + ;; NOMNL: (func $0 (param $rtt (rtt $struct)) + ;; NOMNL-NEXT: (nop) + ;; NOMNL-NEXT: ) (func $0 (param $rtt (rtt $struct)) ) ;; CHECK: (func $1 @@ -159,6 +235,11 @@ ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; NOMNL: (func $1 + ;; NOMNL-NEXT: (call $0 + ;; NOMNL-NEXT: (rtt.canon $struct) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) (func $1 (call $0 (rtt.canon $struct) |