Skip to content

Commit 4c23c1b

Browse files
authored
[CodeGen] Use SmallVector for MBB preds/succs (#101948)
Avoid extra heap allocations for typical predecessor/successor counts.
1 parent 37e75cd commit 4c23c1b

File tree

4 files changed

+20
-14
lines changed

4 files changed

+20
-14
lines changed

llvm/include/llvm/Analysis/RegionInfoImpl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,8 @@ RegionInfoBase<Tr>::getMaxRegionExit(BlockT *BB) const {
814814
// Get the single exit of BB.
815815
if (R && R->getEntry() == BB)
816816
Exit = R->getExit();
817-
else if (++BlockTraits::child_begin(BB) == BlockTraits::child_end(BB))
817+
else if (std::next(BlockTraits::child_begin(BB)) ==
818+
BlockTraits::child_end(BB))
818819
Exit = *BlockTraits::child_begin(BB);
819820
else // No single exit exists.
820821
return Exit;

llvm/include/llvm/CodeGen/MachineBasicBlock.h

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ class MachineBasicBlock
157157
Instructions Insts;
158158

159159
/// Keep track of the predecessor / successor basic blocks.
160-
std::vector<MachineBasicBlock *> Predecessors;
161-
std::vector<MachineBasicBlock *> Successors;
160+
SmallVector<MachineBasicBlock *, 4> Predecessors;
161+
SmallVector<MachineBasicBlock *, 2> Successors;
162162

163163
/// Keep track of the probabilities to the successors. This vector has the
164164
/// same order as Successors, or it is empty if we don't use it (disable
@@ -387,18 +387,20 @@ class MachineBasicBlock
387387
}
388388

389389
// Machine-CFG iterators
390-
using pred_iterator = std::vector<MachineBasicBlock *>::iterator;
391-
using const_pred_iterator = std::vector<MachineBasicBlock *>::const_iterator;
392-
using succ_iterator = std::vector<MachineBasicBlock *>::iterator;
393-
using const_succ_iterator = std::vector<MachineBasicBlock *>::const_iterator;
390+
using pred_iterator = SmallVectorImpl<MachineBasicBlock *>::iterator;
391+
using const_pred_iterator =
392+
SmallVectorImpl<MachineBasicBlock *>::const_iterator;
393+
using succ_iterator = SmallVectorImpl<MachineBasicBlock *>::iterator;
394+
using const_succ_iterator =
395+
SmallVectorImpl<MachineBasicBlock *>::const_iterator;
394396
using pred_reverse_iterator =
395-
std::vector<MachineBasicBlock *>::reverse_iterator;
397+
SmallVectorImpl<MachineBasicBlock *>::reverse_iterator;
396398
using const_pred_reverse_iterator =
397-
std::vector<MachineBasicBlock *>::const_reverse_iterator;
399+
SmallVectorImpl<MachineBasicBlock *>::const_reverse_iterator;
398400
using succ_reverse_iterator =
399-
std::vector<MachineBasicBlock *>::reverse_iterator;
401+
SmallVectorImpl<MachineBasicBlock *>::reverse_iterator;
400402
using const_succ_reverse_iterator =
401-
std::vector<MachineBasicBlock *>::const_reverse_iterator;
403+
SmallVectorImpl<MachineBasicBlock *>::const_reverse_iterator;
402404
pred_iterator pred_begin() { return Predecessors.begin(); }
403405
const_pred_iterator pred_begin() const { return Predecessors.begin(); }
404406
pred_iterator pred_end() { return Predecessors.end(); }

llvm/lib/CodeGen/MIRSampleProfile.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@ template <> struct IRTraits<MachineBasicBlock> {
126126
using PostDominatorTreeT = MachinePostDominatorTree;
127127
using OptRemarkEmitterT = MachineOptimizationRemarkEmitter;
128128
using OptRemarkAnalysisT = MachineOptimizationRemarkAnalysis;
129-
using PredRangeT = iterator_range<std::vector<MachineBasicBlock *>::iterator>;
130-
using SuccRangeT = iterator_range<std::vector<MachineBasicBlock *>::iterator>;
129+
using PredRangeT =
130+
iterator_range<SmallVectorImpl<MachineBasicBlock *>::iterator>;
131+
using SuccRangeT =
132+
iterator_range<SmallVectorImpl<MachineBasicBlock *>::iterator>;
131133
static Function &getFunction(MachineFunction &F) { return F.getFunction(); }
132134
static const MachineBasicBlock *getEntryBB(const MachineFunction *F) {
133135
return GraphTraits<const MachineFunction *>::getEntryNode(F);

llvm/lib/Target/Hexagon/HexagonCopyHoisting.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,8 @@ void HexagonCopyHoisting::moveCopyInstr(MachineBasicBlock *DestBB,
249249
DestBB->splice(FirstTI, MI->getParent(), MI);
250250

251251
addMItoCopyList(MI);
252-
for (auto I = ++(DestBB->succ_begin()), E = DestBB->succ_end(); I != E; ++I) {
252+
for (auto I = std::next(DestBB->succ_begin()), E = DestBB->succ_end(); I != E;
253+
++I) {
253254
MachineBasicBlock *SuccBB = *I;
254255
auto &BBCopyInst = CopyMIList[SuccBB->getNumber()];
255256
MachineInstr *SuccMI = BBCopyInst[Key];

0 commit comments

Comments
 (0)