Ok, the assertion was bogus. Calls that do not read/write memory should not
authorChris Lattner <sabre@nondot.org>
Mon, 15 Mar 2004 06:28:07 +0000 (06:28 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 15 Mar 2004 06:28:07 +0000 (06:28 +0000)
have an alias set, just like adds and subtracts don't.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12422 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/AliasSetTracker.cpp

index 450ba935bc0c8fe617bea9508df607fbc13586e6..0fb419266ce972adaaf3bf8de97a63c7cf704dbe 100644 (file)
@@ -117,6 +117,8 @@ void AliasSet::addCallSite(CallSite CS, AliasAnalysis &AA) {
 bool AliasSet::aliasesPointer(const Value *Ptr, unsigned Size,
                               AliasAnalysis &AA) const {
   if (AliasTy == MustAlias) {
+    assert(CallSites.empty() && "Illegal must alias set!");
+
     // If this is a set of MustAliases, only check to see if the pointer aliases
     // SOME value in the set...
     HashNodePair *SomePtr = getSomePointer();
@@ -222,6 +224,10 @@ void AliasSetTracker::add(StoreInst *SI) {
 
 
 void AliasSetTracker::add(CallSite CS) {
+  if (Function *F = CS.getCalledFunction())
+    if (AA.doesNotAccessMemory(F))
+      return;
+
   AliasSet *AS = findAliasSetForCallSite(CS);
   if (!AS) {
     AliasSets.push_back(AliasSet());