Hi,
It seems that opt thinks that the two pointers
%_tmp2 = getelementptr [3 x i16], [3 x i16]* %a, i16 0, i64 1
and
%_tmp4 = getelementptr [3 x i16], [3 x i16]* %a, i16 0, i16 1
does not alias? Is this intended or a bug?
Details below:
Hi,
It seems that opt thinks that the two pointers
%_tmp2 = getelementptr [3 x i16], [3 x i16]* %a, i16 0, i64 1
and
%_tmp4 = getelementptr [3 x i16], [3 x i16]* %a, i16 0, i16 1
does not alias? Is this intended or a bug?
Details below:
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()) { ... }
best
vedant
Hi,
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.
Should I file a bugzilla report on this?
Regards,
Mikael
Hi,
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
Hi,