IMA vs tree-ssa
Dale Johannesen
dalej@apple.com
Fri Apr 2 19:41:00 GMT 2004
On Apr 2, 2004, at 10:18 AM, Geoff Keating wrote:
>> Restricting p and q to be non-char, it does; *p and *q have
>> non-compatible types.
>
> They have non-compatible types with each other, but that's not the
> test for whether two things can't alias; the standard talks about the
> 'effective type of the object'. So two accesses can alias if there
> could be a type which is compatible with both of the types involved,
> even if the two types are not themselves compatible. If you can work
> out what the object's effective type is (which is not always possible
> at compile time, since it's a run-time property) then you could test
> for compatibility with that, which would be a more precise test.
OK, I believe that. Then what we have is a bug. Do you agree the
following is standard-conforming? It gets different results with
different
options on ppc; the pointer derefs in foo have different alias classes,
and the scheduler does not find a dependency between them.
unsigned int a, b;
enum e1 { x, y, z };
enum e2 {t,u,v};
void foo (enum e1* e1p, enum e2* e2p, int x)
{ *e1p = x;
b = *e2p; }
main() {
enum e1* e1p = (enum e1*) &a;
enum e2* e2p = (enum e2*) &a;
foo (e1p, e2p, 3);
printf("%d\n", b);
}
More information about the Gcc
mailing list