Skip to content

Commit 4a8008c

Browse files
authored
[AMDGPU] Mark cluster_workgroup_id_* intrinsics always uniform (#159439)
1 parent 1c4c7bd commit 4a8008c

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,14 @@ def : AlwaysUniform<int_amdgcn_icmp>;
398398
def : AlwaysUniform<int_amdgcn_fcmp>;
399399
def : AlwaysUniform<int_amdgcn_ballot>;
400400
def : AlwaysUniform<int_amdgcn_if_break>;
401+
def : AlwaysUniform<int_amdgcn_cluster_workgroup_id_x>;
402+
def : AlwaysUniform<int_amdgcn_cluster_workgroup_id_y>;
403+
def : AlwaysUniform<int_amdgcn_cluster_workgroup_id_z>;
404+
def : AlwaysUniform<int_amdgcn_cluster_workgroup_flat_id>;
405+
def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_id_x>;
406+
def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_id_y>;
407+
def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_id_z>;
408+
def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_flat_id>;
401409
def : AlwaysUniform<int_amdgcn_workgroup_id_x>;
402410
def : AlwaysUniform<int_amdgcn_workgroup_id_y>;
403411
def : AlwaysUniform<int_amdgcn_workgroup_id_z>;

llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,70 @@ define void @s_getreg(ptr addrspace(1) inreg %out) {
119119
ret void
120120
}
121121

122+
; CHECK-LABEL: for function 'cluster_workgroup_id_x':
123+
; CHECK: ALL VALUES UNIFORM
124+
define void @cluster_workgroup_id_x(ptr addrspace(1) inreg %out) {
125+
%result = call i32 @llvm.amdgcn.cluster.workgroup.id.x()
126+
store i32 %result, ptr addrspace(1) %out, align 4
127+
ret void
128+
}
129+
130+
; CHECK-LABEL: for function 'cluster_workgroup_id_y':
131+
; CHECK: ALL VALUES UNIFORM
132+
define void @cluster_workgroup_id_y(ptr addrspace(1) inreg %out) {
133+
%result = call i32 @llvm.amdgcn.cluster.workgroup.id.y()
134+
store i32 %result, ptr addrspace(1) %out, align 4
135+
ret void
136+
}
137+
138+
; CHECK-LABEL: for function 'cluster_workgroup_id_z':
139+
; CHECK: ALL VALUES UNIFORM
140+
define void @cluster_workgroup_id_z(ptr addrspace(1) inreg %out) {
141+
%result = call i32 @llvm.amdgcn.cluster.workgroup.id.z()
142+
store i32 %result, ptr addrspace(1) %out, align 4
143+
ret void
144+
}
145+
146+
; CHECK-LABEL: for function 'cluster_workgroup_flat_id':
147+
; CHECK: ALL VALUES UNIFORM
148+
define void @cluster_workgroup_flat_id(ptr addrspace(1) inreg %out) {
149+
%result = call i32 @llvm.amdgcn.cluster.workgroup.flat.id()
150+
store i32 %result, ptr addrspace(1) %out, align 4
151+
ret void
152+
}
153+
154+
; CHECK-LABEL: for function 'cluster_workgroup_max_id_x':
155+
; CHECK: ALL VALUES UNIFORM
156+
define void @cluster_workgroup_max_id_x(ptr addrspace(1) inreg %out) {
157+
%result = call i32 @llvm.amdgcn.cluster.workgroup.max.id.x()
158+
store i32 %result, ptr addrspace(1) %out, align 4
159+
ret void
160+
}
161+
162+
; CHECK-LABEL: for function 'cluster_workgroup_max_id_y':
163+
; CHECK: ALL VALUES UNIFORM
164+
define void @cluster_workgroup_max_id_y(ptr addrspace(1) inreg %out) {
165+
%result = call i32 @llvm.amdgcn.cluster.workgroup.max.id.y()
166+
store i32 %result, ptr addrspace(1) %out, align 4
167+
ret void
168+
}
169+
170+
; CHECK-LABEL: for function 'cluster_workgroup_max_id_z':
171+
; CHECK: ALL VALUES UNIFORM
172+
define void @cluster_workgroup_max_id_z(ptr addrspace(1) inreg %out) {
173+
%result = call i32 @llvm.amdgcn.cluster.workgroup.max.id.z()
174+
store i32 %result, ptr addrspace(1) %out, align 4
175+
ret void
176+
}
177+
178+
; CHECK-LABEL: for function 'cluster_workgroup_max_flat_id':
179+
; CHECK: ALL VALUES UNIFORM
180+
define void @cluster_workgroup_max_flat_id(ptr addrspace(1) inreg %out) {
181+
%result = call i32 @llvm.amdgcn.cluster.workgroup.max.flat.id()
182+
store i32 %result, ptr addrspace(1) %out, align 4
183+
ret void
184+
}
185+
122186
; CHECK-LABEL: for function 's_memtime':
123187
; CHECK: ALL VALUES UNIFORM
124188
define void @s_memtime(ptr addrspace(1) inreg %out) {
@@ -144,6 +208,14 @@ declare i64 @llvm.amdgcn.ballot.i32(i1) #1
144208
declare i32 @llvm.amdgcn.workgroup.id.x() #0
145209
declare i32 @llvm.amdgcn.workgroup.id.y() #0
146210
declare i32 @llvm.amdgcn.workgroup.id.z() #0
211+
declare i32 @llvm.amdgcn.cluster.workgroup.id.x()
212+
declare i32 @llvm.amdgcn.cluster.workgroup.id.y()
213+
declare i32 @llvm.amdgcn.cluster.workgroup.id.z()
214+
declare i32 @llvm.amdgcn.cluster.workgroup.flat.id()
215+
declare i32 @llvm.amdgcn.cluster.workgroup.max.id.x()
216+
declare i32 @llvm.amdgcn.cluster.workgroup.max.id.y()
217+
declare i32 @llvm.amdgcn.cluster.workgroup.max.id.z()
218+
declare i32 @llvm.amdgcn.cluster.workgroup.max.flat.id()
147219

148220
attributes #0 = { nounwind readnone }
149221
attributes #1 = { nounwind readnone convergent }

0 commit comments

Comments
 (0)