@@ -79,11 +79,38 @@ define void @no_divergent_args_if_inreg(i32 inreg %i32, i1 inreg %i1) {
79
79
ret void
80
80
}
81
81
82
+ ; CHECK-LABEL: for function 'workgroup_id_x':
83
+ ; CHECK: ALL VALUES UNIFORM
84
+ define void @workgroup_id_x (ptr addrspace (1 ) inreg %out ) {
85
+ %result = call i32 @llvm.amdgcn.workgroup.id.x ()
86
+ store i32 %result , ptr addrspace (1 ) %out , align 4
87
+ ret void
88
+ }
89
+
90
+ ; CHECK-LABEL: for function 'workgroup_id_y':
91
+ ; CHECK: ALL VALUES UNIFORM
92
+ define void @workgroup_id_y (ptr addrspace (1 ) inreg %out ) {
93
+ %result = call i32 @llvm.amdgcn.workgroup.id.y ()
94
+ store i32 %result , ptr addrspace (1 ) %out , align 4
95
+ ret void
96
+ }
97
+
98
+ ; CHECK-LABEL: for function 'workgroup_id_z':
99
+ ; CHECK: ALL VALUES UNIFORM
100
+ define void @workgroup_id_z (ptr addrspace (1 ) inreg %out ) {
101
+ %result = call i32 @llvm.amdgcn.workgroup.id.z ()
102
+ store i32 %result , ptr addrspace (1 ) %out , align 4
103
+ ret void
104
+ }
105
+
82
106
declare i32 @llvm.amdgcn.workitem.id.x () #0
83
107
declare i32 @llvm.amdgcn.readfirstlane (i32 ) #0
84
108
declare i64 @llvm.amdgcn.icmp.i32 (i32 , i32 , i32 ) #1
85
109
declare i64 @llvm.amdgcn.fcmp.i32 (float , float , i32 ) #1
86
110
declare i64 @llvm.amdgcn.ballot.i32 (i1 ) #1
111
+ declare i32 @llvm.amdgcn.workgroup.id.x () #0
112
+ declare i32 @llvm.amdgcn.workgroup.id.y () #0
113
+ declare i32 @llvm.amdgcn.workgroup.id.z () #0
87
114
88
115
attributes #0 = { nounwind readnone }
89
116
attributes #1 = { nounwind readnone convergent }
0 commit comments