Skip to content

[InstrRef][NFC] Avoid un-necessary DenseMap queries #99048

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 26 additions & 18 deletions llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3109,12 +3109,8 @@ void InstrRefBasedLDV::buildVLocValueMap(
SmallPtrSet<const MachineBasicBlock *, 8> BlocksToExplore;

// The order in which to examine them (RPO).
SmallVector<MachineBasicBlock *, 8> BlockOrders;

// RPO ordering function.
auto Cmp = [&](MachineBasicBlock *A, MachineBasicBlock *B) {
return BBToOrder[A] < BBToOrder[B];
};
SmallVector<MachineBasicBlock *, 16> BlockOrders;
SmallVector<unsigned, 32> BlockOrderNums;

getBlocksForScope(DILoc, BlocksToExplore, AssignBlocks);

Expand All @@ -3132,11 +3128,16 @@ void InstrRefBasedLDV::buildVLocValueMap(
for (const auto *MBB : BlocksToExplore)
MutBlocksToExplore.insert(const_cast<MachineBasicBlock *>(MBB));

// Picks out relevants blocks RPO order and sort them.
// Picks out relevants blocks RPO order and sort them. Sort their
// order-numbers and map back to MBB pointers later, to avoid repeated
// DenseMap queries during comparisons.
for (const auto *MBB : BlocksToExplore)
BlockOrders.push_back(const_cast<MachineBasicBlock *>(MBB));
BlockOrderNums.push_back(BBToOrder[MBB]);

llvm::sort(BlockOrders, Cmp);
llvm::sort(BlockOrderNums);
for (unsigned int I : BlockOrderNums)
BlockOrders.push_back(OrderToBB[I]);
BlockOrderNums.clear();
unsigned NumBlocks = BlockOrders.size();

// Allocate some vectors for storing the live ins and live outs. Large.
Expand Down Expand Up @@ -3396,16 +3397,24 @@ void InstrRefBasedLDV::initialSetup(MachineFunction &MF) {
return DL.getLine() != 0;
return false;
};
// Collect a set of all the artificial blocks.
for (auto &MBB : MF)

// Collect a set of all the artificial blocks. Collect the size too, ilist
// size calls are O(n).
unsigned int Size = 0;
for (auto &MBB : MF) {
++Size;
if (none_of(MBB.instrs(), hasNonArtificialLocation))
ArtificialBlocks.insert(&MBB);
}

// Compute mappings of block <=> RPO order.
ReversePostOrderTraversal<MachineFunction *> RPOT(&MF);
unsigned int RPONumber = 0;
OrderToBB.reserve(Size);
BBToOrder.reserve(Size);
BBNumToRPO.reserve(Size);
auto processMBB = [&](MachineBasicBlock *MBB) {
OrderToBB[RPONumber] = MBB;
OrderToBB.push_back(MBB);
BBToOrder[MBB] = RPONumber;
BBNumToRPO[MBB->getNumber()] = RPONumber;
++RPONumber;
Expand Down Expand Up @@ -3724,14 +3733,13 @@ bool InstrRefBasedLDV::ExtendRanges(MachineFunction &MF,

// Walk back through each block / instruction, collecting DBG_VALUE
// instructions and recording what machine value their operands refer to.
for (auto &OrderPair : OrderToBB) {
MachineBasicBlock &MBB = *OrderPair.second;
CurBB = MBB.getNumber();
for (MachineBasicBlock *MBB : OrderToBB) {
CurBB = MBB->getNumber();
VTracker = &vlocs[CurBB];
VTracker->MBB = &MBB;
MTracker->loadFromArray(MInLocs[MBB], CurBB);
VTracker->MBB = MBB;
MTracker->loadFromArray(MInLocs[*MBB], CurBB);
CurInst = 1;
for (auto &MI : MBB) {
for (auto &MI : *MBB) {
process(MI, &MOutLocs, &MInLocs);
++CurInst;
}
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -1153,7 +1153,7 @@ class InstrRefBasedLDV : public LDVImpl {
SmallPtrSet<MachineBasicBlock *, 16> ArtificialBlocks;

// Mapping of blocks to and from their RPOT order.
DenseMap<unsigned int, MachineBasicBlock *> OrderToBB;
SmallVector<MachineBasicBlock *> OrderToBB;
DenseMap<const MachineBasicBlock *, unsigned int> BBToOrder;
DenseMap<unsigned, unsigned> BBNumToRPO;

Expand Down
Loading