Reduce amount of work we do calculating mustaliases if the arg is a global

llvm-svn: 7062
This commit is contained in:
Chris Lattner 2003-07-02 04:39:13 +00:00
parent 03f3cb1af7
commit 0b61cdd191
1 changed files with 16 additions and 11 deletions

View File

@ -146,17 +146,22 @@ AliasAnalysis::AliasResult DSAA::alias(const Value *V1, unsigned V1Size,
/// specified vector.
///
void DSAA::getMustAliases(Value *P, std::vector<Value*> &RetVals) {
DSGraph *G = getGraphForValue(P);
if (!G) G = &TD->getGlobalsGraph();
// Currently the only must alias information we can provide is to say that
// something is equal to a global value. If we already have a global value,
// don't get worked up about it.
if (!isa<GlobalValue>(P)) {
DSGraph *G = getGraphForValue(P);
if (!G) G = &TD->getGlobalsGraph();
// The only must alias information we can currently determine occurs when the
// node for P is a global node with only one entry.
const DSGraph::ScalarMapTy &GSM = G->getScalarMap();
DSGraph::ScalarMapTy::const_iterator I = GSM.find(P);
if (I != GSM.end()) {
DSNode *N = I->second.getNode();
if (isSinglePhysicalObject(N))
RetVals.push_back(N->getGlobals()[0]);
// The only must alias information we can currently determine occurs when
// the node for P is a global node with only one entry.
const DSGraph::ScalarMapTy &GSM = G->getScalarMap();
DSGraph::ScalarMapTy::const_iterator I = GSM.find(P);
if (I != GSM.end()) {
DSNode *N = I->second.getNode();
if (N->isComplete() && isSinglePhysicalObject(N))
RetVals.push_back(N->getGlobals()[0]);
}
}
return getAnalysis<AliasAnalysis>().getMustAliases(P, RetVals);