|
| 1 | +; RUN: opt < %s -passes=sycllowerwglocalmemory -S | FileCheck %s |
| 2 | + |
| 3 | +; Check group_local_memory_for_overwrite and group_local_memory functions are inlined. |
| 4 | +; Check __sycl_allocateLocalMemory calls are lowered to four separate allocations. |
| 5 | + |
| 6 | +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64-G1" |
| 7 | +target triple = "spir64-unknown-unknown" |
| 8 | + |
| 9 | +%"class.sycl::_V1::multi_ptr" = type { ptr addrspace(3) } |
| 10 | +%"class.sycl::_V1::group" = type { %"class.sycl::_V1::range", %"class.sycl::_V1::range", %"class.sycl::_V1::range", %"class.sycl::_V1::id" } |
| 11 | +%"class.sycl::_V1::range" = type { %"class.sycl::_V1::detail::array" } |
| 12 | +%"class.sycl::_V1::detail::array" = type { [1 x i64] } |
| 13 | +%"class.sycl::_V1::id" = type { %"class.sycl::_V1::detail::array" } |
| 14 | + |
| 15 | +; CHECK: @WGLocalMem{{.*}} = internal addrspace(3) global [4 x i8] poison, align 4 |
| 16 | +; CHECK: @WGLocalMem{{.*}} = internal addrspace(3) global [4 x i8] poison, align 4 |
| 17 | +; CHECK: @WGLocalMem{{.*}} = internal addrspace(3) global [4 x i8] poison, align 4 |
| 18 | +; CHECK: @WGLocalMem{{.*}} = internal addrspace(3) global [4 x i8] poison, align 4 |
| 19 | + |
| 20 | +; Function Attrs: alwaysinline |
| 21 | +define internal spir_func void @_ZZZ4mainENKUlRN4sycl3_V17handlerEE_clES2_ENKUlNS0_7nd_itemILi1EEEE_clES5_() #0 { |
| 22 | +entry: |
| 23 | +; CHECK: define internal spir_func void @_ZZZ4mainENKUlRN4sycl3_V17handlerEE_clES2_ENKUlNS0_7nd_itemILi1EEEE_clES5_( |
| 24 | +; CHECK: store ptr addrspace(3) @WGLocalMem{{.*}}, ptr addrspace(4) %AllocatedMem{{.*}}, align 8 |
| 25 | +; CHECK: store ptr addrspace(3) @WGLocalMem{{.*}}, ptr addrspace(4) %AllocatedMem{{.*}}, align 8 |
| 26 | +; CHECK: store ptr addrspace(3) @WGLocalMem{{.*}}, ptr addrspace(4) %AllocatedMem{{.*}}, align 8 |
| 27 | +; CHECK: store ptr addrspace(3) @WGLocalMem{{.*}}, ptr addrspace(4) %AllocatedMem{{.*}}, align 8 |
| 28 | + |
| 29 | + %Ptr = alloca %"class.sycl::_V1::multi_ptr", align 8 |
| 30 | + %agg = alloca %"class.sycl::_V1::group", align 8 |
| 31 | + %Ptr.ascast = addrspacecast ptr %Ptr to ptr addrspace(4) |
| 32 | + call spir_func void @_ZN4sycl3_V13ext6oneapi32group_local_memory_for_overwriteIiNS0_5groupILi1EEEEENSt9enable_ifIXaasr3stdE27is_trivially_destructible_vIT_Esr4sycl6detail8is_groupIT0_EE5valueENS0_9multi_ptrIS7_LNS0_6access13address_spaceE3ELNSA_9decoratedE2EEEE4typeES8_(ptr addrspace(4) sret(%"class.sycl::_V1::multi_ptr") align 8 %Ptr.ascast, ptr byval(%"class.sycl::_V1::group") align 8 %agg) |
| 33 | + call spir_func void @_ZN4sycl3_V13ext6oneapi32group_local_memory_for_overwriteIiNS0_5groupILi1EEEEENSt9enable_ifIXaasr3stdE27is_trivially_destructible_vIT_Esr4sycl6detail8is_groupIT0_EE5valueENS0_9multi_ptrIS7_LNS0_6access13address_spaceE3ELNSA_9decoratedE2EEEE4typeES8_(ptr addrspace(4) sret(%"class.sycl::_V1::multi_ptr") align 8 %Ptr.ascast, ptr byval(%"class.sycl::_V1::group") align 8 %agg) |
| 34 | + call spir_func void @_ZN4sycl3_V13ext6oneapi18group_local_memoryIiNS0_5groupILi1EEEJEEENSt9enable_ifIXaasr3stdE27is_trivially_destructible_vIT_Esr4sycl6detail8is_groupIT0_EE5valueENS0_9multi_ptrIS7_LNS0_6access13address_spaceE3ELNSA_9decoratedE2EEEE4typeES8_DpOT1_(ptr addrspace(4) sret(%"class.sycl::_V1::multi_ptr") align 8 %Ptr.ascast, ptr byval(%"class.sycl::_V1::group") align 8 %agg) |
| 35 | + call spir_func void @_ZN4sycl3_V13ext6oneapi18group_local_memoryIiNS0_5groupILi1EEEJEEENSt9enable_ifIXaasr3stdE27is_trivially_destructible_vIT_Esr4sycl6detail8is_groupIT0_EE5valueENS0_9multi_ptrIS7_LNS0_6access13address_spaceE3ELNSA_9decoratedE2EEEE4typeES8_DpOT1_(ptr addrspace(4) sret(%"class.sycl::_V1::multi_ptr") align 8 %Ptr.ascast, ptr byval(%"class.sycl::_V1::group") align 8 %agg) |
| 36 | + ret void |
| 37 | +} |
| 38 | + |
| 39 | +; CHECK-NOT: define {{.*}} @_ZN4sycl3_V13ext6oneapi32group_local_memory_for_overwriteIiNS0_5groupILi1EEEEENSt9enable_ifIXaasr3stdE27is_trivially_destructible_vIT_Esr4sycl6detail8is_groupIT0_EE5valueENS0_9multi_ptrIS7_LNS0_6access13address_spaceE3ELNSA_9decoratedE2EEEE4typeES8_( |
| 40 | + |
| 41 | +; Function Attrs: alwaysinline |
| 42 | +define spir_func void @_ZN4sycl3_V13ext6oneapi32group_local_memory_for_overwriteIiNS0_5groupILi1EEEEENSt9enable_ifIXaasr3stdE27is_trivially_destructible_vIT_Esr4sycl6detail8is_groupIT0_EE5valueENS0_9multi_ptrIS7_LNS0_6access13address_spaceE3ELNSA_9decoratedE2EEEE4typeES8_(ptr addrspace(4) sret(%"class.sycl::_V1::multi_ptr") align 8 %agg.result, ptr byval(%"class.sycl::_V1::group") align 8 %g) #1 { |
| 43 | +entry: |
| 44 | + %AllocatedMem = alloca ptr addrspace(3), align 8 |
| 45 | + %AllocatedMem.ascast = addrspacecast ptr %AllocatedMem to ptr addrspace(4) |
| 46 | + %call = call spir_func ptr addrspace(3) @__sycl_allocateLocalMemory(i64 4, i64 4) |
| 47 | + store ptr addrspace(3) %call, ptr addrspace(4) %AllocatedMem.ascast, align 8 |
| 48 | + ret void |
| 49 | +} |
| 50 | + |
| 51 | +; CHECK-NOT: define {{.*}} @_ZN4sycl3_V13ext6oneapi18group_local_memoryIiNS0_5groupILi1EEEJEEENSt9enable_ifIXaasr3stdE27is_trivially_destructible_vIT_Esr4sycl6detail8is_groupIT0_EE5valueENS0_9multi_ptrIS7_LNS0_6access13address_spaceE3ELNSA_9decoratedE2EEEE4typeES8_DpOT1_( |
| 52 | + |
| 53 | +; Function Attrs: alwaysinline |
| 54 | +define spir_func void @_ZN4sycl3_V13ext6oneapi18group_local_memoryIiNS0_5groupILi1EEEJEEENSt9enable_ifIXaasr3stdE27is_trivially_destructible_vIT_Esr4sycl6detail8is_groupIT0_EE5valueENS0_9multi_ptrIS7_LNS0_6access13address_spaceE3ELNSA_9decoratedE2EEEE4typeES8_DpOT1_(ptr addrspace(4) sret(%"class.sycl::_V1::multi_ptr") align 8 %agg.result, ptr byval(%"class.sycl::_V1::group") align 8 %g) #1 { |
| 55 | +entry: |
| 56 | + %AllocatedMem = alloca ptr addrspace(3), align 8 |
| 57 | + %AllocatedMem.ascast = addrspacecast ptr %AllocatedMem to ptr addrspace(4) |
| 58 | + %call = call spir_func ptr addrspace(3) @__sycl_allocateLocalMemory(i64 4, i64 4) |
| 59 | + store ptr addrspace(3) %call, ptr addrspace(4) %AllocatedMem.ascast, align 8 |
| 60 | + ret void |
| 61 | +} |
| 62 | + |
| 63 | +declare spir_func ptr addrspace(3) @__sycl_allocateLocalMemory(i64 noundef, i64 noundef) |
| 64 | + |
| 65 | +attributes #0 = { alwaysinline } |
| 66 | +attributes #1 = { "sycl-forceinline"="true" } |
0 commit comments