1604c9a07SAlex Bradbury; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2604c9a07SAlex Bradbury; RUN: llc < %s --mtriple=wasm32-unknown-unknown -mattr=+reference-types | FileCheck %s 346667a10SPaulo Matos 480fb7823SAlex Bradbury%funcref = type ptr addrspace(20) ;; addrspace 20 is nonintegral 546667a10SPaulo Matos 646667a10SPaulo Matos; CHECK: .tabletype __funcref_call_table, funcref, 1 746667a10SPaulo Matos 82fd634a5SPaulo Matosdefine void @call_funcref(%funcref %ref) { 946667a10SPaulo Matos; CHECK-LABEL: call_funcref: 10604c9a07SAlex Bradbury; CHECK: .functype call_funcref (funcref) -> () 11604c9a07SAlex Bradbury; CHECK-NEXT: # %bb.0: 1246667a10SPaulo Matos; CHECK-NEXT: i32.const 0 1346667a10SPaulo Matos; CHECK-NEXT: local.get 0 1446667a10SPaulo Matos; CHECK-NEXT: table.set __funcref_call_table 150c749584SPaulo Matos; CHECK-NEXT: i32.const 0 1646667a10SPaulo Matos; CHECK-NEXT: call_indirect __funcref_call_table, () -> () 1746667a10SPaulo Matos; CHECK-NEXT: i32.const 0 18a96d8285SPaulo Matos; CHECK-NEXT: ref.null_func 1946667a10SPaulo Matos; CHECK-NEXT: table.set __funcref_call_table 20604c9a07SAlex Bradbury; CHECK-NEXT: # fallthrough-return 212fd634a5SPaulo Matos call addrspace(20) void %ref() 222fd634a5SPaulo Matos ret void 232fd634a5SPaulo Matos} 24*3a80dc27SAlex Bradbury 25*3a80dc27SAlex Bradburydefine float @call_funcref_with_args(%funcref %ref) { 26*3a80dc27SAlex Bradbury; CHECK-LABEL: call_funcref_with_args: 27*3a80dc27SAlex Bradbury; CHECK: .functype call_funcref_with_args (funcref) -> (f32) 28*3a80dc27SAlex Bradbury; CHECK-NEXT: .local f32 29*3a80dc27SAlex Bradbury; CHECK-NEXT: # %bb.0: 30*3a80dc27SAlex Bradbury; CHECK-NEXT: i32.const 0 31*3a80dc27SAlex Bradbury; CHECK-NEXT: local.get 0 32*3a80dc27SAlex Bradbury; CHECK-NEXT: table.set __funcref_call_table 33*3a80dc27SAlex Bradbury; CHECK-NEXT: f64.const 0x1p0 34*3a80dc27SAlex Bradbury; CHECK-NEXT: i32.const 2 35*3a80dc27SAlex Bradbury; CHECK-NEXT: i32.const 0 36*3a80dc27SAlex Bradbury; CHECK-NEXT: call_indirect __funcref_call_table, (f64, i32) -> (f32) 37*3a80dc27SAlex Bradbury; CHECK-NEXT: local.set 1 38*3a80dc27SAlex Bradbury; CHECK-NEXT: i32.const 0 39*3a80dc27SAlex Bradbury; CHECK-NEXT: ref.null_func 40*3a80dc27SAlex Bradbury; CHECK-NEXT: table.set __funcref_call_table 41*3a80dc27SAlex Bradbury; CHECK-NEXT: local.get 1 42*3a80dc27SAlex Bradbury; CHECK-NEXT: # fallthrough-return 43*3a80dc27SAlex Bradbury %ret = call addrspace(20) float %ref(double 1.0, i32 2) 44*3a80dc27SAlex Bradbury ret float %ret 45*3a80dc27SAlex Bradbury} 46