[llvm] [AMDGPU] Mark s_get_*_barrier_state intrinsics always uniform (PR #192190)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 14 23:33:58 PDT 2026
https://github.com/vangthao95 created https://github.com/llvm/llvm-project/pull/192190
Both intrinsics return a 32-bit SGPR value containing the barrier's member count and signal count.
>From e2984a00ee74e0126793294de06ca8388a25d65b Mon Sep 17 00:00:00 2001
From: Vang Thao <Vang.Thao at amd.com>
Date: Wed, 15 Apr 2026 01:22:02 -0400
Subject: [PATCH] [AMDGPU] Mark s_get_*_barrier_state intrinsics always uniform
Both intrinsics return a 32-bit SGPR value containing the barrier's
member count and signal count.
---
llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td | 2 ++
.../UniformityAnalysis/AMDGPU/always_uniform.ll | 16 ++++++++++++++++
2 files changed, 18 insertions(+)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
index 4cb200cd51e51..65757a643663b 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
@@ -413,6 +413,8 @@ def : AlwaysUniform<int_amdgcn_workgroup_id_x>;
def : AlwaysUniform<int_amdgcn_workgroup_id_y>;
def : AlwaysUniform<int_amdgcn_workgroup_id_z>;
def : AlwaysUniform<int_amdgcn_s_alloc_vgpr>;
+def : AlwaysUniform<int_amdgcn_s_get_barrier_state>;
+def : AlwaysUniform<int_amdgcn_s_get_named_barrier_state>;
def : AlwaysUniform<int_amdgcn_s_getpc>;
def : AlwaysUniform<int_amdgcn_s_getreg>;
def : AlwaysUniform<int_amdgcn_s_memrealtime>;
diff --git a/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll b/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
index e649dd9a7ef6f..0fab1395ffc6e 100644
--- a/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
+++ b/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
@@ -119,6 +119,22 @@ define void @s_getreg(ptr addrspace(1) inreg %out) {
ret void
}
+; CHECK-LABEL: for function 's_get_barrier_state':
+; CHECK: DIVERGENT: i32 %bar
+; CHECK-NOT: DIVERGENT
+define i32 @s_get_barrier_state(i32 %bar) {
+ %result = call i32 @llvm.amdgcn.s.get.barrier.state(i32 %bar)
+ ret i32 %result
+}
+
+; CHECK-LABEL: for function 's_get_named_barrier_state':
+; CHECK: DIVERGENT: ptr addrspace(3) %bar
+; CHECK-NOT: DIVERGENT
+define i32 @s_get_named_barrier_state(ptr addrspace(3) %bar) {
+ %result = call i32 @llvm.amdgcn.s.get.named.barrier.state(ptr addrspace(3) %bar)
+ ret i32 %result
+}
+
; CHECK-LABEL: for function 'cluster_workgroup_id_x':
; CHECK: ALL VALUES UNIFORM
define void @cluster_workgroup_id_x(ptr addrspace(1) inreg %out) {
More information about the llvm-commits
mailing list