[llvm-commits] CVS: llvm/include/llvm/Analysis/DSGraph.h

Chris Lattner lattner at cs.uiuc.edu
Tue Jan 27 21:02:02 PST 2004


Changes in directory llvm/include/llvm/Analysis:

DSGraph.h updated: 1.69 -> 1.70

---
Log message:

Keep track of all of the globals inserted into the scalar map


---
Diffs of the changes:  (+26 -4)

Index: llvm/include/llvm/Analysis/DSGraph.h
diff -u llvm/include/llvm/Analysis/DSGraph.h:1.69 llvm/include/llvm/Analysis/DSGraph.h:1.70
--- llvm/include/llvm/Analysis/DSGraph.h:1.69	Tue Jan 27 20:42:12 2004
+++ llvm/include/llvm/Analysis/DSGraph.h	Tue Jan 27 21:01:22 2004
@@ -32,10 +32,12 @@
 /// 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;
+
+  typedef hash_set<GlobalValue*> GlobalSetTy;
+  GlobalSetTy GlobalSet;
 public:
 
   // Compatibility methods: provide an interface compatible with a map of 
@@ -50,15 +52,35 @@
   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); }
+  void erase(Value *V) { erase(find(V)); }
 
-  DSNodeHandle &operator[](Value *V) { return ValueMap[V]; }
+  DSNodeHandle &operator[](Value *V) {
+    std::pair<iterator,bool> IP = 
+      ValueMap.insert(std::make_pair(V, DSNodeHandle()));
+    if (IP.second) {  // Inserted the new entry into the map.
+      if (GlobalValue *GV = dyn_cast<GlobalValue>(V))
+        GlobalSet.insert(GV);
+    }
+    return IP.first->second;
+  }
+
+  void erase(iterator I) { 
+    assert(I != ValueMap.end() && "Cannot erase end!");
+    if (GlobalValue *GV = dyn_cast<GlobalValue>(I->first))
+      GlobalSet.erase(GV);
+    ValueMap.erase(I); 
+  }
 
   void clear() {
     ValueMap.clear();
+    GlobalSet.clear();
   }
 
+  // Access to the global set: the set of all globals currently in the
+  // scalar map.
+  typedef GlobalSetTy::const_iterator global_iterator;
+  global_iterator global_begin() const { return GlobalSet.begin(); }
+  global_iterator global_end() const { return GlobalSet.end(); }
 };
 
 





More information about the llvm-commits mailing list