[llvm] AMDGPU/GlobalISel: Regbanklegalize rules for INTRIN_IMAGE (PR #179810)
Petar Avramovic via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 18 06:58:18 PST 2026
================
@@ -1715,3 +1717,74 @@ void RegBankLegalizeHelper::applyMappingTrivial(MachineInstr &MI) {
}
}
}
+
+bool RegBankLegalizeHelper::applyRegisterBanksINTRIN_IMAGE(MachineInstr &MI) {
+ const AMDGPU::RsrcIntrinsic *RSrcIntrin =
+ AMDGPU::lookupRsrcIntrinsic(AMDGPU::getIntrinsicID(MI));
+ assert(RSrcIntrin && RSrcIntrin->IsImage);
+
+ unsigned RsrcIdx = RSrcIntrin->RsrcArg;
+ const unsigned NumDefs = MI.getNumExplicitDefs();
+
+ // The reported argument index is relative to the IR intrinsic call arguments,
+ // so we need to shift by the number of defs and the intrinsic ID.
+ RsrcIdx += NumDefs + 1;
+
+ MachineBasicBlock *MBB = MI.getParent();
+ B.setInsertPt(*MBB, MBB->SkipPHIsAndLabels(std::next(MI.getIterator())));
+
+ // Defs(for image loads with return) are vgpr.
+ for (unsigned i = 0; i < NumDefs; ++i) {
+ const RegisterBank *RB = MRI.getRegBank(MI.getOperand(i).getReg());
+ if (RB == SgprRB) {
+ Register Reg = MI.getOperand(i).getReg();
+ Register NewVgprDst =
+ MRI.createVirtualRegister({VgprRB, MRI.getType(Reg)});
+ MI.getOperand(i).setReg(NewVgprDst);
+ buildReadAnyLane(B, Reg, NewVgprDst, RBI);
+ }
+ }
+
+ B.setInstr(MI);
+
+ // Register uses(before RsrcIdx) are vgpr.
+ for (unsigned i = 1; i < RsrcIdx; ++i) {
+ MachineOperand &Op = MI.getOperand(i);
+ if (!Op.isReg())
+ continue;
+
+ Register Reg = Op.getReg();
+ if (!Reg.isVirtual())
+ continue;
----------------
petar-avramovic wrote:
`$noreg` can be src operand, check AMDGPULegalizerInfo.cpp
`SrcOp.setReg(AMDGPU::NoRegister);`
here is one example
`%24:vgpr(<4 x s32>) = G_AMDGPU_INTRIN_IMAGE_LOAD intrinsic(@llvm.amdgcn.image.sample.cd.2d), 15, %29(<2 x s16>), %30(<2 x s16>), %31(<2 x s16>), %32(<2 x s16>), $noreg, $noreg, %0(<8 x s32>), %1(<4 x s32>), 0, 0, 0, 2 :: (dereferenceable load (<4 x s32>), addrspace 8)`
https://github.com/llvm/llvm-project/pull/179810
More information about the llvm-commits
mailing list