[Bug tree-optimization/50389] [4.7 Regression] ICE: in execute_todo, at passes.c:1730 with -O -freorder-blocks -ftracer and __builtin___memcpy_chk()
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Oct 10 13:56:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50389
Richard Guenther <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P1
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2011-10-10
AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org
|gnu.org |
Ever Confirmed|0 |1
--- Comment #1 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-10-10 13:56:03 UTC ---
Confirmed.
need_ssa_update_p () changes at
static unsigned int
execute_cleanup_cfg_post_optimizing (void)
{
cleanup_tree_cfg (); <-----
cleanup_dead_labels ();
which folds (via replace_uses_by called from gimple_merge_blocks)
# .MEM_11 = VDEF <.MEM_16>
__builtin_memcpy (&buf, &data, 4);
after propagating single-arg PHIs into it.
And gimplify_and_update_call_from_tree ends up giving up too early:
if (gimple_in_ssa_p (cfun))
{
find_new_referenced_vars (new_stmt);
mark_symbols_for_renaming (new_stmt);
but even if removing that, it fails to set the VUSE to the first
gimplified statement:
# .MEM_16 = PHI <.MEM_13(4)>
# VUSE <.MEM>
D.2741_17 = MEM[(char * {ref-all})&data];
# .MEM_11 = VDEF <.MEM>
MEM[(char * {ref-all})&buf] = D.2741_17;
That is because initially the load does not contain a VUSE so the
whole logic updating virtual operands with reaching vuses does not trigger ...
I have a patch.
More information about the Gcc-bugs
mailing list