Author: Florian Hahn Date: 2025-04-01T08:45:46+01:00 New Revision: 64d493f987dc24b3d7e45daade9b0e8bfa1cc471
URL: https://github.com/llvm/llvm-project/commit/64d493f987dc24b3d7e45daade9b0e8bfa1cc471 DIFF: https://github.com/llvm/llvm-project/commit/64d493f987dc24b3d7e45daade9b0e8bfa1cc471.diff LOG: [EquivalenceClasses] Return ECValue directly from insert (NFC). Removes a redundant lookup in the mapping.: Added: Modified: clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp llvm/include/llvm/ADT/EquivalenceClasses.h llvm/lib/Transforms/IPO/LowerTypeTests.cpp llvm/lib/Transforms/Utils/SplitModule.cpp Removed: ################################################################################ diff --git a/clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp b/clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp index 02ec0d0213300..bbd73ef9b2f03 100644 --- a/clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp +++ b/clang/lib/Analysis/FlowSensitive/SimplifyConstraints.cpp @@ -155,7 +155,7 @@ void simplifyConstraints(llvm::SetVector<const Formula *> &Constraints, It != End; ++It) { if (!It->isLeader()) continue; - Atom At = *EquivalentAtoms.findLeader(It); + Atom At = *EquivalentAtoms.findLeader(*It); if (TrueAtoms.contains(At) || FalseAtoms.contains(At)) continue; llvm::SmallVector<Atom> Atoms = diff --git a/llvm/include/llvm/ADT/EquivalenceClasses.h b/llvm/include/llvm/ADT/EquivalenceClasses.h index f9c7819f18806..be46a4445c3f2 100644 --- a/llvm/include/llvm/ADT/EquivalenceClasses.h +++ b/llvm/include/llvm/ADT/EquivalenceClasses.h @@ -175,6 +175,11 @@ class EquivalenceClasses { // Only leaders provide anything to iterate over. return member_iterator(I->isLeader() ? &*I : nullptr); } + member_iterator member_begin(const ECValue &ECV) const { + // Only leaders provide anything to iterate over. + return member_iterator(ECV.getLeader()); + } + member_iterator member_end() const { return member_iterator(nullptr); } @@ -216,26 +221,28 @@ class EquivalenceClasses { /// insert - Insert a new value into the union/find set, ignoring the request /// if the value already exists. - iterator insert(const ElemTy &Data) { - return TheMapping.insert(ECValue(Data)).first; + const ECValue &insert(const ElemTy &Data) { + return *TheMapping.insert(ECValue(Data)).first; } /// findLeader - Given a value in the set, return a member iterator for the /// equivalence class it is in. This does the path-compression part that /// makes union-find "union findy". This returns an end iterator if the value /// is not in the equivalence class. - member_iterator findLeader(iterator I) const { - if (I == TheMapping.end()) return member_end(); - return member_iterator(I->getLeader()); - } member_iterator findLeader(const ElemTy &V) const { - return findLeader(TheMapping.find(V)); + auto I = TheMapping.find(V); + if (I == TheMapping.end()) + return member_iterator(nullptr); + return findLeader(*I); + } + member_iterator findLeader(const ECValue &ECV) const { + return member_iterator(ECV.getLeader()); } /// union - Merge the two equivalence sets for the specified values, inserting /// them if they do not already exist in the equivalence set. member_iterator unionSets(const ElemTy &V1, const ElemTy &V2) { - iterator V1I = insert(V1), V2I = insert(V2); + const ECValue &V1I = insert(V1), &V2I = insert(V2); return unionSets(findLeader(V1I), findLeader(V2I)); } member_iterator unionSets(member_iterator L1, member_iterator L2) { diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp index 6cc5d1dc78d99..299b3a9162389 100644 --- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp +++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp @@ -2239,7 +2239,7 @@ bool LowerTypeTestsModule::lower() { auto Ins = TypeIdUsers.insert({TypeId, {}}); if (Ins.second) { // Add the type identifier to the equivalence class. - GlobalClassesTy::iterator GCI = GlobalClasses.insert(TypeId); + auto &GCI = GlobalClasses.insert(TypeId); GlobalClassesTy::member_iterator CurSet = GlobalClasses.findLeader(GCI); // Add the referenced globals to the type identifier's equivalence class. diff --git a/llvm/lib/Transforms/Utils/SplitModule.cpp b/llvm/lib/Transforms/Utils/SplitModule.cpp index 4f174fbe48b75..07956f3a191c4 100644 --- a/llvm/lib/Transforms/Utils/SplitModule.cpp +++ b/llvm/lib/Transforms/Utils/SplitModule.cpp @@ -203,7 +203,7 @@ static void findPartitions(Module &M, ClusterIDMapType &ClusterIDMap, << "\n"); for (ClusterMapType::member_iterator MI = - GVtoClusterMap.findLeader(I.second); + GVtoClusterMap.findLeader(*I.second); MI != GVtoClusterMap.member_end(); ++MI) { if (!Visited.insert(*MI).second) continue; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits