summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-07-02 04:39:13 +0000
committerChris Lattner <sabre@nondot.org>2003-07-02 04:39:13 +0000
commit9cd048425140c0fc4a8420783acd8e129e5f4741 (patch)
tree5468c1b45fe4cc0460fb072021b32e8c45e6acb8 /lib
parent58f98d0bf0c029d931e4be3da8ca3dd6763e3807 (diff)
downloadllvm-9cd048425140c0fc4a8420783acd8e129e5f4741.tar.gz
llvm-9cd048425140c0fc4a8420783acd8e129e5f4741.tar.bz2
llvm-9cd048425140c0fc4a8420783acd8e129e5f4741.tar.xz
Reduce amount of work we do calculating mustaliases if the arg is a global
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7062 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Analysis/DataStructure/DataStructureAA.cpp27
1 files changed, 16 insertions, 11 deletions
diff --git a/lib/Analysis/DataStructure/DataStructureAA.cpp b/lib/Analysis/DataStructure/DataStructureAA.cpp
index bb28389e56..4940e9d0fc 100644
--- a/lib/Analysis/DataStructure/DataStructureAA.cpp
+++ b/lib/Analysis/DataStructure/DataStructureAA.cpp
@@ -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();
-
- // 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]);
+ // 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 (N->isComplete() && isSinglePhysicalObject(N))
+ RetVals.push_back(N->getGlobals()[0]);
+ }
}
return getAnalysis<AliasAnalysis>().getMustAliases(P, RetVals);