Skip to content

Commit e32536e

Browse files
committed
AMDGPU: Add some leaf intrinsics to isAlwaysUniform
These would always be uniform anyway, but it shouldn't hurt to mark them as always uniform. This will help use TTI::isAlwaysUniform in place of proper uniformity analysis in trivial situations.
1 parent 5bc99fb commit e32536e

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,3 +378,7 @@ 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_s_getpc>;
382+
def : AlwaysUniform<int_amdgcn_s_getreg>;
383+
def : AlwaysUniform<int_amdgcn_s_memrealtime>;
384+
def : AlwaysUniform<int_amdgcn_s_memtime>;

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

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

82+
; CHECK-LABEL: for function 's_getpc':
83+
; CHECK: ALL VALUES UNIFORM
84+
define void @s_getpc(ptr addrspace(1) inreg %out) {
85+
%result = call i64 @llvm.amdgcn.s.getpc()
86+
store i64 %result, ptr addrspace(1) %out, align 8
87+
ret void
88+
}
89+
90+
; CHECK-LABEL: for function 's_getreg':
91+
; CHECK: ALL VALUES UNIFORM
92+
define void @s_getreg(ptr addrspace(1) inreg %out) {
93+
%result = call i32 @llvm.amdgcn.s.getreg(i32 123)
94+
store i32 %result, ptr addrspace(1) %out, align 4
95+
ret void
96+
}
97+
98+
; CHECK-LABEL: for function 's_memtime':
99+
; CHECK: ALL VALUES UNIFORM
100+
define void @s_memtime(ptr addrspace(1) inreg %out) {
101+
%result = call i64 @llvm.amdgcn.s.memtime()
102+
store i64 %result, ptr addrspace(1) %out, align 8
103+
ret void
104+
}
105+
106+
; CHECK-LABEL: for function 's_memrealtime':
107+
; CHECK: ALL VALUES UNIFORM
108+
define void @s_memrealtime(ptr addrspace(1) inreg %out) {
109+
%result = call i64 @llvm.amdgcn.s.memrealtime()
110+
store i64 %result, ptr addrspace(1) %out, align 8
111+
ret void
112+
}
113+
114+
82115
declare i32 @llvm.amdgcn.workitem.id.x() #0
83116
declare i32 @llvm.amdgcn.readfirstlane(i32) #0
84117
declare i64 @llvm.amdgcn.icmp.i32(i32, i32, i32) #1

0 commit comments

Comments
 (0)