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

Reply via email to