http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50317

--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-11-28 
14:10:40 UTC ---
Perhaps we could drop the var ={v} {CLOBBER} stmts when renaming the var into
SSA instead.

As for gcc47-pr50317-1.patch, the another walk isn't because of the CLOBBERs,
what it tries to solve is drop the ADDRESSABLE bit before CDDCE decides to
instead optimize all the stores away as unnecessary (the former does the right
thing for debug info, the latter does not).

The reason why the gcc/tree-ssa-dce.c change doesn't work is that currently we
rely on the var in debug stmts to be target_for_debug_bind (which among other
conditions means is_gimple_reg).  That patch emits debug stmts even for cases
where the var is not is_gimple_reg because of TREE_ADDRESSABLE.  As nothing
drops the TREE_ADDRESSABLE bit later on (on this testcase we could do it
somewhere, but not generally, consider e.g. where the first store into some
addressable var is necessary, but last store is not).  DCE at this point
doesn't know if it is removing all references of the addressable var from the
IL.
Passes that are upset about the !target_for_debug_bind var in debug stmts/debug
insns are expansion (it doesn't ICE, but doesn't create the implicit pointer
because the var whose address is taken is addressable) and var-tracking (for
which it leads to ICEs because VALUE is propagated through into the notes).

Reply via email to