brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 37c6638 Raw
94 lines · plain
1; RUN: llc --mtriple=wasm32-unknown-unknown -asm-verbose=false -mattr=+reference-types < %s | FileCheck %s2 3%externref = type ptr addrspace(10) ;; addrspace 10 is nonintegral4 5@externref_table = local_unnamed_addr addrspace(1) global [0 x %externref] undef6 7declare void @llvm.wasm.table.set.externref(ptr addrspace(1), i32, %externref) nounwind8 9define void @set_externref_table(%externref %g, i32 %i) {10; CHECK-LABEL: set_externref_table:11; CHECK-NEXT: .functype       set_externref_table (externref, i32) -> ()12; CHECK-NEXT: local.get      113; CHECK-NEXT: local.get      014; CHECK-NEXT: table.set     externref_table15; CHECK-NEXT: end_function16 17;; this generates a table.set of @externref_table18  call void @llvm.wasm.table.set.externref(ptr addrspace(1) @externref_table, i32 %i, %externref %g)19  ret void20}21 22define void @set_externref_table_const(%externref %g) {23; CHECK-LABEL: set_externref_table_const:24; CHECK-NEXT:  .functype      set_externref_table_const (externref) -> ()25; CHECK-NEXT:  i32.const      026; CHECK-NEXT:  local.get      027; CHECK-NEXT:  table.set      externref_table28; CHECK-NEXT:  end_function29  call void @llvm.wasm.table.set.externref(ptr addrspace(1) @externref_table, i32 0, %externref %g)30  ret void31}32 33define void @set_externref_table_with_offset(%externref %g, i32 %i) {34; CHECK-LABEL: set_externref_table_with_offset:35; CHECK-NEXT:  .functype       set_externref_table_with_offset (externref, 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       externref_table41; CHECK-NEXT:  end_function42  %off = add nsw i32 %i, 243  call void @llvm.wasm.table.set.externref(ptr addrspace(1) @externref_table, i32 %off, %externref %g)44  ret void45}46 47define void @set_externref_table_with_var_offset(%externref %g, i32 %i, i32 %j) {48; CHECK-LABEL: set_externref_table_with_var_offset:49; CHECK-NEXT:  .functype       set_externref_table_with_var_offset (externref, 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       externref_table55; CHECK-NEXT:  end_function56  %off = add nsw i32 %i, %j57  call void @llvm.wasm.table.set.externref(ptr addrspace(1) @externref_table, i32 %off, %externref %g)58  ret void59}60 61declare i32 @set_offset()62 63define void @set_externref_table_with_var_offset2(%externref %g, i32 %i) {64; CHECK-LABEL: set_externref_table_with_var_offset2:65; CHECK-NEXT:  .functype       set_externref_table_with_var_offset2 (externref, 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       externref_table71; CHECK-NEXT:  end_function72  %j = call i32 @set_offset()73  %off = add nsw i32 %i, %j74  call void @llvm.wasm.table.set.externref(ptr addrspace(1) @externref_table, i32 %off, %externref %g)75  ret void76}77 78declare i32 @get_table_slot() local_unnamed_addr79 80define void @set_externref_table_with_id_from_call(%externref %g) {81; CHECK-LABEL: set_externref_table_with_id_from_call:82; CHECK-NEXT:  .functype       set_externref_table_with_id_from_call (externref) -> ()83; CHECK-NEXT:  call    get_table_slot84; CHECK-NEXT:  local.get       085; CHECK-NEXT:  table.set       externref_table86; CHECK-NEXT:  end_function87  %id = call i32 @get_table_slot()88  call void @llvm.wasm.table.set.externref(ptr addrspace(1) @externref_table, i32 %id, %externref %g)89  ret void90}91 92;       CHECK: .tabletype externref_table, externref93; CHECK-LABEL: externref_table:94