aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Analysis/DSGraph.h19
-rw-r--r--include/llvm/Analysis/DataStructure/DSGraph.h19
-rw-r--r--lib/Analysis/DataStructure/IPModRef.cpp4
-rw-r--r--lib/Analysis/IPA/IPModRef.cpp4
4 files changed, 28 insertions, 18 deletions
diff --git a/include/llvm/Analysis/DSGraph.h b/include/llvm/Analysis/DSGraph.h
index a1725dec16..8e11dc010a 100644
--- a/include/llvm/Analysis/DSGraph.h
+++ b/include/llvm/Analysis/DSGraph.h
@@ -137,15 +137,20 @@ public:
// the scope of current analysis may have modified it), the 'Incomplete' flag
// is added to the NodeType.
//
- void markIncompleteNodes(bool markFormalArgs = true);
+ enum MarkIncompleteFlags {
+ MarkFormalArgs = 1, IgnoreFormalArgs = 0,
+ };
+ void markIncompleteNodes(unsigned Flags);
- // removeDeadNodes - Use a more powerful reachability analysis to eliminate
- // subgraphs that are unreachable. This often occurs because the data
- // structure doesn't "escape" into it's caller, and thus should be eliminated
- // from the caller's graph entirely. This is only appropriate to use when
- // inlining graphs.
+ // removeDeadNodes - Use a reachability analysis to eliminate subgraphs that
+ // are unreachable. This often occurs because the data structure doesn't
+ // "escape" into it's caller, and thus should be eliminated from the caller's
+ // graph entirely. This is only appropriate to use when inlining graphs.
//
- void removeDeadNodes();
+ enum RemoveDeadNodesFlags {
+ RemoveUnreachableGlobals = 1, KeepUnreachableGlobals = 0,
+ };
+ void removeDeadNodes(unsigned Flags);
// CloneFlags enum - Bits that may be passed into the cloneInto method to
// specify how to clone the function graph.
diff --git a/include/llvm/Analysis/DataStructure/DSGraph.h b/include/llvm/Analysis/DataStructure/DSGraph.h
index a1725dec16..8e11dc010a 100644
--- a/include/llvm/Analysis/DataStructure/DSGraph.h
+++ b/include/llvm/Analysis/DataStructure/DSGraph.h
@@ -137,15 +137,20 @@ public:
// the scope of current analysis may have modified it), the 'Incomplete' flag
// is added to the NodeType.
//
- void markIncompleteNodes(bool markFormalArgs = true);
+ enum MarkIncompleteFlags {
+ MarkFormalArgs = 1, IgnoreFormalArgs = 0,
+ };
+ void markIncompleteNodes(unsigned Flags);
- // removeDeadNodes - Use a more powerful reachability analysis to eliminate
- // subgraphs that are unreachable. This often occurs because the data
- // structure doesn't "escape" into it's caller, and thus should be eliminated
- // from the caller's graph entirely. This is only appropriate to use when
- // inlining graphs.
+ // removeDeadNodes - Use a reachability analysis to eliminate subgraphs that
+ // are unreachable. This often occurs because the data structure doesn't
+ // "escape" into it's caller, and thus should be eliminated from the caller's
+ // graph entirely. This is only appropriate to use when inlining graphs.
//
- void removeDeadNodes();
+ enum RemoveDeadNodesFlags {
+ RemoveUnreachableGlobals = 1, KeepUnreachableGlobals = 0,
+ };
+ void removeDeadNodes(unsigned Flags);
// CloneFlags enum - Bits that may be passed into the cloneInto method to
// specify how to clone the function graph.
diff --git a/lib/Analysis/DataStructure/IPModRef.cpp b/lib/Analysis/DataStructure/IPModRef.cpp
index 8c507e9323..48452fe8b1 100644
--- a/lib/Analysis/DataStructure/IPModRef.cpp
+++ b/lib/Analysis/DataStructure/IPModRef.cpp
@@ -175,7 +175,7 @@ DSGraph* FunctionModRefInfo::ResolveCallSiteModRefInfo(CallInst &CI,
assert(0 && "See error message");
// Remove dead nodes aggressively to match the caller's original graph.
- Result->removeDeadNodes();
+ Result->removeDeadNodes(DSGraph::KeepUnreachableGlobals);
// Step #4: Return the clone + the mapping (by ref)
return Result;
@@ -393,7 +393,7 @@ FunctionModRefInfo& IPModRef::getFuncInfo(const Function& func,
// The memory for this graph clone will be freed by FunctionModRefInfo.
DSGraph* funcTDGraph =
new DSGraph(getAnalysis<TDDataStructures>().getDSGraph(func));
- funcTDGraph->removeDeadNodes();
+ funcTDGraph->removeDeadNodes(DSGraph::KeepUnreachableGlobals);
funcInfo = new FunctionModRefInfo(func, *this, funcTDGraph); //auto-insert
funcInfo->computeModRef(func); // computes the mod/ref info
diff --git a/lib/Analysis/IPA/IPModRef.cpp b/lib/Analysis/IPA/IPModRef.cpp
index 8c507e9323..48452fe8b1 100644
--- a/lib/Analysis/IPA/IPModRef.cpp
+++ b/lib/Analysis/IPA/IPModRef.cpp
@@ -175,7 +175,7 @@ DSGraph* FunctionModRefInfo::ResolveCallSiteModRefInfo(CallInst &CI,
assert(0 && "See error message");
// Remove dead nodes aggressively to match the caller's original graph.
- Result->removeDeadNodes();
+ Result->removeDeadNodes(DSGraph::KeepUnreachableGlobals);
// Step #4: Return the clone + the mapping (by ref)
return Result;
@@ -393,7 +393,7 @@ FunctionModRefInfo& IPModRef::getFuncInfo(const Function& func,
// The memory for this graph clone will be freed by FunctionModRefInfo.
DSGraph* funcTDGraph =
new DSGraph(getAnalysis<TDDataStructures>().getDSGraph(func));
- funcTDGraph->removeDeadNodes();
+ funcTDGraph->removeDeadNodes(DSGraph::KeepUnreachableGlobals);
funcInfo = new FunctionModRefInfo(func, *this, funcTDGraph); //auto-insert
funcInfo->computeModRef(func); // computes the mod/ref info