[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