[llvm] [AMDGPU] Scavenge a VGPR to eliminate a frame index (PR #166979)
Anshil Gandhi via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 9 22:32:11 PDT 2026
================
@@ -2983,10 +2983,36 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
: RS->scavengeRegisterBackwards(AMDGPU::SReg_32_XM0RegClass,
MI, false, 0, !UseSGPR);
- // TODO: for flat scratch another attempt can be made with a VGPR index
- // if no SGPRs can be scavenged.
- if ((!TmpSReg && !FrameReg) || (!TmpReg && !UseSGPR))
+ if ((!TmpSReg && !FrameReg) || (!TmpReg && !UseSGPR)) {
+ int SVOpcode = AMDGPU::getFlatScratchInstSVfromSS(MI->getOpcode());
+ if (ST.hasFlatScratchSVSMode() && SVOpcode != -1) {
+ Register TmpVGPR = RS->scavengeRegisterBackwards(
+ AMDGPU::VGPR_32RegClass, MI, false, 0, /*AllowSpill=*/true);
+
+ // Materialize the frame register.
+ auto MIB =
+ BuildMI(*MBB, MI, DL, TII->get(AMDGPU::V_MOV_B32_e32), TmpVGPR);
+ if (FrameReg)
+ MIB.addReg(FrameReg);
+ else
+ MIB.addImm(Offset);
+
+ // Add the offset to the frame register.
+ if (FrameReg && Offset)
+ BuildMI(*MBB, MI, DL, TII->get(AMDGPU::V_ADD_U32_e32), FrameReg)
+ .addReg(FrameReg, RegState::Kill)
+ .addImm(Offset);
----------------
gandhi56 wrote:
I refactored the code in https://github.com/llvm/llvm-project/pull/208624.
https://github.com/llvm/llvm-project/pull/166979
More information about the llvm-commits
mailing list