// 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.
// 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.
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;
// 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
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;
// 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