summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Transforms/Scalar/NewGVN.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Scalar/NewGVN.cpp b/llvm/lib/Transforms/Scalar/NewGVN.cpp
index 94973c986e9..4ae16eda269 100644
--- a/llvm/lib/Transforms/Scalar/NewGVN.cpp
+++ b/llvm/lib/Transforms/Scalar/NewGVN.cpp
@@ -366,9 +366,8 @@ public:
// True if this class has no memory members.
bool definesNoMemory() const { return StoreCount == 0 && memory_empty(); }
- // Return true if two congruence classes are equivalent to each other. This
- // means
- // that every field but the ID number and the dead field are equivalent.
+ // Return true if two congruence classes are equivalent to each other. This
+ // means that every field but the ID number and the dead field are equivalent.
bool isEquivalentTo(const CongruenceClass *Other) const {
if (!Other)
return false;
@@ -383,10 +382,12 @@ public:
if (!DefiningExpr || !Other->DefiningExpr ||
*DefiningExpr != *Other->DefiningExpr)
return false;
- // We need some ordered set
- std::set<Value *> AMembers(Members.begin(), Members.end());
- std::set<Value *> BMembers(Members.begin(), Members.end());
- return AMembers == BMembers;
+
+ if (Members.size() != Other->Members.size())
+ return false;
+
+ return all_of(Members,
+ [&](const Value *V) { return Other->Members.count(V); });
}
private:
OpenPOWER on IntegriCloud