[llvm-commits] [llvm] r47247 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
Owen Anderson
resistor at mac.com
Mon Feb 18 15:31:15 PST 2008
I can't reproduce on my Mac Pro. Can you file a bug report with a
reduce testcase?
--Owen
On Feb 18, 2008, at 1:43 PM, Evan Cheng wrote:
> 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
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2555 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20080218/58ae39f1/attachment.bin>
More information about the llvm-commits
mailing list