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

Vikram Adve vadve at cs.uiuc.edu
Sun Oct 20 13:05:01 PDT 2002


Changes in directory llvm/include/llvm/Analysis:

DSGraph.h updated: 1.9 -> 1.10

---
Log message:

Added a first-class representation for each call site that can be used
in the DS graphs.


---
Diffs of the changes:

Index: llvm/include/llvm/Analysis/DSGraph.h
diff -u llvm/include/llvm/Analysis/DSGraph.h:1.9 llvm/include/llvm/Analysis/DSGraph.h:1.10
--- llvm/include/llvm/Analysis/DSGraph.h:1.9	Fri Oct 18 13:22:44 2002
+++ llvm/include/llvm/Analysis/DSGraph.h	Sun Oct 20 13:04:43 2002
@@ -10,8 +10,10 @@
 
 #include <vector>
 #include <map>
+#include <functional>
 
 class Function;
+class CallInst;
 class Value;
 class GlobalValue;
 class Type;
@@ -20,6 +22,7 @@
 class DSGraph;                 // A graph for a function
 class DSNodeIterator;          // Data structure graph traversal iterator
 
+
 //===----------------------------------------------------------------------===//
 /// DSNodeHandle - Implement a "handle" to a data structure node that takes care
 /// of all of the add/un'refing of the node to prevent the backpointers in the
@@ -351,6 +354,35 @@
 
 
 //===----------------------------------------------------------------------===//
+/// DSCallSite - Representation of a call site via its call instruction,
+/// the DSNode handle for the callee function (or function pointer), and
+/// the DSNode handles for the function arguments.
+/// 
+class DSCallSite: public std::vector<DSNodeHandle> {
+  Function* caller;
+  CallInst* callInst;
+  DSCallSite();                         // do not implement
+
+public:
+  DSCallSite(Function& _caller, CallInst& _callInst)
+    : caller(&_caller), callInst(&_callInst) { }
+
+  // Copy constructor with helper for cloning nodes.  The helper should be a
+  // model of unary_function<const DSNodeHandle*, DSNodeHandle>, i.e., it
+  // should take a pointer to DSNodeHandle and return a fresh DSNodeHandle.
+  // If no helper is specified, this defaults to a simple copy constructor.
+  template<typename _CopierFunction>
+  DSCallSite::DSCallSite(const DSCallSite& FromCall,
+                         _CopierFunction nodeCopier = *(_CopierFunction*) 0);
+
+  Function&     getCaller() const           { return *caller; }
+  CallInst&     getCallInst() const         { return *callInst; }
+  DSNodeHandle  getReturnValueNode() const  { return (*this)[0]; }
+  DSNodeHandle  getCalleeNode() const       { return (*this)[1]; }
+};
+
+
+//===----------------------------------------------------------------------===//
 /// DSGraph - The graph that represents a function.
 ///
 class DSGraph {
@@ -373,7 +405,7 @@
   // call, the second is the function scalar being invoked, and the rest are
   // pointer arguments to the function.
   //
-  std::vector<std::vector<DSNodeHandle> > FunctionCalls;
+  std::vector<DSCallSite> FunctionCalls;
 
   void operator=(const DSGraph &); // DO NOT IMPLEMENT
 public:
@@ -400,10 +432,10 @@
   std::map<Value*, DSNodeHandle> &getValueMap() { return ValueMap; }
   const std::map<Value*, DSNodeHandle> &getValueMap() const { return ValueMap;}
 
-  std::vector<std::vector<DSNodeHandle> > &getFunctionCalls() {
+  std::vector<DSCallSite> &getFunctionCalls() {
     return FunctionCalls;
   }
-  const std::vector<std::vector<DSNodeHandle> > &getFunctionCalls() const {
+  const std::vector<DSCallSite> &getFunctionCalls() const {
     return FunctionCalls;
   }
 





More information about the llvm-commits mailing list