[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