blob: 37a7efdde2678c9399adb9a20b0207d0199bd2ee [file] [edit]
;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.
;; RUN: wasm-opt -all %s --vacuum -S -o - | filecheck %s
;; RUN: wasm-opt -all %s --vacuum --ignore-implicit-traps -S -o - | filecheck %s --check-prefix=CKIIT
;; RUN: wasm-opt -all %s --vacuum --traps-never-happen -S -o - | filecheck %s --check-prefix=CKTNH
(module
(rec
;; CHECK: (rec
;; CHECK-NEXT: (type $struct (descriptor $desc) (struct))
;; CKIIT: (rec
;; CKIIT-NEXT: (type $struct (descriptor $desc) (struct))
;; CKTNH: (rec
;; CKTNH-NEXT: (type $struct (descriptor $desc) (struct))
(type $struct (descriptor $desc) (struct))
;; CHECK: (type $desc (describes $struct) (struct))
;; CKIIT: (type $desc (describes $struct) (struct))
;; CKTNH: (type $desc (describes $struct) (struct))
(type $desc (describes $struct) (struct))
)
;; CHECK: (func $new-null-desc (type $5) (param $desc nullref)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (struct.new_default_desc $struct
;; CHECK-NEXT: (local.get $desc)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CKIIT: (func $new-null-desc (type $5) (param $desc nullref)
;; CKIIT-NEXT: (drop
;; CKIIT-NEXT: (struct.new_default_desc $struct
;; CKIIT-NEXT: (local.get $desc)
;; CKIIT-NEXT: )
;; CKIIT-NEXT: )
;; CKIIT-NEXT: )
;; CKTNH: (func $new-null-desc (type $5) (param $desc nullref)
;; CKTNH-NEXT: (nop)
;; CKTNH-NEXT: )
(func $new-null-desc (param $desc nullref)
(drop
(struct.new_desc $struct
(local.get $desc)
)
)
)
;; CHECK: (func $new-nullable-desc (type $6) (param $desc (ref null (exact $desc)))
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (struct.new_default_desc $struct
;; CHECK-NEXT: (local.get $desc)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CKIIT: (func $new-nullable-desc (type $6) (param $desc (ref null (exact $desc)))
;; CKIIT-NEXT: (nop)
;; CKIIT-NEXT: )
;; CKTNH: (func $new-nullable-desc (type $6) (param $desc (ref null (exact $desc)))
;; CKTNH-NEXT: (nop)
;; CKTNH-NEXT: )
(func $new-nullable-desc (param $desc (ref null (exact $desc)))
(drop
(struct.new_desc $struct
(local.get $desc)
)
)
)
;; CHECK: (func $new-non-nullable-desc (type $7) (param $desc (ref (exact $desc)))
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
;; CKIIT: (func $new-non-nullable-desc (type $7) (param $desc (ref (exact $desc)))
;; CKIIT-NEXT: (nop)
;; CKIIT-NEXT: )
;; CKTNH: (func $new-non-nullable-desc (type $7) (param $desc (ref (exact $desc)))
;; CKTNH-NEXT: (nop)
;; CKTNH-NEXT: )
(func $new-non-nullable-desc (param $desc (ref (exact $desc)))
(drop
(struct.new_desc $struct
(local.get $desc)
)
)
)
;; CHECK: (func $cast-null-desc (type $2) (param $ref anyref) (param $desc nullref)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block ;; (replaces unreachable RefCast we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (local.get $desc)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CKIIT: (func $cast-null-desc (type $2) (param $ref anyref) (param $desc nullref)
;; CKIIT-NEXT: (drop
;; CKIIT-NEXT: (block ;; (replaces unreachable RefCast we can't emit)
;; CKIIT-NEXT: (drop
;; CKIIT-NEXT: (local.get $ref)
;; CKIIT-NEXT: )
;; CKIIT-NEXT: (drop
;; CKIIT-NEXT: (local.get $desc)
;; CKIIT-NEXT: )
;; CKIIT-NEXT: (unreachable)
;; CKIIT-NEXT: )
;; CKIIT-NEXT: )
;; CKIIT-NEXT: )
;; CKTNH: (func $cast-null-desc (type $2) (param $ref anyref) (param $desc nullref)
;; CKTNH-NEXT: (nop)
;; CKTNH-NEXT: )
(func $cast-null-desc (param $ref anyref) (param $desc nullref)
(drop
(ref.cast_desc_eq (ref null $struct)
(local.get $ref)
(local.get $desc)
)
)
)
;; CHECK: (func $cast-nullable-desc (type $3) (param $ref anyref) (param $desc (ref null $desc))
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.cast_desc_eq (ref null $struct)
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (local.get $desc)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CKIIT: (func $cast-nullable-desc (type $3) (param $ref anyref) (param $desc (ref null $desc))
;; CKIIT-NEXT: (nop)
;; CKIIT-NEXT: )
;; CKTNH: (func $cast-nullable-desc (type $3) (param $ref anyref) (param $desc (ref null $desc))
;; CKTNH-NEXT: (nop)
;; CKTNH-NEXT: )
(func $cast-nullable-desc (param $ref anyref) (param $desc (ref null $desc))
(drop
(ref.cast_desc_eq (ref null $struct)
(local.get $ref)
(local.get $desc)
)
)
)
;; CHECK: (func $cast-non-nullable-desc (type $4) (param $ref anyref) (param $desc (ref $desc))
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.cast_desc_eq (ref null $struct)
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (local.get $desc)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CKIIT: (func $cast-non-nullable-desc (type $4) (param $ref anyref) (param $desc (ref $desc))
;; CKIIT-NEXT: (nop)
;; CKIIT-NEXT: )
;; CKTNH: (func $cast-non-nullable-desc (type $4) (param $ref anyref) (param $desc (ref $desc))
;; CKTNH-NEXT: (nop)
;; CKTNH-NEXT: )
(func $cast-non-nullable-desc (param $ref anyref) (param $desc (ref $desc))
(drop
;; The cast can still trap on failure, so by default we cannot remove it.
(ref.cast_desc_eq (ref null $struct)
(local.get $ref)
(local.get $desc)
)
)
)
;; CHECK: (func $br-on-cast-null-desc (type $2) (param $ref anyref) (param $desc nullref)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $l (result anyref)
;; CHECK-NEXT: (block ;; (replaces unreachable BrOn we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (local.get $desc)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CKIIT: (func $br-on-cast-null-desc (type $2) (param $ref anyref) (param $desc nullref)
;; CKIIT-NEXT: (drop
;; CKIIT-NEXT: (block $l (result anyref)
;; CKIIT-NEXT: (block ;; (replaces unreachable BrOn we can't emit)
;; CKIIT-NEXT: (drop
;; CKIIT-NEXT: (local.get $ref)
;; CKIIT-NEXT: )
;; CKIIT-NEXT: (drop
;; CKIIT-NEXT: (local.get $desc)
;; CKIIT-NEXT: )
;; CKIIT-NEXT: (unreachable)
;; CKIIT-NEXT: )
;; CKIIT-NEXT: )
;; CKIIT-NEXT: )
;; CKIIT-NEXT: )
;; CKTNH: (func $br-on-cast-null-desc (type $2) (param $ref anyref) (param $desc nullref)
;; CKTNH-NEXT: (nop)
;; CKTNH-NEXT: )
(func $br-on-cast-null-desc (param $ref anyref) (param $desc nullref)
(drop
(block $l (result anyref)
(br_on_cast_desc_eq $l anyref (ref null $struct)
(local.get $ref)
(local.get $desc)
)
)
)
)
;; CHECK: (func $br-on-cast-nullable-desc (type $3) (param $ref anyref) (param $desc (ref null $desc))
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $l (result anyref)
;; CHECK-NEXT: (br_on_cast_desc_eq $l anyref (ref null $struct)
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (local.get $desc)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CKIIT: (func $br-on-cast-nullable-desc (type $3) (param $ref anyref) (param $desc (ref null $desc))
;; CKIIT-NEXT: (nop)
;; CKIIT-NEXT: )
;; CKTNH: (func $br-on-cast-nullable-desc (type $3) (param $ref anyref) (param $desc (ref null $desc))
;; CKTNH-NEXT: (nop)
;; CKTNH-NEXT: )
(func $br-on-cast-nullable-desc (param $ref anyref) (param $desc (ref null $desc))
(drop
(block $l (result anyref)
(br_on_cast_desc_eq $l anyref (ref null $struct)
(local.get $ref)
(local.get $desc)
)
)
)
)
;; CHECK: (func $br-on-cast-non-nullable-desc (type $4) (param $ref anyref) (param $desc (ref $desc))
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
;; CKIIT: (func $br-on-cast-non-nullable-desc (type $4) (param $ref anyref) (param $desc (ref $desc))
;; CKIIT-NEXT: (nop)
;; CKIIT-NEXT: )
;; CKTNH: (func $br-on-cast-non-nullable-desc (type $4) (param $ref anyref) (param $desc (ref $desc))
;; CKTNH-NEXT: (nop)
;; CKTNH-NEXT: )
(func $br-on-cast-non-nullable-desc (param $ref anyref) (param $desc (ref $desc))
(drop
(block $l (result anyref)
(br_on_cast_desc_eq $l anyref (ref null $struct)
(local.get $ref)
(local.get $desc)
)
)
)
)
)