[llvm] [SlotIndexes] Use upper/lower bound terminology for MBB searches. NFC. (PR #68802)
Jay Foad via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 11 06:24:36 PDT 2023
https://github.com/jayfoad created https://github.com/llvm/llvm-project/pull/68802
Rename advanceMBBIndex and findMBBIndex to getMBBLowerBound and add
getMBBUpperBound.
The motivations are:
- Make it clear what kind of search is being done, using names inspired
by std::upper/lower_bound.
- Simplify getMBBFromIndex which really wants an upper bound search and
previously had to work hard to get the result it wanted from a lower
bound search.
>From e36f398c810495005f53cf60eaa4af5480154240 Mon Sep 17 00:00:00 2001
From: Jay Foad <jay.foad at amd.com>
Date: Wed, 11 Oct 2023 13:52:24 +0100
Subject: [PATCH] [SlotIndexes] Use upper/lower bound terminology for MBB
searches. NFC.
Rename advanceMBBIndex and findMBBIndex to getMBBLowerBound and add
getMBBUpperBound.
The motivations are:
- Make it clear what kind of search is being done, using names inspired
by std::upper/lower_bound.
- Simplify getMBBFromIndex which really wants an upper bound search and
previously had to work hard to get the result it wanted from a lower
bound search.
---
llvm/include/llvm/CodeGen/SlotIndexes.h | 40 +++++++++++++------------
llvm/lib/CodeGen/VirtRegMap.cpp | 4 +--
2 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/SlotIndexes.h b/llvm/include/llvm/CodeGen/SlotIndexes.h
index 1a8d117322fcc6e..62008b052bb9159 100644
--- a/llvm/include/llvm/CodeGen/SlotIndexes.h
+++ b/llvm/include/llvm/CodeGen/SlotIndexes.h
@@ -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.
@@ -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
diff --git a/llvm/lib/CodeGen/VirtRegMap.cpp b/llvm/lib/CodeGen/VirtRegMap.cpp
index 5bdd86aebcd034e..48f4ee29fbe95d4 100644
--- a/llvm/lib/CodeGen/VirtRegMap.cpp
+++ b/llvm/lib/CodeGen/VirtRegMap.cpp
@@ -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
@@ -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);
More information about the llvm-commits
mailing list