; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc --mtriple=wasm32-unknown-unknown -mattr=+reference-types < %s | FileCheck %s

%externref = type target("wasm.externref")
%funcref = type target("wasm.funcref")

declare %externref @llvm.wasm.ref.null.extern() nounwind
declare %funcref @llvm.wasm.ref.null.func() nounwind
declare i32 @llvm.wasm.ref.is_null.extern(%externref) nounwind
declare i32 @llvm.wasm.ref.is_null.func(%funcref) nounwind

define %externref @get_null_extern() {
; CHECK-LABEL: get_null_extern:
; CHECK:         .functype get_null_extern () -> (externref)
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    ref.null_extern
; CHECK-NEXT:    # fallthrough-return
  %null = call %externref @llvm.wasm.ref.null.extern()
  ret %externref %null
}

define %funcref @get_null_func() {
; CHECK-LABEL: get_null_func:
; CHECK:         .functype get_null_func () -> (funcref)
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    ref.null_func
; CHECK-NEXT:    # fallthrough-return
  %null = call %funcref @llvm.wasm.ref.null.func()
  ret %funcref %null
}

define i32 @ref_is_null_extern(%externref %eref) {
; CHECK-LABEL: ref_is_null_extern:
; CHECK:         .functype ref_is_null_extern (externref) -> (i32)
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    ref.null_extern
; CHECK-NEXT:    ref.is_null
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    ref.is_null
; CHECK-NEXT:    i32.add
; CHECK-NEXT:    # fallthrough-return
  %null = call %externref @llvm.wasm.ref.null.extern()
  %is_null = call i32 @llvm.wasm.ref.is_null.extern(%externref %null)
  %arg_is_null = call i32 @llvm.wasm.ref.is_null.extern(%externref %eref)
  %res = add i32 %is_null, %arg_is_null
  ret i32 %res
}

define i32 @ref_is_null_func(%funcref %fref) {
; CHECK-LABEL: ref_is_null_func:
; CHECK:         .functype ref_is_null_func (funcref) -> (i32)
; CHECK-NEXT:  # %bb.0:
; CHECK-NEXT:    ref.null_func
; CHECK-NEXT:    ref.is_null
; CHECK-NEXT:    local.get 0
; CHECK-NEXT:    ref.is_null
; CHECK-NEXT:    i32.add
; CHECK-NEXT:    # fallthrough-return
  %null = call %funcref @llvm.wasm.ref.null.func()
  %is_null = call i32 @llvm.wasm.ref.is_null.func(%funcref %null)
  %arg_is_null = call i32 @llvm.wasm.ref.is_null.func(%funcref %fref)
  %res = add i32 %is_null, %arg_is_null
  ret i32 %res
}
