[llvm-commits] [llvm] r47247 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
Evan Cheng
evan.cheng at apple.com
Mon Feb 18 11:43:30 PST 2008
Hi Resistor,
This breaks MultiSource/Benchmarks/Prolangs-C++/city under x86-64.
Please take a look.
Thanks,
Evan
On Feb 17, 2008, at 1:29 PM, Owen Anderson wrote:
> Author: resistor
> Date: Sun Feb 17 15:29:08 2008
> New Revision: 47247
>
> URL: http://llvm.org/viewvc/llvm-project?rev=47247&view=rev
> Log:
> Teach getModRefInfo that memcpy, memmove, and memset don't "capture"
> memory addresses.
> Also, noalias arguments are be considered "like" stack allocated
> ones for this purpose, because
> the only way they can be modref'ed is if they escape somewhere in
> the current function.
>
> Modified:
> llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
>
> Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=47247&r1=47246&r2=47247&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
> +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Sun Feb 17
> 15:29:08 2008
> @@ -21,7 +21,7 @@
> #include "llvm/ParameterAttributes.h"
> #include "llvm/GlobalVariable.h"
> #include "llvm/Instructions.h"
> -#include "llvm/Intrinsics.h"
> +#include "llvm/IntrinsicInst.h"
> #include "llvm/Pass.h"
> #include "llvm/Target/TargetData.h"
> #include "llvm/ADT/SmallVector.h"
> @@ -228,6 +228,13 @@
> // If returned, the address will escape to calling functions,
> but no
> // callees could modify it.
> break; // next use
> + case Instruction::Call:
> + // If the call is to a few known safe intrinsics, we know
> that it does
> + // not escape
> + if (isa<MemIntrinsic>(I))
> + return false;
> + else
> + return true;
> default:
> return true;
> }
> @@ -247,8 +254,11 @@
> // Allocations and byval arguments are "new" objects.
> if (Object &&
> (isa<AllocationInst>(Object) ||
> - (isa<Argument>(Object) && cast<Argument>(Object)-
> >hasByValAttr()))) {
> - // Okay, the pointer is to a stack allocated object. If we
> can prove that
> + (isa<Argument>(Object) &&
> + (cast<Argument>(Object)-
> >hasByValAttr() ||
> + cast<Argument>(Object)-
> >hasNoAliasAttr())))) {
> + // Okay, the pointer is to a stack allocated (or effectively
> so, for
> + // for noalias parameters) object. If we can prove that
> // the pointer never "escapes", then we know the call cannot
> clobber it,
> // because it simply can't get its address.
> if (!AddressMightEscape(Object))
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list