[llvm] [WIP][AMDGPU] Improve the handling of `inreg` arguments (PR #133614)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Thu May 1 07:42:23 PDT 2025
================
@@ -3130,8 +3221,17 @@ SDValue SITargetLowering::LowerFormalArguments(
llvm_unreachable("Unexpected register class in LowerFormalArguments!");
EVT ValVT = VA.getValVT();
- Reg = MF.addLiveIn(Reg, RC);
- SDValue Val = DAG.getCopyFromReg(Chain, DL, Reg, VT);
+ SDValue Val;
+ // If an argument is marked inreg but gets pushed to a VGPR, it indicates
+ // we've run out of SGPRs for argument passing. In such cases, we'd prefer
+ // to start packing inreg arguments into individual lanes of VGPRs, rather
+ // than placing them directly into VGPRs.
+ if (RC == &AMDGPU::VGPR_32RegClass && Arg.Flags.isInReg()) {
+ Val = Spiller.readLane(Chain, DL, Reg, VT);
+ } else {
+ Reg = MF.addLiveIn(Reg, RC);
+ Val = DAG.getCopyFromReg(Chain, DL, Reg, VT);
----------------
arsenm wrote:
will probably also need to be a WWM copy
https://github.com/llvm/llvm-project/pull/133614
More information about the llvm-commits
mailing list