blob: 171b303bfe63f2a1e7a27c0bd152007496a6e006 [file] [edit]
;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.
;; Test that trivial exact casts are ok even when custom descriptors is
;; disabled.
;; RUN: wasm-opt %s -all --disable-custom-descriptors -S -o - | filecheck %s
(module
;; CHECK: (type $foo (struct))
(type $foo (struct))
;; CHECK: (func $ref.cast (type $1) (param $0 (ref (exact $foo))) (param $1 (ref null (exact $foo)))
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.cast (ref (exact $foo))
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.cast (ref (exact $foo))
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.cast (ref null (exact $foo))
;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.cast (ref (exact $foo))
;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $ref.cast (param (ref (exact $foo)) (ref null (exact $foo)))
(drop
(ref.cast anyref
(local.get 0)
)
)
(drop
(ref.cast (ref any)
(local.get 0)
)
)
(drop
(ref.cast anyref
(local.get 1)
)
)
(drop
(ref.cast (ref any)
(local.get 1)
)
)
)
;; CHECK: (func $ref.test (type $1) (param $0 (ref (exact $foo))) (param $1 (ref null (exact $foo)))
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.test (ref (exact $foo))
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.test (ref (exact $foo))
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.test (ref null (exact $foo))
;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.test (ref (exact $foo))
;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $ref.test (param (ref (exact $foo)) (ref null (exact $foo)))
(drop
(ref.test anyref
(local.get 0)
)
)
(drop
(ref.test (ref any)
(local.get 0)
)
)
(drop
(ref.test anyref
(local.get 1)
)
)
(drop
(ref.test (ref any)
(local.get 1)
)
)
)
;; CHECK: (func $br_on_cast (type $2) (param $0 (ref null (exact $foo))) (param $1 (ref null (exact $foo)))
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $block (result anyref)
;; CHECK-NEXT: (br_on_cast $block (ref null (exact $foo)) (ref null (exact $foo))
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $block1 (result anyref)
;; CHECK-NEXT: (br_on_cast $block1 (ref null (exact $foo)) (ref (exact $foo))
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $block2 (result anyref)
;; CHECK-NEXT: (br_on_cast $block2 (ref null (exact $foo)) (ref null (exact $foo))
;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $block3 (result anyref)
;; CHECK-NEXT: (br_on_cast $block3 (ref null (exact $foo)) (ref (exact $foo))
;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $br_on_cast (param (ref null (exact $foo)) (ref null (exact $foo)))
(drop
(block (result anyref)
(br_on_cast 0 anyref anyref
(local.get 0)
)
)
)
(drop
(block (result anyref)
(br_on_cast 0 anyref (ref any)
(local.get 0)
)
)
)
(drop
(block (result anyref)
(br_on_cast 0 anyref anyref
(local.get 1)
)
)
)
(drop
(block (result anyref)
(br_on_cast 0 anyref (ref any)
(local.get 1)
)
)
)
)
;; CHECK: (func $br_on_cast_fail (type $1) (param $0 (ref (exact $foo))) (param $1 (ref null (exact $foo)))
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $block (result anyref)
;; CHECK-NEXT: (br_on_cast_fail $block (ref (exact $foo)) (ref (exact $foo))
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $block1 (result anyref)
;; CHECK-NEXT: (br_on_cast_fail $block1 (ref (exact $foo)) (ref (exact $foo))
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $block2 (result anyref)
;; CHECK-NEXT: (br_on_cast_fail $block2 (ref null (exact $foo)) (ref null (exact $foo))
;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $block3 (result anyref)
;; CHECK-NEXT: (br_on_cast_fail $block3 (ref null (exact $foo)) (ref (exact $foo))
;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $br_on_cast_fail (param (ref (exact $foo)) (ref null (exact $foo)))
(drop
(block (result anyref)
(br_on_cast_fail 0 anyref anyref
(local.get 0)
)
)
)
(drop
(block (result anyref)
(br_on_cast_fail 0 anyref (ref any)
(local.get 0)
)
)
)
(drop
(block (result anyref)
(br_on_cast_fail 0 anyref anyref
(local.get 1)
)
)
)
(drop
(block (result anyref)
(br_on_cast_fail 0 anyref (ref any)
(local.get 1)
)
)
)
)
)