From: Christopher Lamb Date: Tue, 31 Jul 2007 16:18:07 +0000 (+0000) Subject: Revert overly aggressive interpretation of noalias X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=321ff4e6d55401d8f30b9c10023f6fea1803ba18;p=oota-llvm.git Revert overly aggressive interpretation of noalias git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40635 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index ffe7411b778..580f7e5d9e4 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -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(O1)) { - const Argument *Arg = cast(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(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(O2)) { - const Argument *Arg = cast(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 index f760de35cdc..00000000000 --- a/test/Analysis/BasicAA/2007-07-31-NoAliasTest.ll +++ /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