mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 20:59:51 +00:00
Added a first-class representation for each call site that can be used
in the DS graphs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4227 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a3f8586d9d
commit
726bafda65
@ -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 DSNode; // Each node in the graph
|
||||
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
|
||||
@ -350,6 +353,35 @@ inline void DSNodeHandle::mergeWith(const DSNodeHandle &Node) {
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// 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.
|
||||
///
|
||||
@ -373,7 +405,7 @@ class DSGraph {
|
||||
// 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 @@ public:
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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 DSNode; // Each node in the graph
|
||||
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
|
||||
@ -350,6 +353,35 @@ inline void DSNodeHandle::mergeWith(const DSNodeHandle &Node) {
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// 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.
|
||||
///
|
||||
@ -373,7 +405,7 @@ class DSGraph {
|
||||
// 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 @@ public:
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user