[llvm] Rematerialize load RISCV backend (PR #73910)
Andreu Carminati via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 30 04:29:26 PST 2023
================
@@ -1567,6 +1573,48 @@ bool RISCVInstrInfo::isAsCheapAsAMove(const MachineInstr &MI) const {
return MI.isAsCheapAsAMove();
}
+bool RISCVInstrInfo::isReallyTriviallyReMaterializable(
+ const MachineInstr &MI) const {
+ if (TargetInstrInfo::isReallyTriviallyReMaterializable(MI))
+ return true;
+
+ const MachineFunction &MF = *MI.getMF();
+ const MachineRegisterInfo &MRI = MF.getRegInfo();
+
+ const MachineOperand &Dest = MI.getOperand(0);
+ if (!MRI.hasOneUse(Dest.getReg()))
+ return false;
+
+ MachineInstr *UseMI = &*MRI.use_instr_begin(Dest.getReg());
+ MachineBasicBlock::const_iterator DefItr(MI);
+ MachineBasicBlock::const_iterator UseItr(UseMI);
+
+ const MachineBasicBlock *MBB = nullptr;
+ if ((MBB = MI.getParent()) != UseMI->getParent())
+ return false;
+
+ // When loading from stack and the stack slot is not modifed before its use,
+ // then materialize this load.
+ int FrameIdx = 0;
+ if (isLoadFromStackSlot(MI, FrameIdx) && AggressiveLoadRemat) {
+ for (; DefItr != UseItr && DefItr != MBB->end(); DefItr++) {
+ int StoreFrameIdx = 0;
+ if ((*DefItr).isCall() || (isStoreToStackSlot(*DefItr, StoreFrameIdx) &&
----------------
andcarminati wrote:
True, storing to a pointer to a variable that is in the stack for example.
https://github.com/llvm/llvm-project/pull/73910
More information about the llvm-commits
mailing list