brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 98e1b55 Raw
80 lines · plain
1; RUN: llc --mtriple=wasm32-unknown-unknown -asm-verbose=false -mattr=+reference-types < %s | FileCheck %s2 3%funcref = type ptr addrspace(20) ;; addrspace 20 is nonintegral4 5@funcref_table = local_unnamed_addr addrspace(1) global [0 x %funcref] undef6 7declare void @llvm.wasm.table.set.funcref(ptr addrspace(1), i32, %funcref) nounwind8 9define void @set_funcref_table(%funcref %g, i32 %i) {10; CHECK-LABEL: set_funcref_table:11; CHECK-NEXT: .functype       set_funcref_table (funcref, i32) -> ()12; CHECK-NEXT: local.get      113; CHECK-NEXT: local.get      014; CHECK-NEXT: table.set     funcref_table15; CHECK-NEXT: end_function16 17;; this generates a table.set of @funcref_table18  call void @llvm.wasm.table.set.funcref(ptr addrspace(1) @funcref_table, i32 %i, %funcref %g)19  ret void20}21 22define void @set_funcref_table_const(%funcref %g) {23; CHECK-LABEL: set_funcref_table_const:24; CHECK-NEXT:  .functype      set_funcref_table_const (funcref) -> ()25; CHECK-NEXT:  i32.const      026; CHECK-NEXT:  local.get      027; CHECK-NEXT:  table.set      funcref_table28; CHECK-NEXT:  end_function29  call void @llvm.wasm.table.set.funcref(ptr addrspace(1) @funcref_table, i32 0, %funcref %g)30  ret void31}32 33define void @set_funcref_table_with_offset(%funcref %g, i32 %i) {34; CHECK-LABEL: set_funcref_table_with_offset:35; CHECK-NEXT:  .functype       set_funcref_table_with_offset (funcref, i32) -> ()36; CHECK-NEXT:  local.get       137; CHECK-NEXT:  i32.const       238; CHECK-NEXT:  i32.add39; CHECK-NEXT:  local.get       040; CHECK-NEXT:  table.set       funcref_table41; CHECK-NEXT:  end_function42  %off = add nsw i32 %i, 243  call void @llvm.wasm.table.set.funcref(ptr addrspace(1) @funcref_table, i32 %off, %funcref %g)44  ret void45}46 47define void @set_funcref_table_with_var_offset(%funcref %g, i32 %i, i32 %j) {48; CHECK-LABEL: set_funcref_table_with_var_offset:49; CHECK-NEXT:  .functype       set_funcref_table_with_var_offset (funcref, i32, i32) -> ()50; CHECK-NEXT:  local.get       151; CHECK-NEXT:  local.get       252; CHECK-NEXT:  i32.add53; CHECK-NEXT:  local.get       054; CHECK-NEXT:  table.set       funcref_table55; CHECK-NEXT:  end_function56  %off = add nsw i32 %i, %j57  call void @llvm.wasm.table.set.funcref(ptr addrspace(1) @funcref_table, i32 %off, %funcref %g)58  ret void59}60 61declare i32 @set_offset()62 63define void @set_funcref_table_with_var_offset2(%funcref %g, i32 %i) {64; CHECK-LABEL: set_funcref_table_with_var_offset2:65; CHECK-NEXT:  .functype       set_funcref_table_with_var_offset2 (funcref, i32) -> ()66; CHECK-NEXT:  local.get       167; CHECK-NEXT:  call    set_offset68; CHECK-NEXT:  i32.add69; CHECK-NEXT:  local.get       070; CHECK-NEXT:  table.set       funcref_table71; CHECK-NEXT:  end_function72  %j = call i32 @set_offset()73  %off = add nsw i32 %i, %j74  call void @llvm.wasm.table.set.funcref(ptr addrspace(1) @funcref_table, i32 %off, %funcref %g)75  ret void76}77 78;       CHECK: .tabletype funcref_table, funcref79; CHECK-LABEL: funcref_table:80