diff options
author | Diana Picus <Diana-Magda.Picus@amd.com> | 2025-04-23 14:01:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-23 14:01:00 +0200 |
commit | 6bb2f90557fb2b4b216299cc2beb4afb641476aa (patch) | |
tree | 1651b440116a0f43a9c801412ceea0416408c42b /llvm/lib/CodeGen/PrologEpilogInserter.cpp | |
parent | 4e073a11c24cc0abfe5a8eabd99f1e4762c89e2b (diff) | |
download | llvm-6bb2f90557fb2b4b216299cc2beb4afb641476aa.zip llvm-6bb2f90557fb2b4b216299cc2beb4afb641476aa.tar.gz llvm-6bb2f90557fb2b4b216299cc2beb4afb641476aa.tar.bz2 |
Revert "[AMDGPU] Support block load/store for CSR" (#136846)
Reverts llvm/llvm-project#130013 due to failures with expensive checks
on.
Diffstat (limited to 'llvm/lib/CodeGen/PrologEpilogInserter.cpp')
-rw-r--r-- | llvm/lib/CodeGen/PrologEpilogInserter.cpp | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp index 0cd25c4..ac40902 100644 --- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp +++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp @@ -476,8 +476,8 @@ static void assignCalleeSavedSpillSlots(MachineFunction &F, // Now that we know which registers need to be saved and restored, allocate // stack slots for them. for (auto &CS : CSI) { - // If the target has spilled this register to another register or already - // handled it , we don't need to allocate a stack slot. + // If the target has spilled this register to another register, we don't + // need to allocate a stack slot. if (CS.isSpilledToReg()) continue; @@ -597,14 +597,25 @@ static void updateLiveness(MachineFunction &MF) { static void insertCSRSaves(MachineBasicBlock &SaveBlock, ArrayRef<CalleeSavedInfo> CSI) { MachineFunction &MF = *SaveBlock.getParent(); - const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo(); + const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo(); const TargetFrameLowering *TFI = MF.getSubtarget().getFrameLowering(); const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo(); MachineBasicBlock::iterator I = SaveBlock.begin(); if (!TFI->spillCalleeSavedRegisters(SaveBlock, I, CSI, TRI)) { for (const CalleeSavedInfo &CS : CSI) { - TFI->spillCalleeSavedRegister(SaveBlock, I, CS, TII, TRI); + // Insert the spill to the stack frame. + MCRegister Reg = CS.getReg(); + + if (CS.isSpilledToReg()) { + BuildMI(SaveBlock, I, DebugLoc(), TII.get(TargetOpcode::COPY), + CS.getDstReg()) + .addReg(Reg, getKillRegState(true)); + } else { + const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg); + TII.storeRegToStackSlot(SaveBlock, I, Reg, true, CS.getFrameIdx(), RC, + TRI, Register()); + } } } } @@ -613,7 +624,7 @@ static void insertCSRSaves(MachineBasicBlock &SaveBlock, static void insertCSRRestores(MachineBasicBlock &RestoreBlock, std::vector<CalleeSavedInfo> &CSI) { MachineFunction &MF = *RestoreBlock.getParent(); - const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo(); + const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo(); const TargetFrameLowering *TFI = MF.getSubtarget().getFrameLowering(); const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo(); @@ -623,7 +634,19 @@ static void insertCSRRestores(MachineBasicBlock &RestoreBlock, if (!TFI->restoreCalleeSavedRegisters(RestoreBlock, I, CSI, TRI)) { for (const CalleeSavedInfo &CI : reverse(CSI)) { - TFI->restoreCalleeSavedRegister(RestoreBlock, I, CI, TII, TRI); + MCRegister Reg = CI.getReg(); + if (CI.isSpilledToReg()) { + BuildMI(RestoreBlock, I, DebugLoc(), TII.get(TargetOpcode::COPY), Reg) + .addReg(CI.getDstReg(), getKillRegState(true)); + } else { + const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg); + TII.loadRegFromStackSlot(RestoreBlock, I, Reg, CI.getFrameIdx(), RC, + TRI, Register()); + assert(I != RestoreBlock.begin() && + "loadRegFromStackSlot didn't insert any code!"); + // Insert in reverse order. loadRegFromStackSlot can insert + // multiple instructions. + } } } } |