Alias Optimization (by address)
Two pointers that point to members of different arrays can not be aliases, even if the offsets within arrays are not known.
Example:
In the code fragment below, the specific objects pointed to by p and q are not known, but they are members of different arrays, and therefore can not be aliased.
int a[], b[]; void f (int i, int j) { int *p, *q; int x, y; p = &a[i]; q = &b[j]; x = *(q + 3); *p = 5; y = *(q + 3); g (x, y); }
Since p and q are not aliased, the second reference to *(q + 3) can be eliminated, as shown below.
int a[], b[]; void f(int i, int j) { int *p, *q; int x, y; p = &a[i]; q = &b[j]; x = *(q + 3); *p = 5; g (x, x); }