------- 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