[llvm] [AMDGPU] siloadstoreopt generate REG_SEQUENCE with aligned operands (PR #162088)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 10 07:18:50 PDT 2025
================
@@ -1411,10 +1411,33 @@ SILoadStoreOptimizer::copyFromSrcRegs(CombineInfo &CI, CombineInfo &Paired,
const auto *Src0 = TII->getNamedOperand(*CI.I, OpName);
const auto *Src1 = TII->getNamedOperand(*Paired.I, OpName);
+ // Make sure the generated REG_SEQUENCE has sensibly aligned registers.
+ const TargetRegisterClass *CompatRC0 =
+ TRI->getSubRegisterClass(SuperRC, SubRegIdx0);
+ const TargetRegisterClass *CompatRC1 =
+ TRI->getSubRegisterClass(SuperRC, SubRegIdx1);
+ assert(CompatRC0 && CompatRC1 &&
+ "Cannot find compatible TargetRegisterClass");
+
+ Register Src0Reg = CompatRC0 == CI.DataRC
+ ? Src0->getReg()
+ : MRI->createVirtualRegister(CompatRC0);
+ Register Src1Reg = CompatRC1 == Paired.DataRC
+ ? Src1->getReg()
+ : MRI->createVirtualRegister(CompatRC1);
+
+ if (CompatRC0 != CI.DataRC)
+ BuildMI(*MBB, InsertBefore, DL, TII->get(TargetOpcode::COPY), Src0Reg)
+ .add(*Src0);
----------------
arsenm wrote:
You shouldn't be trying to go that direction? You cannot simply relax register classes without accounting for all the uses of the register. But transforms should generally work in a constraint increasing direction to enable folds
https://github.com/llvm/llvm-project/pull/162088
More information about the llvm-commits
mailing list