| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llc -verify-machineinstrs -O3 -mtriple=spirv1.6-unknown-vulkan1.3-compute %s -o - | FileCheck %s |
| ; RUN: %if spirv-tools %{ llc -O3 -mtriple=spirv1.6-unknown-vulkan1.3-compute %s -o - -filetype=obj | spirv-val %} |
| |
| ; StructuredBuffer<int4> In : register(t0); |
| ; RWStructuredBuffer<int4> Out : register(u1); |
| ; |
| ; [numthreads(1,1,1)] |
| ; void main() { |
| ; Out[0].y = In[0].y; |
| ; } |
| |
| @.str = private unnamed_addr constant [3 x i8] c"In\00", align 1 |
| @.str.2 = private unnamed_addr constant [4 x i8] c"Out\00", align 1 |
| |
| define void @main() local_unnamed_addr #0 { |
| ; CHECK-LABEL: main |
| ; CHECK: %33 = OpFunction %2 None %3 ; -- Begin function main |
| ; CHECK-NEXT: %1 = OpLabel |
| ; CHECK-NEXT: %34 = OpVariable %20 Function %29 |
| ; CHECK-NEXT: %35 = OpVariable %19 Function %30 |
| ; CHECK-NEXT: %36 = OpCopyObject %12 %31 |
| ; CHECK-NEXT: %37 = OpCopyObject %10 %32 |
| ; CHECK-NEXT: %38 = OpAccessChain %7 %36 %21 %21 |
| ; CHECK-NEXT: %39 = OpLoad %6 %38 Aligned 16 |
| ; CHECK-NEXT: %40 = OpCompositeExtract %4 %39 1 |
| ; CHECK-NEXT: %41 = OpAccessChain %7 %37 %21 %21 |
| ; CHECK-NEXT: %42 = OpInBoundsAccessChain %5 %41 %22 |
| ; CHECK-NEXT: OpStore %42 %40 Aligned 4 |
| ; CHECK-NEXT: OpReturn |
| ; CHECK-NEXT: OpFunctionEnd |
| entry: |
| %0 = tail call target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v4i32_12_0t(i32 0, i32 0, i32 1, i32 0, ptr nonnull @.str) |
| %1 = tail call target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 1) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v4i32_12_1t(i32 0, i32 1, i32 1, i32 0, ptr nonnull @.str.2) |
| %2 = tail call noundef align 16 dereferenceable(16) ptr addrspace(11) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0v4i32_12_0t(target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) %0, i32 0) |
| %3 = load <4 x i32>, ptr addrspace(11) %2, align 16 |
| %4 = extractelement <4 x i32> %3, i64 1 |
| %5 = tail call noundef align 16 dereferenceable(16) ptr addrspace(11) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0v4i32_12_1t(target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 1) %1, i32 0) |
| %6 = getelementptr inbounds nuw i8, ptr addrspace(11) %5, i64 4 |
| store i32 %4, ptr addrspace(11) %6, align 4 |
| ret void |
| } |
| |
| !0 = !{i32 1, !"wchar_size", i32 4} |