[llvm-commits] CVS: llvm/lib/Analysis/DataStructure/DataStructure.cpp Steensgaard.cpp
Chris Lattner
lattner at cs.uiuc.edu
Tue Mar 29 11:17:15 PST 2005
Changes in directory llvm/lib/Analysis/DataStructure:
DataStructure.cpp updated: 1.235 -> 1.236
Steensgaard.cpp updated: 1.58 -> 1.59
---
Log message:
Fix a problem where we not marking incoming arguments to functions with
external linkage as incomplete.
---
Diffs of the changes: (+14 -5)
DataStructure.cpp | 3 ++-
Steensgaard.cpp | 16 ++++++++++++----
2 files changed, 14 insertions(+), 5 deletions(-)
Index: llvm/lib/Analysis/DataStructure/DataStructure.cpp
diff -u llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.235 llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.236
--- llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.235 Thu Mar 24 18:02:41 2005
+++ llvm/lib/Analysis/DataStructure/DataStructure.cpp Tue Mar 29 13:16:59 2005
@@ -1657,7 +1657,8 @@
for (ReturnNodesTy::iterator FI = ReturnNodes.begin(), E =ReturnNodes.end();
FI != E; ++FI) {
Function &F = *FI->first;
- for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I)
+ for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end();
+ I != E; ++I)
if (isPointerType(I->getType()))
markIncompleteNode(getNodeForValue(I).getNode());
markIncompleteNode(FI->second.getNode());
Index: llvm/lib/Analysis/DataStructure/Steensgaard.cpp
diff -u llvm/lib/Analysis/DataStructure/Steensgaard.cpp:1.58 llvm/lib/Analysis/DataStructure/Steensgaard.cpp:1.59
--- llvm/lib/Analysis/DataStructure/Steensgaard.cpp:1.58 Sun Mar 27 15:56:55 2005
+++ llvm/lib/Analysis/DataStructure/Steensgaard.cpp Tue Mar 29 13:16:59 2005
@@ -167,14 +167,22 @@
}
}
- // Remove our knowledge of what the return values of the functions are.
- ResultGraph->getReturnNodes().clear();
+ // Remove our knowledge of what the return values of the functions are, except
+ // for functions that are externally visible from this module (e.g. main). We
+ // keep these functions so that their arguments are marked incomplete.
+ for (DSGraph::ReturnNodesTy::iterator I =
+ ResultGraph->getReturnNodes().begin(),
+ E = ResultGraph->getReturnNodes().end(); I != E; )
+ if (I->first->hasInternalLinkage())
+ ResultGraph->getReturnNodes().erase(I++);
+ else
+ ++I;
// Update the "incomplete" markers on the nodes, ignoring unknownness due to
// incoming arguments...
ResultGraph->maskIncompleteMarkers();
- ResultGraph->markIncompleteNodes(DSGraph::IgnoreFormalArgs |
- DSGraph::IgnoreGlobals);
+ ResultGraph->markIncompleteNodes(DSGraph::IgnoreGlobals |
+ DSGraph::MarkFormalArgs);
// Remove any nodes that are dead after all of the merging we have done...
// FIXME: We should be able to disable the globals graph for steens!
More information about the llvm-commits
mailing list