[llvm-commits] CVS: llvm/include/llvm/Analysis/DSGraph.h
Chris Lattner
lattner at cs.uiuc.edu
Tue Jan 27 20:43:02 PST 2004
Changes in directory llvm/include/llvm/Analysis:
DSGraph.h updated: 1.68 -> 1.69
---
Log message:
Pull the ScalarMap out into something that is more structured than what we had
before. This allows us to have a place to implement optimizations in a
structured way.
---
Diffs of the changes: (+42 -1)
Index: llvm/include/llvm/Analysis/DSGraph.h
diff -u llvm/include/llvm/Analysis/DSGraph.h:1.68 llvm/include/llvm/Analysis/DSGraph.h:1.69
--- llvm/include/llvm/Analysis/DSGraph.h:1.68 Tue Jan 27 15:48:35 2004
+++ llvm/include/llvm/Analysis/DSGraph.h Tue Jan 27 20:42:12 2004
@@ -22,11 +22,52 @@
class GlobalValue;
//===----------------------------------------------------------------------===//
+/// DSScalarMap - An instance of this class is used to keep track of all of
+/// which DSNode each scalar in a function points to. This is specialized to
+/// keep track of globals with nodes in the function, and to keep track of the
+/// unique DSNodeHandle being used by the scalar map.
+///
+/// This class is crucial to the efficiency of DSA with some large SCC's. In
+/// these cases, the cost of iterating over the scalar map dominates the cost
+/// of DSA. In all of these cases, the DSA phase is really trying to identify
+/// globals or unique node handles active in the function.
+///
+
+class DSScalarMap {
+ typedef hash_map<Value*, DSNodeHandle> ValueMapTy;
+ ValueMapTy ValueMap;
+public:
+
+ // Compatibility methods: provide an interface compatible with a map of
+ // Value* to DSNodeHandle's.
+ typedef ValueMapTy::const_iterator const_iterator;
+ typedef ValueMapTy::iterator iterator;
+ iterator begin() { return ValueMap.begin(); }
+ iterator end() { return ValueMap.end(); }
+ const_iterator begin() const { return ValueMap.begin(); }
+ const_iterator end() const { return ValueMap.end(); }
+ iterator find(Value *V) { return ValueMap.find(V); }
+ const_iterator find(Value *V) const { return ValueMap.find(V); }
+ unsigned count(Value *V) const { return ValueMap.count(V); }
+
+ void erase(iterator I) { ValueMap.erase(I); }
+ void erase(Value *V) { ValueMap.erase(V); }
+
+ DSNodeHandle &operator[](Value *V) { return ValueMap[V]; }
+
+ void clear() {
+ ValueMap.clear();
+ }
+
+};
+
+
+//===----------------------------------------------------------------------===//
/// DSGraph - The graph that represents a function.
///
struct DSGraph {
// Public data-type declarations...
- typedef hash_map<Value*, DSNodeHandle> ScalarMapTy;
+ typedef DSScalarMap ScalarMapTy;
typedef hash_map<Function*, DSNodeHandle> ReturnNodesTy;
typedef hash_set<GlobalValue*> GlobalSetTy;
More information about the llvm-commits
mailing list