[llvm] [AMDGPU] Mark workgroup_id intrinsics always uniform (PR #102042)
Stanislav Mekhanoshin via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 5 12:17:39 PDT 2024
https://github.com/rampitec created https://github.com/llvm/llvm-project/pull/102042
None
>From c20660a05b10d521b55a362f9e110120d58c3e45 Mon Sep 17 00:00:00 2001
From: Stanislav Mekhanoshin <Stanislav.Mekhanoshin at amd.com>
Date: Mon, 5 Aug 2024 12:16:04 -0700
Subject: [PATCH] [AMDGPU] Mark workgroup_id intrinsics always uniform
---
.../Target/AMDGPU/AMDGPUSearchableTables.td | 3 +++
.../AMDGPU/always_uniform.ll | 27 +++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
index a323f63767737..80ca30829032d 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
@@ -378,3 +378,6 @@ def : AlwaysUniform<int_amdgcn_icmp>;
def : AlwaysUniform<int_amdgcn_fcmp>;
def : AlwaysUniform<int_amdgcn_ballot>;
def : AlwaysUniform<int_amdgcn_if_break>;
+def : AlwaysUniform<int_amdgcn_workgroup_id_x>;
+def : AlwaysUniform<int_amdgcn_workgroup_id_y>;
+def : AlwaysUniform<int_amdgcn_workgroup_id_z>;
diff --git a/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll b/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
index d7d8d29fbfd42..80ffc315ab3bb 100644
--- a/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
+++ b/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
@@ -79,11 +79,38 @@ define void @no_divergent_args_if_inreg(i32 inreg %i32, i1 inreg %i1) {
ret void
}
+; CHECK-LABEL: for function 'workgroup_id_x':
+; CHECK: ALL VALUES UNIFORM
+define void @workgroup_id_x(ptr addrspace(1) inreg %out) {
+ %result = call i32 @llvm.amdgcn.workgroup.id.x()
+ store i32 %result, ptr addrspace(1) %out, align 4
+ ret void
+}
+
+; CHECK-LABEL: for function 'workgroup_id_y':
+; CHECK: ALL VALUES UNIFORM
+define void @workgroup_id_y(ptr addrspace(1) inreg %out) {
+ %result = call i32 @llvm.amdgcn.workgroup.id.y()
+ store i32 %result, ptr addrspace(1) %out, align 4
+ ret void
+}
+
+; CHECK-LABEL: for function 'workgroup_id_z':
+; CHECK: ALL VALUES UNIFORM
+define void @workgroup_id_z(ptr addrspace(1) inreg %out) {
+ %result = call i32 @llvm.amdgcn.workgroup.id.z()
+ store i32 %result, ptr addrspace(1) %out, align 4
+ ret void
+}
+
declare i32 @llvm.amdgcn.workitem.id.x() #0
declare i32 @llvm.amdgcn.readfirstlane(i32) #0
declare i64 @llvm.amdgcn.icmp.i32(i32, i32, i32) #1
declare i64 @llvm.amdgcn.fcmp.i32(float, float, i32) #1
declare i64 @llvm.amdgcn.ballot.i32(i1) #1
+declare i32 @llvm.amdgcn.workgroup.id.x() #0
+declare i32 @llvm.amdgcn.workgroup.id.y() #0
+declare i32 @llvm.amdgcn.workgroup.id.z() #0
attributes #0 = { nounwind readnone }
attributes #1 = { nounwind readnone convergent }
More information about the llvm-commits
mailing list