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 /lib/Analysis/BasicAliasAnalysis.cpp | |
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
Diffstat (limited to 'lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r-- | lib/Analysis/BasicAliasAnalysis.cpp | 33 |
1 files changed, 1 insertions, 32 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 |