Revert overly aggressive interpretation of noalias
authorChristopher Lamb <christopher.lamb@gmail.com>
Tue, 31 Jul 2007 16:18:07 +0000 (16:18 +0000)
committerChristopher Lamb <christopher.lamb@gmail.com>
Tue, 31 Jul 2007 16:18:07 +0000 (16:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40635 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/BasicAliasAnalysis.cpp
test/Analysis/BasicAA/2007-07-31-NoAliasTest.ll [deleted file]

index ffe7411b778e12a449e5ed2c74521f4493f92932..580f7e5d9e44b258ca5b527a3944326fa263c605 100644 (file)
@@ -18,7 +18,6 @@
 #include "llvm/Constants.h"
 #include "llvm/DerivedTypes.h"
 #include "llvm/Function.h"
-#include "llvm/ParameterAttributes.h"
 #include "llvm/GlobalVariable.h"
 #include "llvm/Instructions.h"
 #include "llvm/Pass.h"
@@ -295,21 +294,6 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size,
 
   // Pointing at a discernible object?
   if (O1) {
-    // Check for noalias attribute
-    if (isa<Argument>(O1)) {
-      const Argument *Arg = cast<Argument>(O1);
-      const Function *Func = Arg->getParent();
-      const ParamAttrsList *Attr = Func->getFunctionType()->getParamAttrs();
-      if (Attr) {
-        unsigned Idx = 1;
-        for (Function::const_arg_iterator I = Func->arg_begin(), 
-              E = Func->arg_end(); I != E; ++I, ++Idx) {
-          if (&(*I) == Arg && 
-               Attr->paramHasAttr(Idx, ParamAttr::NoAlias))
-            return NoAlias;
-        }
-      }
-    }
     if (O2) {
       if (isa<Argument>(O1)) {
         // Incoming argument cannot alias locally allocated object!
@@ -323,22 +307,7 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size,
         // If they are two different objects, we know that we have no alias...
         return NoAlias;
       }
-      
-      // Check for noalias atrribute independently from above logic
-      if (isa<Argument>(O2)) {
-        const Argument *Arg = cast<Argument>(O2);
-        const Function *Func = Arg->getParent();
-        const ParamAttrsList *Attr = Func->getFunctionType()->getParamAttrs();
-        if (Attr) {
-          unsigned Idx = 1;
-          for (Function::const_arg_iterator I = Func->arg_begin(), 
-                E = Func->arg_end(); I != E; ++I, ++Idx) {
-            if (&(*I) == Arg && 
-                 Attr->paramHasAttr(Idx, ParamAttr::NoAlias))
-              return NoAlias;
-          }
-        }
-      }
+
       // If they are the same object, they we can look at the indexes.  If they
       // index off of the object is the same for both pointers, they must alias.
       // If they are provably different, they must not alias.  Otherwise, we
diff --git a/test/Analysis/BasicAA/2007-07-31-NoAliasTest.ll b/test/Analysis/BasicAA/2007-07-31-NoAliasTest.ll
deleted file mode 100644 (file)
index f760de3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-; RUN:   llvm-as %s -o - | opt -aa-eval -print-may-aliases -disable-output |& grep '1 may alias'
-; RUN:   llvm-as %s -o - | opt -aa-eval -print-may-aliases -disable-output |& grep '5 no alias'
-; RUN:   llvm-as %s -o - | opt -aa-eval -print-may-aliases -disable-output |& grep 'MayAlias:     i32* %ptr4, i32* %ptr2'
-
-define void @_Z3fooPiS_RiS_(i32* noalias  %ptr1, i32* %ptr2, i32* noalias  %ptr3, i32* %ptr4) {
-entry:
-        store i32 0, i32* %ptr1
-        store i32 0, i32* %ptr2
-        store i32 0, i32* %ptr3
-        store i32 0, i32* %ptr4
-        ret void
-}
\ No newline at end of file