66 lines · plain
1; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv-vulkan-library %s -o - | FileCheck %s2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-vulkan-library %s -o - -filetype=obj | spirv-val --target-env vulkan1.3 %}3 4; ModuleID = 'test_counters.hlsl'5source_filename = "test_counters.hlsl"6 7; CHECK: OpCapability Int88; CHECK-DAG: OpName [[OutputBuffer:%[0-9]+]] "OutputBuffer"9; CHECK-DAG: OpName [[InputBuffer:%[0-9]+]] "InputBuffer"10; CHECK-DAG: OpName [[OutputBufferCounter:%[0-9]+]] "OutputBuffer.counter"11; CHECK-DAG: OpName [[InputBufferCounter:%[0-9]+]] "InputBuffer.counter"12; CHECK-DAG: OpDecorate [[OutputBuffer]] DescriptorSet 013; CHECK-DAG: OpDecorate [[OutputBuffer]] Binding 1014; CHECK-DAG: OpDecorate [[OutputBufferCounter]] DescriptorSet 015; CHECK-DAG: OpDecorate [[OutputBufferCounter]] Binding 016; CHECK-DAG: OpDecorate [[InputBuffer]] DescriptorSet 017; CHECK-DAG: OpDecorate [[InputBuffer]] Binding 118; CHECK-DAG: OpDecorate [[InputBufferCounter]] DescriptorSet 019; CHECK-DAG: OpDecorate [[InputBufferCounter]] Binding 220; CHECK-DAG: [[int:%[0-9]+]] = OpTypeInt 32 021; CHECK-DAG: [[zero:%[0-9]+]] = OpConstant [[int]] 0{{$}}22; CHECK-DAG: [[one:%[0-9]+]] = OpConstant [[int]] 1{{$}}23; CHECK-DAG: [[minus_one:%[0-9]+]] = OpConstant [[int]] 429496729524; CHECK: [[OutputBufferHandle:%[0-9]+]] = OpCopyObject {{%[0-9]+}} [[OutputBuffer]]25; CHECK: [[InputBufferHandle:%[0-9]+]] = OpCopyObject {{%[0-9]+}} [[InputBuffer]]26; CHECK: [[InputCounterAC:%[0-9]+]] = OpAccessChain {{%[0-9]+}} [[InputBufferCounter]] [[zero]]27; CHECK: [[dec:%[0-9]+]] = OpAtomicIAdd [[int]] [[InputCounterAC]] [[one]] [[zero]] [[minus_one]]28; CHECK: [[iadd:%[0-9]+]] = OpIAdd [[int]] [[dec]] [[minus_one]]29; CHECK: [[OutputCounterAC:%[0-9]+]] = OpAccessChain {{%[0-9]+}} [[OutputBufferCounter]] [[zero]]30; CHECK: [[inc:%[0-9]+]] = OpAtomicIAdd [[int]] [[OutputCounterAC]] [[one]] [[zero]] [[one]]31; CHECK: [[InputAC:%[0-9]+]] = OpAccessChain {{%[0-9]+}} [[InputBufferHandle]] [[zero]] [[iadd]]32; CHECK: [[load:%[0-9]+]] = OpLoad {{%[0-9]+}} [[InputAC]]33; CHECK: [[OutputAC:%[0-9]+]] = OpAccessChain {{%[0-9]+}} [[OutputBufferHandle]] [[zero]] [[inc]]34; CHECK: OpStore [[OutputAC]] [[load]]35 36 37target triple = "spirv1.6-unknown-vulkan1.3-compute"38 39@.str = private unnamed_addr constant [13 x i8] c"OutputBuffer\00"40@.str.2 = private unnamed_addr constant [12 x i8] c"InputBuffer\00"41 42define void @main() #0 {43entry:44 %0 = call target("spirv.VulkanBuffer", [0 x float], 12, 1) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0f32_12_1t(i32 0, i32 10, i32 1, i32 0, ptr @.str)45 %1 = call target("spirv.VulkanBuffer", i32, 12, 1) @llvm.spv.resource.counterhandlefromimplicitbinding.tspirv.VulkanBuffer_i32_12_1t.tspirv.VulkanBuffer_a0f32_12_1t(target("spirv.VulkanBuffer", [0 x float], 12, 1) %0, i32 0, i32 0)46 %2 = call target("spirv.VulkanBuffer", [0 x float], 12, 1) @llvm.spv.resource.handlefromimplicitbinding.tspirv.VulkanBuffer_a0f32_12_1t(i32 1, i32 0, i32 1, i32 0, ptr @.str.2)47 %3 = call target("spirv.VulkanBuffer", i32, 12, 1) @llvm.spv.resource.counterhandlefromimplicitbinding.tspirv.VulkanBuffer_i32_12_1t.tspirv.VulkanBuffer_a0f32_12_1t(target("spirv.VulkanBuffer", [0 x float], 12, 1) %2, i32 2, i32 0)48 %4 = call i32 @llvm.spv.resource.updatecounter.tspirv.VulkanBuffer_i32_12_1t(target("spirv.VulkanBuffer", i32, 12, 1) %3, i8 -1)49 %5 = call i32 @llvm.spv.resource.updatecounter.tspirv.VulkanBuffer_i32_12_1t(target("spirv.VulkanBuffer", i32, 12, 1) %1, i8 1)50 %6 = call ptr addrspace(11) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0f32_12_1t(target("spirv.VulkanBuffer", [0 x float], 12, 1) %2, i32 %4)51 %7 = load float, ptr addrspace(11) %652 %8 = call ptr addrspace(11) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0f32_12_1t(target("spirv.VulkanBuffer", [0 x float], 12, 1) %0, i32 %5)53 store float %7, ptr addrspace(11) %854 ret void55}56 57declare target("spirv.VulkanBuffer", [0 x float], 12, 1) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0f32_12_1t(i32, i32, i32, i32, ptr) #158declare target("spirv.VulkanBuffer", i32, 12, 1) @llvm.spv.resource.counterhandlefromimplicitbinding.tspirv.VulkanBuffer_i32_12_1t.tspirv.VulkanBuffer_a0f32_12_1t(target("spirv.VulkanBuffer", [0 x float], 12, 1), i32, i32) #159declare target("spirv.VulkanBuffer", [0 x float], 12, 1) @llvm.spv.resource.handlefromimplicitbinding.tspirv.VulkanBuffer_a0f32_12_1t(i32, i32, i32, i32, ptr) #160declare i32 @llvm.spv.resource.updatecounter.tspirv.VulkanBuffer_i32_12_1t(target("spirv.VulkanBuffer", i32, 12, 1), i8) #261declare ptr addrspace(11) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0f32_12_1t(target("spirv.VulkanBuffer", [0 x float], 12, 1), i32) #162 63attributes #0 = { "hlsl.shader"="compute" "hlsl.numthreads"="1,1,1" }64attributes #1 = { memory(none) }65attributes #2 = { memory(argmem: readwrite, inaccessiblemem: readwrite) }66