[llvm-dev] Different index types in GEPs -> non-aliasing?

Vedant Kumar via llvm-dev llvm-dev at lists.llvm.org
Mon Apr 18 22:59:03 PDT 2016


> On Apr 18, 2016, at 10:55 PM, Mikael Holmén <mikael.holmen at ericsson.com> wrote:
> 
> Hi,
> 
> On 04/18/2016 05:28 PM, Vedant Kumar wrote:
>> This sounds like a bug to me.
>> 
>> 
>>>  // If the last (struct) indices are constants and are equal, the other indices
>>>  // might be also be dynamically equal, so the GEPs can alias.
>>>  if (C1 && C2 && C1 == C2)
>>>    return MayAlias;
>> 
>> Does changing this condition fix the issue? E.g
>> 
>>   if (C1 && C2 && C1->getSExtValue() == C2->getSExtValue()) { ... }
> 
> Yes it does. Then it realize the two GEPs alias and I get the expected result.
> 
> But since there is also a Value pointer comparison in
> 
> bool BasicAAResult::isValueEqualInPotentialCycles(const Value *V,
>                                                  const Value *V2) {
>  if (V != V2)
>    return false;
> 
> and probably in several other places too I wasn't comfortable just changing it... Right now I made my front-end always use i64 for GEP array indices instead.

Yes, I think it'd be best to open up a bug for this.

thanks
vedant


> Should I file a bugzilla report on this?
> 
> Regards,
> Mikael
> 
>> 
>> 
>> best
>> vedant
>> 



More information about the llvm-dev mailing list