Give a back pointer to the IPModRef object to the FunctionModRefInfo object
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4576 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/Analysis/IPModRef.h b/include/llvm/Analysis/IPModRef.h
index 5a08dc0..290ae58 100644
--- a/include/llvm/Analysis/IPModRef.h
+++ b/include/llvm/Analysis/IPModRef.h
@@ -113,6 +113,7 @@
class FunctionModRefInfo {
const Function& F; // The function
+ IPModRef& IPModRefObj; // The IPModRef Object owning this
const DSGraph& funcTDGraph; // Top-down DS graph for function
const DSGraph& funcLocalGraph; // Local DS graph for function
ModRefInfo funcModRefInfo; // ModRefInfo for the function body
@@ -127,6 +128,7 @@
public:
/* ctor */ FunctionModRefInfo (const Function& func,
+ IPModRef& IPModRefObj,
const DSGraph& tdg,
const DSGraph& ldg);
/* dtor */ ~FunctionModRefInfo ();
diff --git a/lib/Analysis/DataStructure/IPModRef.cpp b/lib/Analysis/DataStructure/IPModRef.cpp
index 22d7caa..c32f442 100644
--- a/lib/Analysis/DataStructure/IPModRef.cpp
+++ b/lib/Analysis/DataStructure/IPModRef.cpp
@@ -44,9 +44,10 @@
// This constructor computes a node numbering for the TD graph.
//
FunctionModRefInfo::FunctionModRefInfo(const Function& func,
+ IPModRef& ipmro,
const DSGraph& tdg,
const DSGraph& ldg)
- : F(func),
+ : F(func), IPModRefObj(ipmro),
funcTDGraph(tdg),
funcLocalGraph(ldg),
funcModRefInfo(tdg.getGraphSize())
@@ -76,7 +77,7 @@
// Dummy function that will be replaced with one that inlines
// the callee's BU graph into the caller's TD graph.
//
-const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
+static const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
const CallInst& callInst)
{
return &funcTDGraph; // TEMPORARY
@@ -203,9 +204,9 @@
{
FunctionModRefInfo*& funcInfo = funcToModRefInfoMap[&func];
assert (funcInfo != NULL || computeIfMissing);
- if (funcInfo == NULL && computeIfMissing)
+ if (funcInfo == NULL)
{ // Create a new FunctionModRefInfo object
- funcInfo = new FunctionModRefInfo(func, // inserts into map
+ funcInfo = new FunctionModRefInfo(func, *this, // inserts into map
getAnalysis<TDDataStructures>().getDSGraph(func),
getAnalysis<LocalDataStructures>().getDSGraph(func));
funcInfo->computeModRef(func); // computes the mod/ref info
@@ -219,6 +220,7 @@
void IPModRef::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<LocalDataStructures>();
+ AU.addRequired<BUDataStructures>();
AU.addRequired<TDDataStructures>();
}
diff --git a/lib/Analysis/IPA/IPModRef.cpp b/lib/Analysis/IPA/IPModRef.cpp
index 22d7caa..c32f442 100644
--- a/lib/Analysis/IPA/IPModRef.cpp
+++ b/lib/Analysis/IPA/IPModRef.cpp
@@ -44,9 +44,10 @@
// This constructor computes a node numbering for the TD graph.
//
FunctionModRefInfo::FunctionModRefInfo(const Function& func,
+ IPModRef& ipmro,
const DSGraph& tdg,
const DSGraph& ldg)
- : F(func),
+ : F(func), IPModRefObj(ipmro),
funcTDGraph(tdg),
funcLocalGraph(ldg),
funcModRefInfo(tdg.getGraphSize())
@@ -76,7 +77,7 @@
// Dummy function that will be replaced with one that inlines
// the callee's BU graph into the caller's TD graph.
//
-const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
+static const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
const CallInst& callInst)
{
return &funcTDGraph; // TEMPORARY
@@ -203,9 +204,9 @@
{
FunctionModRefInfo*& funcInfo = funcToModRefInfoMap[&func];
assert (funcInfo != NULL || computeIfMissing);
- if (funcInfo == NULL && computeIfMissing)
+ if (funcInfo == NULL)
{ // Create a new FunctionModRefInfo object
- funcInfo = new FunctionModRefInfo(func, // inserts into map
+ funcInfo = new FunctionModRefInfo(func, *this, // inserts into map
getAnalysis<TDDataStructures>().getDSGraph(func),
getAnalysis<LocalDataStructures>().getDSGraph(func));
funcInfo->computeModRef(func); // computes the mod/ref info
@@ -219,6 +220,7 @@
void IPModRef::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<LocalDataStructures>();
+ AU.addRequired<BUDataStructures>();
AU.addRequired<TDDataStructures>();
}