xref: /llvm-project/llvm/test/CodeGen/SPIRV/hlsl-intrinsics/SV_GroupID.ll (revision 7a761100960c0c9e2b2fa8a9ee233b137270bd73)
1; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv-vulkan-unknown %s -o - | FileCheck %s
2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-vulkan-unknown %s -o - -filetype=obj | spirv-val %}
3
4; CHECK-DAG:        %[[#int:]] = OpTypeInt 32 0
5; CHECK-DAG:        %[[#v3int:]] = OpTypeVector %[[#int]] 3
6; CHECK-DAG:        %[[#ptr_Input_v3int:]] = OpTypePointer Input %[[#v3int]]
7; CHECK-DAG:        %[[#tempvar:]] = OpUndef %[[#v3int]]
8; CHECK-DAG:        %[[#WorkgroupId:]] = OpVariable %[[#ptr_Input_v3int]] Input
9
10; CHECK-DAG:        OpEntryPoint GLCompute {{.*}} %[[#WorkgroupId]]
11; CHECK-DAG:        OpName %[[#WorkgroupId]] "__spirv_BuiltInWorkgroupId"
12; CHECK-DAG:        OpDecorate %[[#WorkgroupId]] LinkageAttributes "__spirv_BuiltInWorkgroupId" Import
13; CHECK-DAG:        OpDecorate %[[#WorkgroupId]] BuiltIn WorkgroupId
14
15target triple = "spirv-unknown-vulkan-library"
16
17declare void @group_id_user(<3 x i32>)
18
19; Function Attrs: convergent noinline norecurse
20define void @main() #1 {
21entry:
22
23; CHECK:        %[[#load:]] = OpLoad %[[#v3int]] %[[#WorkgroupId]]
24; CHECK:        %[[#load0:]] = OpCompositeExtract %[[#int]] %[[#load]] 0
25  %1 = call i32 @llvm.spv.group.id(i32 0)
26
27; CHECK:        %[[#tempvar:]] = OpCompositeInsert %[[#v3int]] %[[#load0]] %[[#tempvar]]
28  %2 = insertelement <3 x i32> poison, i32 %1, i64 0
29
30; CHECK:        %[[#load:]] = OpLoad %[[#v3int]] %[[#WorkgroupId]]
31; CHECK:        %[[#load1:]] = OpCompositeExtract %[[#int]] %[[#load]] 1
32  %3 = call i32 @llvm.spv.group.id(i32 1)
33
34; CHECK:        %[[#tempvar:]] = OpCompositeInsert %[[#v3int]] %[[#load1]] %[[#tempvar]] 1
35  %4 = insertelement <3 x i32> %2, i32 %3, i64 1
36
37; CHECK:        %[[#load:]] = OpLoad %[[#v3int]] %[[#WorkgroupId]]
38; CHECK:        %[[#load2:]] = OpCompositeExtract %[[#int]] %[[#load]] 2
39  %5 = call i32 @llvm.spv.group.id(i32 2)
40
41; CHECK:        %[[#tempvar:]] = OpCompositeInsert %[[#v3int]] %[[#load2]] %[[#tempvar]] 2
42  %6 = insertelement <3 x i32> %4, i32 %5, i64 2
43
44  call spir_func void @group_id_user(<3 x i32> %6)
45  ret void
46}
47
48; Function Attrs: nounwind willreturn memory(none)
49declare i32 @llvm.spv.group.id(i32) #3
50
51attributes #1 = { convergent noinline norecurse "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
52attributes #3 = { nounwind willreturn memory(none) }
53