diff options
author | Christopher Lamb <christopher.lamb@gmail.com> | 2007-07-31 16:18:07 +0000 |
---|---|---|
committer | Christopher Lamb <christopher.lamb@gmail.com> | 2007-07-31 16:18:07 +0000 |
commit | d5fcd572e0a0f3f96577e51cbeb34e9178e1dd8a (patch) | |
tree | 4938708fdc93fbdc0729df180990832f870b2855 | |
parent | 4747002ff985a1c1f7b094d7ae436a99e0fd5946 (diff) | |
download | external_llvm-d5fcd572e0a0f3f96577e51cbeb34e9178e1dd8a.zip external_llvm-d5fcd572e0a0f3f96577e51cbeb34e9178e1dd8a.tar.gz external_llvm-d5fcd572e0a0f3f96577e51cbeb34e9178e1dd8a.tar.bz2 |
Revert overly aggressive interpretation of noalias
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40635 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/BasicAliasAnalysis.cpp | 33 | ||||
-rw-r--r-- | test/Analysis/BasicAA/2007-07-31-NoAliasTest.ll | 12 |
2 files changed, 1 insertions, 44 deletions
diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index ffe7411..580f7e5 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<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 index f760de3..0000000 --- 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 |