Fix logical error in TD pass: we should clear Mod/Ref bits of each caller

before inlining their graphs into a function.  To support this,
added flags to CloneFlags to strip/keep Mod/Ref bits.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4836 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Vikram S. Adve
2002-11-27 17:41:13 +00:00
parent e127a14991
commit 61ff02982f
3 changed files with 17 additions and 8 deletions
@@ -344,8 +344,9 @@ DSGraph &BUDataStructures::calculateGraph(Function &F) {
#endif
// Handle self recursion by resolving the arguments and return value
Graph.mergeInGraph(CS, GI, DSGraph::StripAllocaBit |
DSGraph::DontCloneCallNodes);
Graph.mergeInGraph(CS, GI,
DSGraph::KeepModRefBits |
DSGraph::StripAllocaBit | DSGraph::DontCloneCallNodes);
#if 0
Graph.writeGraphToFile(std::cerr, "bu_" + F.getName() + "_after_" +
@@ -424,7 +425,8 @@ DSGraph &BUDataStructures::inlineNonSCCGraphs(Function &F,
<< GI.getAuxFunctionCalls().size() << "]\n");
// Handle self recursion by resolving the arguments and return value
Graph.mergeInGraph(CS, GI, DSGraph::StripAllocaBit |
Graph.mergeInGraph(CS, GI,
DSGraph::KeepModRefBits | DSGraph::StripAllocaBit |
DSGraph::DontCloneCallNodes);
}
}
@@ -508,7 +510,8 @@ DSGraph &BUDataStructures::calculateSCCGraph(Function &F,
<< GI.getAuxFunctionCalls().size() << "]\n");
// Handle self recursion by resolving the arguments and return value
Graph.mergeInGraph(CS, GI, DSGraph::StripAllocaBit |
Graph.mergeInGraph(CS, GI,
DSGraph::KeepModRefBits | DSGraph::StripAllocaBit |
DSGraph::DontCloneCallNodes);
if (SCCFunctions.count(Callee))