Skip to content

[SlotIndexes] Use upper/lower bound terminology for MBB searches. NFC. #68802

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
Oct 11, 2023
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
40 changes: 21 additions & 19 deletions llvm/include/llvm/CodeGen/SlotIndexes.h
Original file line number Diff line number Diff line change
Expand Up @@ -473,18 +473,25 @@ class raw_ostream;
/// begin and basic block)
using MBBIndexIterator = SmallVectorImpl<IdxMBBPair>::const_iterator;

/// Move iterator to the next IdxMBBPair where the SlotIndex is greater or
/// equal to \p To.
MBBIndexIterator advanceMBBIndex(MBBIndexIterator I, SlotIndex To) const {
return std::partition_point(
I, idx2MBBMap.end(),
[=](const IdxMBBPair &IM) { return IM.first < To; });
/// Get an iterator pointing to the first IdxMBBPair with SlotIndex greater
/// than or equal to \p Idx. If \p Start is provided, only search the range
/// from \p Start to the end of the function.
MBBIndexIterator getMBBLowerBound(MBBIndexIterator Start,
SlotIndex Idx) const {
return std::lower_bound(
Start, MBBIndexEnd(), Idx,
[](const IdxMBBPair &IM, SlotIndex Idx) { return IM.first < Idx; });
}
MBBIndexIterator getMBBLowerBound(SlotIndex Idx) const {
return getMBBLowerBound(MBBIndexBegin(), Idx);
}

/// Get an iterator pointing to the IdxMBBPair with the biggest SlotIndex
/// that is greater or equal to \p Idx.
MBBIndexIterator findMBBIndex(SlotIndex Idx) const {
return advanceMBBIndex(idx2MBBMap.begin(), Idx);
/// Get an iterator pointing to the first IdxMBBPair with SlotIndex greater
/// than \p Idx.
MBBIndexIterator getMBBUpperBound(SlotIndex Idx) const {
return std::upper_bound(
MBBIndexBegin(), MBBIndexEnd(), Idx,
[](SlotIndex Idx, const IdxMBBPair &IM) { return Idx < IM.first; });
}

/// Returns an iterator for the begin of the idx2MBBMap.
Expand All @@ -502,16 +509,11 @@ class raw_ostream;
if (MachineInstr *MI = getInstructionFromIndex(index))
return MI->getParent();

MBBIndexIterator I = findMBBIndex(index);
// Take the pair containing the index
MBBIndexIterator J =
((I != MBBIndexEnd() && I->first > index) ||
(I == MBBIndexEnd() && !idx2MBBMap.empty())) ? std::prev(I) : I;

assert(J != MBBIndexEnd() && J->first <= index &&
index < getMBBEndIdx(J->second) &&
MBBIndexIterator I = std::prev(getMBBUpperBound(index));
assert(I != MBBIndexEnd() && I->first <= index &&
index < getMBBEndIdx(I->second) &&
"index does not correspond to an MBB");
return J->second;
return I->second;
}

/// Insert the given machine instruction into the mapping. Returns the
Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/CodeGen/VirtRegMap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ void VirtRegRewriter::addLiveInsForSubRanges(const LiveInterval &LI,

// Check all mbb start positions between First and Last while
// simultaneously advancing an iterator for each subrange.
for (SlotIndexes::MBBIndexIterator MBBI = Indexes->findMBBIndex(First);
for (SlotIndexes::MBBIndexIterator MBBI = Indexes->getMBBLowerBound(First);
MBBI != Indexes->MBBIndexEnd() && MBBI->first <= Last; ++MBBI) {
SlotIndex MBBBegin = MBBI->first;
// Advance all subrange iterators so that their end position is just
Expand Down Expand Up @@ -363,7 +363,7 @@ void VirtRegRewriter::addMBBLiveIns() {
// sorted by slot indexes.
SlotIndexes::MBBIndexIterator I = Indexes->MBBIndexBegin();
for (const auto &Seg : LI) {
I = Indexes->advanceMBBIndex(I, Seg.start);
I = Indexes->getMBBLowerBound(I, Seg.start);
for (; I != Indexes->MBBIndexEnd() && I->first < Seg.end; ++I) {
MachineBasicBlock *MBB = I->second;
MBB->addLiveIn(PhysReg);
Expand Down