[llvm] [ReachingDefAnalysis] Extend the analysis to stack objects. (PR #118097)
Michael Maitland via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 29 07:20:11 PST 2024
================
@@ -48,12 +54,28 @@ static bool isValidRegDefOf(const MachineOperand &MO, MCRegister PhysReg,
return TRI->regsOverlap(MO.getReg(), PhysReg);
}
+static bool isFIDef(const MachineInstr &MI, int FrameIndex,
+ const TargetInstrInfo *TII) {
+ int DefFrameIndex = 0;
+ int SrcFrameIndex = 0;
+ if (TII->isStoreToStackSlot(MI, DefFrameIndex) ||
+ TII->isStackSlotCopy(MI, DefFrameIndex, SrcFrameIndex)) {
+ return DefFrameIndex == FrameIndex;
+ }
+ return false;
+}
+
void ReachingDefAnalysis::enterBasicBlock(MachineBasicBlock *MBB) {
unsigned MBBNumber = MBB->getNumber();
assert(MBBNumber < MBBReachingDefs.numBlockIDs() &&
"Unexpected basic block number.");
MBBReachingDefs.startBasicBlock(MBBNumber, NumRegUnits);
+ MBBFrameObjsReachingDefs[MBBNumber].resize(NumStackObjects);
+ for (unsigned FOIdx = 0; FOIdx < NumStackObjects; ++FOIdx) {
+ MBBFrameObjsReachingDefs[MBBNumber][FOIdx].push_back(-1);
----------------
michaelmaitland wrote:
Is this initialization needed? I think you could just check `MBBFrameObjsReachingDefs[MBBNumber][FrameIndex - ObjectIndexBegin].empty()` in `getReachingDef`. This change would reduce memory usage.
https://github.com/llvm/llvm-project/pull/118097
More information about the llvm-commits
mailing list