Skip to content

Conversation

rampitec
Copy link
Collaborator

No description provided.

@rampitec rampitec requested a review from shiltian September 17, 2025 19:54
Copy link
Collaborator Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@rampitec rampitec marked this pull request as ready for review September 17, 2025 19:54
@llvmbot llvmbot added backend:AMDGPU llvm:analysis Includes value tracking, cost tables and constant folding labels Sep 17, 2025
@llvmbot
Copy link
Member

llvmbot commented Sep 17, 2025

@llvm/pr-subscribers-backend-amdgpu

Author: Stanislav Mekhanoshin (rampitec)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/159439.diff

2 Files Affected:

  • (modified) llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td (+8)
  • (modified) llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll (+72)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
index 7be18998ff6b0..2393346839707 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
@@ -398,6 +398,14 @@ 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_cluster_workgroup_id_x>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_id_y>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_id_z>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_flat_id>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_id_x>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_id_y>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_id_z>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_flat_id>;
 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 99d9e28425107..9ff670bee0f89 100644
--- a/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
+++ b/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
@@ -119,6 +119,70 @@ define void @s_getreg(ptr addrspace(1) inreg %out) {
   ret void
 }
 
+; CHECK-LABEL: for function 'cluster_workgroup_id_x':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_id_x(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.id.x()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_id_y':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_id_y(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.id.y()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_id_z':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_id_z(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.id.z()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_flat_id':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_flat_id(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.flat.id()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_max_id_x':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_max_id_x(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.max.id.x()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_max_id_y':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_max_id_y(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.max.id.y()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_max_id_z':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_max_id_z(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.max.id.z()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_max_flat_id':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_max_flat_id(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.max.flat.id()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
 ; CHECK-LABEL: for function 's_memtime':
 ; CHECK: ALL VALUES UNIFORM
 define void @s_memtime(ptr addrspace(1) inreg %out) {
@@ -144,6 +208,14 @@ 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
+declare i32 @llvm.amdgcn.cluster.workgroup.id.x()
+declare i32 @llvm.amdgcn.cluster.workgroup.id.y()
+declare i32 @llvm.amdgcn.cluster.workgroup.id.z()
+declare i32 @llvm.amdgcn.cluster.workgroup.flat.id()
+declare i32 @llvm.amdgcn.cluster.workgroup.max.id.x()
+declare i32 @llvm.amdgcn.cluster.workgroup.max.id.y()
+declare i32 @llvm.amdgcn.cluster.workgroup.max.id.z()
+declare i32 @llvm.amdgcn.cluster.workgroup.max.flat.id()
 
 attributes #0 = { nounwind readnone }
 attributes #1 = { nounwind readnone convergent }

@llvmbot
Copy link
Member

llvmbot commented Sep 17, 2025

@llvm/pr-subscribers-llvm-analysis

Author: Stanislav Mekhanoshin (rampitec)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/159439.diff

2 Files Affected:

  • (modified) llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td (+8)
  • (modified) llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll (+72)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
index 7be18998ff6b0..2393346839707 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td
@@ -398,6 +398,14 @@ 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_cluster_workgroup_id_x>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_id_y>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_id_z>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_flat_id>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_id_x>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_id_y>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_id_z>;
+def : AlwaysUniform<int_amdgcn_cluster_workgroup_max_flat_id>;
 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 99d9e28425107..9ff670bee0f89 100644
--- a/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
+++ b/llvm/test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll
@@ -119,6 +119,70 @@ define void @s_getreg(ptr addrspace(1) inreg %out) {
   ret void
 }
 
+; CHECK-LABEL: for function 'cluster_workgroup_id_x':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_id_x(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.id.x()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_id_y':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_id_y(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.id.y()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_id_z':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_id_z(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.id.z()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_flat_id':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_flat_id(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.flat.id()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_max_id_x':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_max_id_x(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.max.id.x()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_max_id_y':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_max_id_y(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.max.id.y()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_max_id_z':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_max_id_z(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.max.id.z()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
+; CHECK-LABEL: for function 'cluster_workgroup_max_flat_id':
+; CHECK: ALL VALUES UNIFORM
+define void @cluster_workgroup_max_flat_id(ptr addrspace(1) inreg %out) {
+  %result = call i32 @llvm.amdgcn.cluster.workgroup.max.flat.id()
+  store i32 %result, ptr addrspace(1) %out, align 4
+  ret void
+}
+
 ; CHECK-LABEL: for function 's_memtime':
 ; CHECK: ALL VALUES UNIFORM
 define void @s_memtime(ptr addrspace(1) inreg %out) {
@@ -144,6 +208,14 @@ 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
+declare i32 @llvm.amdgcn.cluster.workgroup.id.x()
+declare i32 @llvm.amdgcn.cluster.workgroup.id.y()
+declare i32 @llvm.amdgcn.cluster.workgroup.id.z()
+declare i32 @llvm.amdgcn.cluster.workgroup.flat.id()
+declare i32 @llvm.amdgcn.cluster.workgroup.max.id.x()
+declare i32 @llvm.amdgcn.cluster.workgroup.max.id.y()
+declare i32 @llvm.amdgcn.cluster.workgroup.max.id.z()
+declare i32 @llvm.amdgcn.cluster.workgroup.max.flat.id()
 
 attributes #0 = { nounwind readnone }
 attributes #1 = { nounwind readnone convergent }

@rampitec rampitec merged commit 4a8008c into main Sep 17, 2025
14 checks passed
@rampitec rampitec deleted the users/rampitec/09-17-_amdgpu_mark_cluster_workgroup_id__intrinsics_always_uniform branch September 17, 2025 21:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:AMDGPU llvm:analysis Includes value tracking, cost tables and constant folding
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants