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!

Reply via email to