46 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s --mtriple=wasm32-unknown-unknown -mattr=+reference-types | FileCheck %s3 4%funcref = type ptr addrspace(20) ;; addrspace 20 is nonintegral5 6; CHECK: .tabletype __funcref_call_table, funcref, 17 8define void @call_funcref(%funcref %ref) {9; CHECK-LABEL: call_funcref:10; CHECK: .functype call_funcref (funcref) -> ()11; CHECK-NEXT: # %bb.0:12; CHECK-NEXT: i32.const 013; CHECK-NEXT: local.get 014; CHECK-NEXT: table.set __funcref_call_table15; CHECK-NEXT: i32.const 016; CHECK-NEXT: call_indirect __funcref_call_table, () -> ()17; CHECK-NEXT: i32.const 018; CHECK-NEXT: ref.null_func19; CHECK-NEXT: table.set __funcref_call_table20; CHECK-NEXT: # fallthrough-return21 call addrspace(20) void %ref()22 ret void23}24 25define float @call_funcref_with_args(%funcref %ref) {26; CHECK-LABEL: call_funcref_with_args:27; CHECK: .functype call_funcref_with_args (funcref) -> (f32)28; CHECK-NEXT: .local f3229; CHECK-NEXT: # %bb.0:30; CHECK-NEXT: i32.const 031; CHECK-NEXT: local.get 032; CHECK-NEXT: table.set __funcref_call_table33; CHECK-NEXT: f64.const 0x1p034; CHECK-NEXT: i32.const 235; CHECK-NEXT: i32.const 036; CHECK-NEXT: call_indirect __funcref_call_table, (f64, i32) -> (f32)37; CHECK-NEXT: local.set 138; CHECK-NEXT: i32.const 039; CHECK-NEXT: ref.null_func40; CHECK-NEXT: table.set __funcref_call_table41; CHECK-NEXT: local.get 142; CHECK-NEXT: # fallthrough-return43 %ret = call addrspace(20) float %ref(double 1.0, i32 2)44 ret float %ret45}46