[llvm-commits] [llvm] r47247 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
Evan Cheng
evan.cheng at apple.com
Mon Feb 18 19:29:24 PST 2008
Looks like it's working now. Thanks.
Evan
On Feb 18, 2008, at 3:31 PM, Owen Anderson wrote:
> 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
>>
>
> _______________________________________________
> 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