Skip to content

Commit 4ef33af

Browse files
fixup! avoid assertion failure
1 parent 07f09a4 commit 4ef33af

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

llvm/lib/CodeGen/ReachingDefAnalysis.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)