[llvm] RE: [AMDGPU] InstCombine: fold invalid calls to amdgcn intrinsics into poison values… (PR #196151)
Steffen Larsen via llvm-commits
llvm-commits at lists.llvm.org
Wed May 6 23:22:50 PDT 2026
================
----------------
steffenlarsen wrote:
The pattern is a little repetitive. I'd suggest adding
```c++
static StringRef getAMDGPUConflictFuncAttrForIntrinsic(Intrinsic::ID IID) {
switch (IID) {
case Intrinsic::amdgcn_dispatch_ptr:
return "amdgpu-no-dispatch-ptr";
case Intrinsic::amdgcn_queue_ptr:
return "amdgpu-no-queue-ptr";
case Intrinsic::amdgcn_dispatch_id:
return "amdgpu-no-dispatch-id";
case Intrinsic::amdgcn_workgroup_id_x:
return "amdgpu-no-workgroup-id-x";
case Intrinsic::amdgcn_workgroup_id_y:
return "amdgpu-no-workgroup-id-y";
case Intrinsic::amdgcn_workgroup_id_z:
return "amdgpu-no-workgroup-id-z";
case Intrinsic::amdgcn_workitem_id_x:
return "amdgpu-no-workitem-id-x";
case Intrinsic::amdgcn_workitem_id_y:
return "amdgpu-no-workitem-id-y";
case Intrinsic::amdgcn_workitem_id_z:
return "amdgpu-no-workitem-id-z";
case Intrinsic::amdgcn_lds_kernel_id:
return "amdgpu-no-lds-kernel-id";
case Intrinsic::amdgcn_cluster_id_x:
return "amdgpu-no-cluster-id-x";
case Intrinsic::amdgcn_cluster_id_y:
return "amdgpu-no-cluster-id-y";
case Intrinsic::amdgcn_cluster_id_z:
return "amdgpu-no-cluster-id-z";
default:
llvm_unreachable("unexpected intrinsic");
return StringRef();
}
}
static std::optional<Instruction *>
getPoisonedAMDGPUIntrinsicReplacement(Instruction &II, InstCombiner &IC) {
Intrinsic::ID IID = II.getIntrinsicID();
StringRef ConflictAttr = getAMDGPUConflictFuncAttrForIntrinsic(IID);
const Function *Fn = II.getFunction();
if (!AMDGPU::isEntryFunctionCC(Fn->getCallingConv()) &&
Fn->hasFnAttribute(ConflictAttr))
return IC.replaceInstUsesWith(II, PoisonValue::get(II.getType()));
return std::nullopt;
}
```
and then change this to
```c++
case Intrinsic::amdgcn_dispatch_ptr:
case Intrinsic::amdgcn_queue_ptr:
case Intrinsic::amdgcn_dispatch_id:
case Intrinsic::amdgcn_workgroup_id_x:
case Intrinsic::amdgcn_workgroup_id_y:
case Intrinsic::amdgcn_workgroup_id_z:
case Intrinsic::amdgcn_workitem_id_x:
case Intrinsic::amdgcn_workitem_id_y:
case Intrinsic::amdgcn_workitem_id_z:
case Intrinsic::amdgcn_lds_kernel_id:
case Intrinsic::amdgcn_cluster_id_x:
case Intrinsic::amdgcn_cluster_id_y:
case Intrinsic::amdgcn_cluster_id_z:
return getPoisonedAMDGPUIntrinsicReplacement(II, IC);
```
https://github.com/llvm/llvm-project/pull/196151
More information about the llvm-commits
mailing list