http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52406
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-02-28
11:06:16 UTC ---
We have
Creating dr for MEM[(int *)&a + 4B]
base_address: &a
offset from base address: 0
constant offset from base address: 4
step: 0
aligned to: 128
base_object: MEM[(int *)&a + 4B]
Creating dr for a[1].f1
base_address: &a
offset from base address: 0
constant offset from base address: 4
step: 0
aligned to: 128
base_object: a[0].f1
Access function 0: 1
thus we have an access function for a[1].f1 but no access function for
MEM[(int *)&a + 4B]. That should cause it to conflict.
(compute_affine_dependence
(stmt_a =
MEM[(int *)&a + 4B] = 1;
)
(stmt_b =
D.1724_6 = a[1].f1;
)
(Data Dep:
#(Data Ref:
# bb: 5
# stmt: MEM[(int *)&a + 4B] = 1;
# ref: MEM[(int *)&a + 4B];
# base_object: MEM[(int *)&a + 4B];
#)
#(Data Ref:
# bb: 5
# stmt: D.1724_6 = a[1].f1;
# ref: a[1].f1;
# base_object: a[0].f1;
# Access function 0: 1
#)
(no dependence)
)
hmpf. dr_may_alias_p returns false because it feeds the oracle with
the base objects!