@@ -59,9 +59,8 @@ static bool isFIDef(const MachineInstr &MI, int FrameIndex,
59
59
int DefFrameIndex = 0 ;
60
60
int SrcFrameIndex = 0 ;
61
61
if (TII->isStoreToStackSlot (MI, DefFrameIndex) ||
62
- TII->isStackSlotCopy (MI, DefFrameIndex, SrcFrameIndex)) {
62
+ TII->isStackSlotCopy (MI, DefFrameIndex, SrcFrameIndex))
63
63
return DefFrameIndex == FrameIndex;
64
- }
65
64
return false ;
66
65
}
67
66
@@ -71,8 +70,6 @@ void ReachingDefAnalysis::enterBasicBlock(MachineBasicBlock *MBB) {
71
70
" Unexpected basic block number." );
72
71
MBBReachingDefs.startBasicBlock (MBBNumber, NumRegUnits);
73
72
74
- MBBFrameObjsReachingDefs[MBBNumber].resize (NumStackObjects, {-1 });
75
-
76
73
// Reset instruction counter in each basic block.
77
74
CurInstr = 0 ;
78
75
@@ -150,8 +147,16 @@ void ReachingDefAnalysis::processDefs(MachineInstr *MI) {
150
147
assert (FrameIndex >= 0 && " Can't handle negative frame indicies yet!" );
151
148
if (!isFIDef (*MI, FrameIndex, TII))
152
149
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
+ }
155
160
}
156
161
if (!isValidRegDef (MO))
157
162
continue ;
@@ -307,7 +312,6 @@ void ReachingDefAnalysis::init() {
307
312
NumStackObjects = MF->getFrameInfo ().getNumObjects ();
308
313
ObjectIndexBegin = MF->getFrameInfo ().getObjectIndexBegin ();
309
314
MBBReachingDefs.init (MF->getNumBlockIDs ());
310
- MBBFrameObjsReachingDefs.resize (MF->getNumBlockIDs ());
311
315
// Initialize the MBBOutRegsInfos
312
316
MBBOutRegsInfos.resize (MF->getNumBlockIDs ());
313
317
LoopTraversal Traversal;
@@ -344,8 +348,8 @@ int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, Register Reg) const {
344
348
345
349
if (Register::isStackSlot (Reg)) {
346
350
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) ) {
349
353
if (Def >= InstId)
350
354
break ;
351
355
DefRes = Def;
0 commit comments