Skip to content

Commit dafbe78

Browse files
committed
[EquivClasses] Introduce members iterator-helper (NFC)
1 parent db5e401 commit dafbe78

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

llvm/include/llvm/ADT/EquivalenceClasses.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#ifndef LLVM_ADT_EQUIVALENCECLASSES_H
1616
#define LLVM_ADT_EQUIVALENCECLASSES_H
1717

18+
#include "llvm/ADT/iterator_range.h"
1819
#include <cassert>
1920
#include <cstddef>
2021
#include <cstdint>
@@ -178,6 +179,9 @@ class EquivalenceClasses {
178179
member_iterator member_end() const {
179180
return member_iterator(nullptr);
180181
}
182+
iterator_range<member_iterator> members(iterator I) const {
183+
return make_range(member_begin(I), member_end());
184+
}
181185

182186
/// findValue - Return an iterator to the specified value. If it does not
183187
/// exist, end() is returned.

llvm/lib/Analysis/LoopAccessAnalysis.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -527,9 +527,8 @@ void RuntimePointerChecking::groupChecks(
527527
// iteration order within an equivalence class member is only dependent on
528528
// the order in which unions and insertions are performed on the
529529
// equivalence class, the iteration order is deterministic.
530-
for (auto MI = DepCands.member_begin(LeaderI), ME = DepCands.member_end();
531-
MI != ME; ++MI) {
532-
auto PointerI = PositionMap.find(MI->getPointer());
530+
for (const auto &MI : DepCands.members(LeaderI)) {
531+
auto PointerI = PositionMap.find(MI.getPointer());
533532
assert(PointerI != PositionMap.end() &&
534533
"pointer in equivalence class not found in PositionMap");
535534
for (unsigned Pointer : PointerI->second) {

llvm/lib/Analysis/VectorUtils.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -845,7 +845,7 @@ llvm::computeMinimumValueSizes(ArrayRef<BasicBlock *> Blocks, DemandedBits &DB,
845845

846846
for (auto I = ECs.begin(), E = ECs.end(); I != E; ++I) {
847847
uint64_t LeaderDemandedBits = 0;
848-
for (Value *M : llvm::make_range(ECs.member_begin(I), ECs.member_end()))
848+
for (Value *M : ECs.members(I))
849849
LeaderDemandedBits |= DBits[M];
850850

851851
uint64_t MinBW = llvm::bit_width(LeaderDemandedBits);
@@ -857,15 +857,15 @@ llvm::computeMinimumValueSizes(ArrayRef<BasicBlock *> Blocks, DemandedBits &DB,
857857
// indvars.
858858
// If we are required to shrink a PHI, abandon this entire equivalence class.
859859
bool Abort = false;
860-
for (Value *M : llvm::make_range(ECs.member_begin(I), ECs.member_end()))
860+
for (Value *M : ECs.members(I))
861861
if (isa<PHINode>(M) && MinBW < M->getType()->getScalarSizeInBits()) {
862862
Abort = true;
863863
break;
864864
}
865865
if (Abort)
866866
continue;
867867

868-
for (Value *M : llvm::make_range(ECs.member_begin(I), ECs.member_end())) {
868+
for (Value *M : ECs.members(I)) {
869869
auto *MI = dyn_cast<Instruction>(M);
870870
if (!MI)
871871
continue;

llvm/unittests/ADT/EquivalenceClassesTest.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,22 @@ TEST(EquivalenceClassesTest, TwoSets) {
6666
EXPECT_FALSE(EqClasses.isEquivalent(i, j));
6767
}
6868

69+
TEST(EquivalenceClassesTest, MembersIterator) {
70+
EquivalenceClasses<int> EC;
71+
EC.unionSets(1, 2);
72+
EC.insert(4);
73+
EC.insert(5);
74+
EC.unionSets(5, 1);
75+
EXPECT_EQ(EC.getNumClasses(), 2u);
76+
77+
std::set<int> ActualMembers;
78+
std::set<int> ExpectedMembers{1, 2, 5};
79+
EquivalenceClasses<int>::iterator I = EC.findValue(EC.getLeaderValue(1));
80+
for (auto M : EC.members(I))
81+
ActualMembers.insert(M);
82+
EXPECT_EQ(ActualMembers, ExpectedMembers);
83+
}
84+
6985
// Type-parameterized tests: Run the same test cases with different element
7086
// types.
7187
template <typename T> class ParameterizedTest : public testing::Test {};

0 commit comments

Comments
 (0)