[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