[LLVMdev] BasicAliasAnalysis: Null pointers do not alias with anything

Hans Wennborg hans at hanshq.net
Fri Nov 6 07:49:34 PST 2009



Dan Gohman wrote:
> Hello,
> 
> On Nov 4, 2009, at 1:51 AM, Hans Wennborg wrote:
>>
>> / Hans
>> Index: lib/Analysis/BasicAliasAnalysis.cpp
>> ===================================================================
>> --- lib/Analysis/BasicAliasAnalysis.cpp	(revision 86023)
>> +++ lib/Analysis/BasicAliasAnalysis.cpp	(working copy)
>> @@ -633,6 +633,15 @@
>> AliasAnalysis::AliasResult
>> BasicAliasAnalysis::aliasCheck(const Value *V1, unsigned V1Size,
>>                                const Value *V2, unsigned V2Size) {
>> +  // Null pointers do not alias with anything
>> +  if (const Constant *C = dyn_cast<Constant>(V1))
>> +    if (C->isNullValue())
>> +      return NoAlias;
>> +
>> +  if (const Constant *C = dyn_cast<Constant>(V2))
>> +    if (C->isNullValue())
>> +      return NoAlias;
>> +
> 
> As Chris mentioned, for consistency with what the rest of LLVM is doing,
> this should check whether the pointers are in the default address space
> (0).
> 
> Also, this could be generalized by checking the results from 
> getUnderlyingObject, since it's not valid to do arithmetic from null to
> reach an LLVM identified object either.

I'm not sure what you mean by generalizing.
Do you mean I should do the check on O1 and O2, which are the results of 
calls to getUnderlyingObject?

Something like:

if (const ConstantPointerNull *CPN = dyn_cast<ConstantPointerNull>(O1))
	if (CPN->getType()->getAddressSpace() == 0)
		return NoAlias;

and the same for O2 (maybe extract it into a function?)

/ Hans



> 
> Dan
> 



More information about the llvm-dev mailing list