@@ -59,9 +59,8 @@ static bool isFIDef(const MachineInstr &MI, int FrameIndex,
5959 int DefFrameIndex = 0 ;
6060 int SrcFrameIndex = 0 ;
6161 if (TII->isStoreToStackSlot (MI, DefFrameIndex) ||
62- TII->isStackSlotCopy (MI, DefFrameIndex, SrcFrameIndex)) {
62+ TII->isStackSlotCopy (MI, DefFrameIndex, SrcFrameIndex))
6363 return DefFrameIndex == FrameIndex;
64- }
6564 return false ;
6665}
6766
@@ -71,8 +70,6 @@ void ReachingDefAnalysis::enterBasicBlock(MachineBasicBlock *MBB) {
7170 " Unexpected basic block number." );
7271 MBBReachingDefs.startBasicBlock (MBBNumber, NumRegUnits);
7372
74- MBBFrameObjsReachingDefs[MBBNumber].resize (NumStackObjects, {-1 });
75-
7673 // Reset instruction counter in each basic block.
7774 CurInstr = 0 ;
7875
@@ -150,8 +147,16 @@ void ReachingDefAnalysis::processDefs(MachineInstr *MI) {
150147 assert (FrameIndex >= 0 && " Can't handle negative frame indicies yet!" );
151148 if (!isFIDef (*MI, FrameIndex, TII))
152149 continue ;
153- MBBFrameObjsReachingDefs[MBBNumber][FrameIndex - ObjectIndexBegin]
154- .push_back (CurInstr);
150+ if (MBBFrameObjsReachingDefs.contains (MBBNumber)) {
151+ auto Frame2InstrIdx = MBBFrameObjsReachingDefs[MBBNumber];
152+ if (Frame2InstrIdx.count (FrameIndex - ObjectIndexBegin) > 0 )
153+ Frame2InstrIdx[FrameIndex - ObjectIndexBegin].push_back (CurInstr);
154+ else
155+ Frame2InstrIdx[FrameIndex - ObjectIndexBegin] = {CurInstr};
156+ } else {
157+ MBBFrameObjsReachingDefs[MBBNumber] = {
158+ {FrameIndex - ObjectIndexBegin, {CurInstr}}};
159+ }
155160 }
156161 if (!isValidRegDef (MO))
157162 continue ;
@@ -307,7 +312,6 @@ void ReachingDefAnalysis::init() {
307312 NumStackObjects = MF->getFrameInfo ().getNumObjects ();
308313 ObjectIndexBegin = MF->getFrameInfo ().getObjectIndexBegin ();
309314 MBBReachingDefs.init (MF->getNumBlockIDs ());
310- MBBFrameObjsReachingDefs.resize (MF->getNumBlockIDs ());
311315 // Initialize the MBBOutRegsInfos
312316 MBBOutRegsInfos.resize (MF->getNumBlockIDs ());
313317 LoopTraversal Traversal;
@@ -344,8 +348,8 @@ int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, Register Reg) const {
344348
345349 if (Register::isStackSlot (Reg)) {
346350 int FrameIndex = Register::stackSlot2Index (Reg);
347- for (int Def :
348- MBBFrameObjsReachingDefs[MBBNumber][ FrameIndex - ObjectIndexBegin] ) {
351+ for (int Def : MBBFrameObjsReachingDefs. lookup (MBBNumber). lookup (
352+ FrameIndex - ObjectIndexBegin) ) {
349353 if (Def >= InstId)
350354 break ;
351355 DefRes = Def;
0 commit comments