------- Comment #7 from rguenth at gcc dot gnu dot org 2007-10-23 16:01 ------- The bug goes like the following. We partition some of struct PgHdr fields into MPT.47, stopping to do partitioning before we reach SFT.6 (which also is a field of struct PgHdr) here:
for (i = 0; VEC_iterate (mem_sym_stats_t, mp_info, i, mp_p); i++) { tree mpt; /* If we are below the threshold, stop. */ if (!need_to_partition_p (mem_ref_stats)) break; mpt = find_partition_for (mp_p); estimate_vop_reduction (mem_ref_stats, mp_p, mpt); } now we have two kinds of stmts, reads from the local variable result: # VUSE <SFT.6D.1652_108> pD.1574_42 = resultD.1619.pDirtyD.1552; where obviously only SFT.6 is read. And reads through a pointer which is defined as # pD.1574_36 = PHI <pD.1574_19(10), &resultD.1619(6)> and look like # aD.1573_117 = VDEF <aD.1573_90> # MPT.47D.1693_118 = VDEF <MPT.47D.1693_103> pD.1574_36->pDirtyD.1552 = pD.1574_33; because we prune SFT.6. Looks like add_vars_for_offset is faulty. I have a patch. -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|unassigned at gcc dot gnu |rguenth at gcc dot gnu dot |dot org |org Status|NEW |ASSIGNED Last reconfirmed|2007-10-23 13:54:30 |2007-10-23 16:01:55 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33870