[llvm] [AMDGPU] Support image atomic no return instructions (PR #150742)
Shilei Tian via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 15 21:39:35 PDT 2025
================
@@ -9131,16 +9131,24 @@ SDValue SITargetLowering::lowerImage(SDValue Op,
SDLoc DL(Op);
MachineFunction &MF = DAG.getMachineFunction();
const GCNSubtarget *ST = &MF.getSubtarget<GCNSubtarget>();
+ unsigned IntrOpcode = Intr->BaseOpcode;
+ // For image atomic: use no-return opcode if result is unused.
+ if (Intr->AtomicNoRetBaseOpcode != Intr->BaseOpcode &&
+ !Op.getNode()->hasAnyUseOfValue(0))
+ IntrOpcode = Intr->AtomicNoRetBaseOpcode;
const AMDGPU::MIMGBaseOpcodeInfo *BaseOpcode =
- AMDGPU::getMIMGBaseOpcodeInfo(Intr->BaseOpcode);
+ AMDGPU::getMIMGBaseOpcodeInfo(IntrOpcode);
const AMDGPU::MIMGDimInfo *DimInfo = AMDGPU::getMIMGDimInfo(Intr->Dim);
- unsigned IntrOpcode = Intr->BaseOpcode;
bool IsGFX10Plus = AMDGPU::isGFX10Plus(*Subtarget);
bool IsGFX11Plus = AMDGPU::isGFX11Plus(*Subtarget);
bool IsGFX12Plus = AMDGPU::isGFX12Plus(*Subtarget);
- SmallVector<EVT, 3> ResultTypes(Op->values());
- SmallVector<EVT, 3> OrigResultTypes(Op->values());
+ SmallVector<EVT, 2> OrigResultTypes(Op->values());
+ SmallVector<EVT, 2> ResultTypes;
+ ResultTypes = (BaseOpcode->NoReturn && BaseOpcode->Atomic)
+ ? SmallVector<EVT, 1>{MVT::Other}
+ : OrigResultTypes;
----------------
shiltian wrote:
```suggestion
SmallVector<EVT, 2> ResultTypes = (BaseOpcode->NoReturn && BaseOpcode->Atomic)
? SmallVector<EVT, 1>{MVT::Other}
: OrigResultTypes;
```
Plus some code formatting.
https://github.com/llvm/llvm-project/pull/150742
More information about the llvm-commits
mailing list