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