[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