[llvm] [AMDGPU] InstCombine: fold invalid calls to amdgcn intrinsics into poison values (PR #191904)
Shilei Tian via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 13 18:46:06 PDT 2026
================
@@ -749,6 +749,59 @@ GCNTTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const {
return std::nullopt;
}
+ case Intrinsic::amdgcn_dispatch_ptr: {
+ if (II.getFunction()->hasFnAttribute("amdgpu-no-dispatch-ptr"))
+ return IC.replaceInstUsesWith(II, PoisonValue::get(II.getType()));
+ return std::nullopt;
+ }
+ case Intrinsic::amdgcn_queue_ptr: {
+ if (II.getFunction()->hasFnAttribute("amdgpu-no-queue-ptr"))
+ return IC.replaceInstUsesWith(II, PoisonValue::get(II.getType()));
+ return std::nullopt;
+ }
+ case Intrinsic::amdgcn_dispatch_id: {
+ if (II.getFunction()->hasFnAttribute("amdgpu-no-dispatch-id"))
+ return IC.replaceInstUsesWith(II, PoisonValue::get(II.getType()));
+ return std::nullopt;
+ }
+ case Intrinsic::amdgcn_workgroup_id_x:
+ case Intrinsic::amdgcn_workgroup_id_y:
+ case Intrinsic::amdgcn_workgroup_id_z: {
+ StringRef Attr =
+ IID == Intrinsic::amdgcn_workgroup_id_x ? "amdgpu-no-workgroup-id-x"
+ : IID == Intrinsic::amdgcn_workgroup_id_y ? "amdgpu-no-workgroup-id-y"
+ : "amdgpu-no-workgroup-id-z";
+ if (II.getFunction()->hasFnAttribute(Attr))
+ return IC.replaceInstUsesWith(II, PoisonValue::get(II.getType()));
+ return std::nullopt;
+ }
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z: {
+ StringRef Attr =
+ IID == Intrinsic::amdgcn_workitem_id_x ? "amdgpu-no-workitem-id-x"
+ : IID == Intrinsic::amdgcn_workitem_id_y ? "amdgpu-no-workitem-id-y"
+ : "amdgpu-no-workitem-id-z";
+ if (II.getFunction()->hasFnAttribute(Attr))
+ return IC.replaceInstUsesWith(II, PoisonValue::get(II.getType()));
+ return std::nullopt;
+ }
+ case Intrinsic::amdgcn_lds_kernel_id: {
+ if (II.getFunction()->hasFnAttribute("amdgpu-no-lds-kernel-id"))
+ return IC.replaceInstUsesWith(II, PoisonValue::get(II.getType()));
+ return std::nullopt;
+ }
+ case Intrinsic::amdgcn_cluster_id_x:
+ case Intrinsic::amdgcn_cluster_id_y:
+ case Intrinsic::amdgcn_cluster_id_z: {
+ StringRef Attr =
+ IID == Intrinsic::amdgcn_cluster_id_x ? "amdgpu-no-cluster-id-x"
+ : IID == Intrinsic::amdgcn_cluster_id_y ? "amdgpu-no-cluster-id-y"
+ : "amdgpu-no-cluster-id-z";
+ if (II.getFunction()->hasFnAttribute(Attr))
----------------
shiltian wrote:
If a target doesn't support cluster, we might also want to replace them with poison.
https://github.com/llvm/llvm-project/pull/191904
More information about the llvm-commits
mailing list