IntEqClasses: Let join() return the new leader
authorMatthias Braun <matze@braunis.de>
Fri, 8 Jan 2016 01:16:39 +0000 (01:16 +0000)
committerMatthias Braun <matze@braunis.de>
Fri, 8 Jan 2016 01:16:39 +0000 (01:16 +0000)
The new leader is known anyway so we can return it for some micro
optimization in code where it is easy to pass along the result to the
next join().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257130 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/IntEqClasses.h
lib/Support/IntEqClasses.cpp

index 8e75c48e37645c24b894a92dae4658cce70a2156..0baee2f11a79daea1322bfaedc432db932eeea1d 100644 (file)
@@ -53,10 +53,10 @@ public:
     NumClasses = 0;
   }
 
     NumClasses = 0;
   }
 
-  /// join - Join the equivalence classes of a and b. After joining classes,
-  /// findLeader(a) == findLeader(b).
-  /// This requires an uncompressed map.
-  void join(unsigned a, unsigned b);
+  /// Join the equivalence classes of a and b. After joining classes,
+  /// findLeader(a) == findLeader(b). This requires an uncompressed map.
+  /// Returns the new leader.
+  unsigned join(unsigned a, unsigned b);
 
   /// findLeader - Compute the leader of a's equivalence class. This is the
   /// smallest member of the class.
 
   /// findLeader - Compute the leader of a's equivalence class. This is the
   /// smallest member of the class.
index 11344956e4c91e4b7f8efee775fcfd04c02a0050..ff213570807c3f1954defa89d6ff301dd59d880c 100644 (file)
@@ -29,7 +29,7 @@ void IntEqClasses::grow(unsigned N) {
     EC.push_back(EC.size());
 }
 
     EC.push_back(EC.size());
 }
 
-void IntEqClasses::join(unsigned a, unsigned b) {
+unsigned IntEqClasses::join(unsigned a, unsigned b) {
   assert(NumClasses == 0 && "join() called after compress().");
   unsigned eca = EC[a];
   unsigned ecb = EC[b];
   assert(NumClasses == 0 && "join() called after compress().");
   unsigned eca = EC[a];
   unsigned ecb = EC[b];
@@ -41,6 +41,8 @@ void IntEqClasses::join(unsigned a, unsigned b) {
       EC[b] = eca, b = ecb, ecb = EC[b];
     else
       EC[a] = ecb, a = eca, eca = EC[a];
       EC[b] = eca, b = ecb, ecb = EC[b];
     else
       EC[a] = ecb, a = eca, eca = EC[a];
+
+  return eca;
 }
 
 unsigned IntEqClasses::findLeader(unsigned a) const {
 }
 
 unsigned IntEqClasses::findLeader(unsigned a) const {