[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