| ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV |
| ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %} |
| |
| ; Check a real (non-null) event_t reloaded from a stack slot is dereferenced |
| ; to OpTypeEvent before being used as an OpGroupAsyncCopy Event operand. |
| |
| ; CHECK-SPIRV-DAG: %[[#EventTy:]] = OpTypeEvent |
| ; CHECK-SPIRV-DAG: %[[#EventPtrTy:]] = OpTypePointer Function %[[#EventTy]] |
| ; CHECK-SPIRV: %[[#EventVar:]] = OpBitcast %[[#EventPtrTy]] |
| ; CHECK-SPIRV: %[[#FirstEvent:]] = OpGroupAsyncCopy %[[#EventTy]] |
| ; CHECK-SPIRV: OpStore %[[#EventVar]] %[[#FirstEvent]] |
| ; CHECK-SPIRV: %[[#ReloadedPtr:]] = OpLoad %[[#EventPtrTy]] |
| ; CHECK-SPIRV: %[[#ReloadedEvent:]] = OpLoad %[[#EventTy]] %[[#ReloadedPtr]] |
| ; CHECK-SPIRV: OpGroupAsyncCopy %[[#EventTy]] %[[#]] %[[#]] %[[#]] %[[#]] %[[#]] %[[#ReloadedEvent]] |
| |
| %opencl.event_t = type opaque |
| |
| define spir_kernel void @foo(ptr addrspace(1) %src, ptr addrspace(3) %dst) { |
| entry: |
| %event = alloca ptr, align 4 |
| %call1 = call spir_func ptr @_Z21async_work_group_copyPU3AS1Dv2_cPKU3AS3S_j9ocl_event(ptr addrspace(1) %src, ptr addrspace(3) %dst, i32 4, ptr null) |
| store ptr %call1, ptr %event, align 4 |
| %reloaded = load ptr, ptr %event, align 4 |
| %call2 = call spir_func ptr @_Z21async_work_group_copyPU3AS1Dv2_cPKU3AS3S_j9ocl_event(ptr addrspace(1) %src, ptr addrspace(3) %dst, i32 4, ptr %reloaded) |
| ret void |
| } |
| |
| declare spir_func ptr @_Z21async_work_group_copyPU3AS1Dv2_cPKU3AS3S_j9ocl_event(ptr addrspace(1), ptr addrspace(3), i32, ptr) |