[llvm-commits] [llvm] r42474 - in /llvm/trunk: include/llvm/ADT/DenseSet.h lib/Analysis/IPA/Andersens.cpp

Chris Lattner sabre at nondot.org
Sat Sep 29 17:47:20 PDT 2007


Author: lattner
Date: Sat Sep 29 19:47:20 2007
New Revision: 42474

URL: http://llvm.org/viewvc/llvm-project?rev=42474&view=rev
Log:
Add a new DenseSet abstraction.

Added:
    llvm/trunk/include/llvm/ADT/DenseSet.h
Modified:
    llvm/trunk/lib/Analysis/IPA/Andersens.cpp

Added: llvm/trunk/include/llvm/ADT/DenseSet.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/DenseSet.h?rev=42474&view=auto

==============================================================================
--- llvm/trunk/include/llvm/ADT/DenseSet.h (added)
+++ llvm/trunk/include/llvm/ADT/DenseSet.h Sat Sep 29 19:47:20 2007
@@ -0,0 +1,61 @@
+//===- llvm/ADT/DenseSet.h - Dense probed hash table ------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by Chris Lattner and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the DenseSet class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ADT_DENSESET_H
+#define LLVM_ADT_DENSESET_H
+
+#include "llvm/ADT/DenseMap.h"
+
+namespace llvm {
+
+/// DenseSet - This implements a dense probed hash-table based set.
+///
+/// FIXME: This is currently implemented directly in terms of DenseMap, this
+/// should be optimized later if there is a need.
+template<typename ValueT, typename ValueInfoT = DenseMapInfo<ValueT> >
+class DenseSet {
+  DenseMap<ValueT, char, ValueInfoT> TheMap;
+public:
+  DenseSet(const DenseSet &Other) : TheMap(Other.TheMap) {}
+  explicit DenseSet(unsigned NumInitBuckets = 64) : TheMap(NumInitBuckets) {}
+  
+  bool empty() const { return TheMap.empty(); }
+  unsigned size() const { return TheMap.size(); }
+  
+  // TODO add iterators.
+  
+  void clear() {
+    TheMap.clear();
+  }
+  
+  bool count(const ValueT &V) {
+    return TheMap.count(V);
+  }
+  
+  void insert(const ValueT &V) {
+    TheMap[V] = 0;
+  }
+  
+  void erase(const ValueT &V) {
+    TheMap.erase(V);
+  }
+  
+  DenseSet &operator=(const DenseSet &RHS) {
+    TheMap = RHS.TheMap;
+    return *this;
+  }
+};
+
+} // end namespace llvm
+
+#endif

Modified: llvm/trunk/lib/Analysis/IPA/Andersens.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/Andersens.cpp?rev=42474&r1=42473&r2=42474&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/IPA/Andersens.cpp (original)
+++ llvm/trunk/lib/Analysis/IPA/Andersens.cpp Sat Sep 29 19:47:20 2007
@@ -65,7 +65,7 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/ADT/Statistic.h"
 #include "llvm/ADT/SparseBitVector.h"
-#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/DenseSet.h"
 #include <algorithm>
 #include <set>
 #include <list>
@@ -1773,7 +1773,7 @@
 /// replaced by their the pointer equivalence class representative.
 void Andersens::RewriteConstraints() {
   std::vector<Constraint> NewConstraints;
-  DenseMap<Constraint, bool, ConstraintKeyInfo> Seen;
+  DenseSet<Constraint, ConstraintKeyInfo> Seen;
 
   PEClass2Node.clear();
   PENLEClass2Node.clear();
@@ -1811,10 +1811,10 @@
     C.Src = FindEquivalentNode(RHSNode, RHSLabel);
     C.Dest = FindEquivalentNode(FindNode(LHSNode), LHSLabel);
     if (C.Src == C.Dest && C.Type == Constraint::Copy
-        || Seen[C] == true)
+        || Seen.count(C))
       continue;
 
-    Seen[C] = true;
+    Seen.insert(C);
     NewConstraints.push_back(C);
   }
   Constraints.swap(NewConstraints);





More information about the llvm-commits mailing list