@@ -149,15 +149,11 @@ void ReachingDefAnalysis::processDefs(MachineInstr *MI) {
149149 continue ;
150150
151151 int Key = FrameIndex - ObjectIndexBegin;
152- if (MBBFrameObjsReachingDefs.contains (MBBNumber)) {
153- auto &Frame2InstrIdx = MBBFrameObjsReachingDefs[MBBNumber];
154- if (Frame2InstrIdx.count (Key) > 0 )
155- Frame2InstrIdx[Key].push_back (CurInstr);
156- else
157- Frame2InstrIdx[Key] = {CurInstr};
158- } else {
159- MBBFrameObjsReachingDefs[MBBNumber] = {{Key, {CurInstr}}};
160- }
152+ if (MBBFrameObjsReachingDefs.contains (MBBNumber) &&
153+ MBBFrameObjsReachingDefs[MBBNumber].count (Key) > 0 )
154+ MBBFrameObjsReachingDefs[MBBNumber][Key].push_back (CurInstr);
155+ else
156+ MBBFrameObjsReachingDefs[MBBNumber][Key] = {CurInstr};
161157 }
162158
163159 if (!isValidRegDef (MO))
@@ -351,7 +347,18 @@ int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, Register Reg) const {
351347 if (Register::isStackSlot (Reg)) {
352348 int FrameIndex = Register::stackSlot2Index (Reg);
353349 int Key = FrameIndex - ObjectIndexBegin;
354- for (int Def : MBBFrameObjsReachingDefs.at (MBBNumber).at (Key)) {
350+
351+ // Check that there was a reaching def.
352+ auto Lookup1 = MBBFrameObjsReachingDefs.find (MBBNumber);
353+ if (Lookup1 == MBBFrameObjsReachingDefs.end ())
354+ return LatestDef;
355+ auto &InnerMap = Lookup1->second ;
356+ auto Lookup2 = InnerMap.find (Key);
357+ if (Lookup2 == InnerMap.end ())
358+ return LatestDef;
359+ auto &Defs = Lookup2->second ;
360+
361+ for (int Def : Defs) {
355362 if (Def >= InstId)
356363 break ;
357364 DefRes = Def;
0 commit comments