Skip to content

Commit 7eaed76

Browse files
author
Mikhail Gudim
committed
fix the memory problem
1 parent 799e1c2 commit 7eaed76

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

llvm/include/llvm/CodeGen/ReachingDefAnalysis.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class ReachingDefAnalysis : public MachineFunctionPass {
142142

143143
MBBReachingDefsInfo MBBReachingDefs;
144144
using MBBFrameObjsReachingDefsInfo =
145-
std::vector<std::vector<SmallVector<int>>>;
145+
DenseMap<unsigned, DenseMap<int, SmallVector<int>>>;
146146
// MBBFrameObjsReachingDefs[i][j] is a list of instruction indices (relative
147147
// to begining of MBB) that define frame index (j +
148148
// MF->getFrameInfo().getObjectIndexBegin()) in MBB i. This is used in

llvm/lib/CodeGen/ReachingDefAnalysis.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ void ReachingDefAnalysis::enterBasicBlock(MachineBasicBlock *MBB) {
7171
"Unexpected basic block number.");
7272
MBBReachingDefs.startBasicBlock(MBBNumber, NumRegUnits);
7373

74-
MBBFrameObjsReachingDefs[MBBNumber].resize(NumStackObjects, {-1});
75-
7674
// Reset instruction counter in each basic block.
7775
CurInstr = 0;
7876

@@ -150,8 +148,16 @@ void ReachingDefAnalysis::processDefs(MachineInstr *MI) {
150148
assert(FrameIndex >= 0 && "Can't handle negative frame indicies yet!");
151149
if (!isFIDef(*MI, FrameIndex, TII))
152150
continue;
153-
MBBFrameObjsReachingDefs[MBBNumber][FrameIndex - ObjectIndexBegin]
154-
.push_back(CurInstr);
151+
if (MBBFrameObjsReachingDefs.contains(MBBNumber)) {
152+
auto Frame2InstrIdx = MBBFrameObjsReachingDefs[MBBNumber];
153+
if (Frame2InstrIdx.count(FrameIndex - ObjectIndexBegin) > 0)
154+
Frame2InstrIdx[FrameIndex - ObjectIndexBegin].push_back(CurInstr);
155+
else
156+
Frame2InstrIdx[FrameIndex - ObjectIndexBegin] = {CurInstr};
157+
} else {
158+
MBBFrameObjsReachingDefs[MBBNumber] = {
159+
{FrameIndex - ObjectIndexBegin, {CurInstr}}};
160+
}
155161
}
156162
if (!isValidRegDef(MO))
157163
continue;
@@ -307,7 +313,6 @@ void ReachingDefAnalysis::init() {
307313
NumStackObjects = MF->getFrameInfo().getNumObjects();
308314
ObjectIndexBegin = MF->getFrameInfo().getObjectIndexBegin();
309315
MBBReachingDefs.init(MF->getNumBlockIDs());
310-
MBBFrameObjsReachingDefs.resize(MF->getNumBlockIDs());
311316
// Initialize the MBBOutRegsInfos
312317
MBBOutRegsInfos.resize(MF->getNumBlockIDs());
313318
LoopTraversal Traversal;
@@ -344,8 +349,8 @@ int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, Register Reg) const {
344349

345350
if (Register::isStackSlot(Reg)) {
346351
int FrameIndex = Register::stackSlot2Index(Reg);
347-
for (int Def :
348-
MBBFrameObjsReachingDefs[MBBNumber][FrameIndex - ObjectIndexBegin]) {
352+
for (int Def : MBBFrameObjsReachingDefs.lookup(MBBNumber).lookup(
353+
FrameIndex - ObjectIndexBegin)) {
349354
if (Def >= InstId)
350355
break;
351356
DefRes = Def;

0 commit comments

Comments
 (0)