https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62031

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
For some reason predictive commoning thinks that the loads of
p_bm->metricEntries_[idx][0] and [1] are invariant in the innermost loop.
Because:

(Data Dep:
#(Data Ref:
#  bb: 9
#  stmt: _14 = p_bm_10(D)->metricEntries_[idx_40][0];
#  ref: p_bm_10(D)->metricEntries_[idx_40][0];
#  base_object: *p_bm_10(D);
#  Access function 0: 0
#  Access function 1: idx_40
#  Access function 2: 0
#)
#(Data Ref:
#  bb: 9
#  stmt: p_bm_10(D)->metricEntries_[idx_40][0] = _24;
#  ref: p_bm_10(D)->metricEntries_[idx_40][0];
#  base_object: *p_bm_10(D);
#  Access function 0: 0
#  Access function 1: idx_40
#  Access function 2: 0
#)
    (no dependence)
)

err...?  There is a anti-dependence here.

Oh.  Data dependence in dr_may_alias_p happily uses DR_BASE_OBJECT as
input to the alias oracle but in this case DR_BASE_OBJECT is *p_bm_10(D)
which is an object of size 0 ...

 <mem_ref 0x7ffff686a280
    type <record_type 0x7ffff68691f8 entries_item_t type_0 BLK
        size <integer_cst 0x7ffff66c4ca8 constant 0>

I have a patch.

Reply via email to