[llvm] [llvm][RISCV] Implement Zilsd load/store pair optimization (PR #158640)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 15 09:51:48 PDT 2025
================
@@ -994,6 +1032,36 @@ bool RISCVRegisterInfo::getRegAllocationHints(
return BaseImplRetVal;
}
+void RISCVRegisterInfo::updateRegAllocHint(Register Reg, Register NewReg,
+ MachineFunction &MF) const {
+ MachineRegisterInfo *MRI = &MF.getRegInfo();
+ std::pair<unsigned, Register> Hint = MRI->getRegAllocationHint(Reg);
+
+ // Handle RegPairEven/RegPairOdd hints for Zilsd register pairs
+ if ((Hint.first == RISCVRI::RegPairOdd ||
+ Hint.first == RISCVRI::RegPairEven) &&
+ Hint.second.isVirtual()) {
+ // If 'Reg' is one of the even/odd register pair and it's now changed
+ // (e.g. coalesced) into a different register, the other register of the
+ // pair allocation hint must be updated to reflect the relationship change.
+ Register Partner = Hint.second;
+ std::pair<unsigned, Register> PartnerHint =
+ MRI->getRegAllocationHint(Partner);
+
+ // Make sure partner still points to us
+ if (PartnerHint.second == Reg) {
+ // Update partner to point to NewReg instead of Reg
+ MRI->setRegAllocationHint(Partner, PartnerHint.first, NewReg);
+
+ // If NewReg is virtual, set up the reciprocal hint
+ // NewReg takes over Reg's role, so it gets the SAME hint type as Reg
+ if (NewReg.isVirtual()) {
----------------
topperc wrote:
Drop curly braces
https://github.com/llvm/llvm-project/pull/158640
More information about the llvm-commits
mailing list