Skip to content

Commit bbe0663

Browse files
authored
[AMDGPU] Mark workgroup_id intrinsics always uniform (#102042)
1 parent 1fb1a5d commit bbe0663

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,3 +378,6 @@ def : AlwaysUniform<int_amdgcn_icmp>;
378378
def : AlwaysUniform<int_amdgcn_fcmp>;
379379
def : AlwaysUniform<int_amdgcn_ballot>;
380380
def : AlwaysUniform<int_amdgcn_if_break>;
381+
def : AlwaysUniform<int_amdgcn_workgroup_id_x>;
382+
def : AlwaysUniform<int_amdgcn_workgroup_id_y>;
383+
def : AlwaysUniform<int_amdgcn_workgroup_id_z>;

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,38 @@ define void @no_divergent_args_if_inreg(i32 inreg %i32, i1 inreg %i1) {
7979
ret void
8080
}
8181

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+
82106
declare i32 @llvm.amdgcn.workitem.id.x() #0
83107
declare i32 @llvm.amdgcn.readfirstlane(i32) #0
84108
declare i64 @llvm.amdgcn.icmp.i32(i32, i32, i32) #1
85109
declare i64 @llvm.amdgcn.fcmp.i32(float, float, i32) #1
86110
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
87114

88115
attributes #0 = { nounwind readnone }
89116
attributes #1 = { nounwind readnone convergent }

0 commit comments

Comments
 (0)