Don't be COMPLETELY pessimistic in the face of function calls


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12413 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/AliasSetTracker.cpp b/lib/Analysis/AliasSetTracker.cpp
index 67cef76..d266c2a 100644
--- a/lib/Analysis/AliasSetTracker.cpp
+++ b/lib/Analysis/AliasSetTracker.cpp
@@ -93,9 +93,21 @@
   RefCount++;               // Entry points to alias set...
 }
 
-void AliasSet::addCallSite(CallSite CS) {
+void AliasSet::addCallSite(CallSite CS, AliasAnalysis &AA) {
   CallSites.push_back(CS);
-  AliasTy = MayAlias;         // FIXME: Too conservative?
+
+  if (Function *F = CS.getCalledFunction()) {
+    if (AA.doesNotAccessMemory(F))
+      return;
+    else if (AA.onlyReadsMemory(F)) {
+      AliasTy = MayAlias;
+      AccessTy = Refs;
+      return;
+    }
+  }
+
+  // FIXME: This should use mod/ref information to make this not suck so bad
+  AliasTy = MayAlias;
   AccessTy = ModRef;
 }
 
@@ -129,7 +141,11 @@
 }
 
 bool AliasSet::aliasesCallSite(CallSite CS, AliasAnalysis &AA) const {
-  // FIXME: Too conservative!
+  // FIXME: Use mod/ref information to prune this better!
+  if (Function *F = CS.getCalledFunction())
+    if (AA.doesNotAccessMemory(F))
+      return false;
+
   return true;
 }
 
@@ -213,7 +229,7 @@
     AliasSets.push_back(AliasSet());
     AS = &AliasSets.back();
   }
-  AS->addCallSite(CS); 
+  AS->addCallSite(CS, AA); 
 }
 
 void AliasSetTracker::add(Instruction *I) {