[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