@@ -147,16 +147,9 @@ void ReachingDefAnalysis::processDefs(MachineInstr *MI) {
147147 assert (FrameIndex >= 0 && " Can't handle negative frame indicies yet!" );
148148 if (!isFIDef (*MI, FrameIndex, TII))
149149 continue ;
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- }
150+
151+ int Key = FrameIndex - ObjectIndexBegin;
152+ MBBFrameObjsReachingDefs[MBBNumber][Key].push_back (CurInstr);
160153 }
161154 if (!isValidRegDef (MO))
162155 continue ;
@@ -348,8 +341,19 @@ int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, Register Reg) const {
348341
349342 if (Reg.isStack ()) {
350343 int FrameIndex = Reg.stackSlotIndex ();
351- for (int Def : MBBFrameObjsReachingDefs.lookup (MBBNumber).lookup (
352- FrameIndex - ObjectIndexBegin)) {
344+ int Key = FrameIndex - ObjectIndexBegin;
345+
346+ // Check that there was a reaching def.
347+ auto Lookup1 = MBBFrameObjsReachingDefs.find (MBBNumber);
348+ if (Lookup1 == MBBFrameObjsReachingDefs.end ())
349+ return LatestDef;
350+ auto &InnerMap = Lookup1->second ;
351+ auto Lookup2 = InnerMap.find (Key);
352+ if (Lookup2 == InnerMap.end ())
353+ return LatestDef;
354+ auto &Defs = Lookup2->second ;
355+
356+ for (int Def : Defs) {
353357 if (Def >= InstId)
354358 break ;
355359 DefRes = Def;
0 commit comments