[Bug rtl-optimization/52573] [4.6/4.7/4.8 regression] regrename creates overlapping register allocations for output operands

aoliva at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Dec 7 00:14:00 GMT 2012


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

Alexandre Oliva <aoliva at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2012-12-07
                 CC|                            |aoliva at gcc dot gnu.org,
                   |                            |zadeck at naturalbridge dot
                   |                            |com
     Ever Confirmed|0                           |1

--- Comment #5 from Alexandre Oliva <aoliva at gcc dot gnu.org> 2012-12-07 00:14:12 UTC ---
I've looked a bit into this.  The code in df-problems.c (see bug 32749) is at
least inconsistent.  df_note_bb_compute is supposed to set do_not_gen at the
def, so that we emit the REG_UNUSED but not the REG_DEAD.  However, it does not
set do_not_gen for clobbers (may or must), even though it emits the note.  Oh,
and it only emits the note if it's not a call;for calls, the REG_UNUSED note is
not emitted for clobbers (I wonder why that is), and we still fail to set
do_not_gen, so we emit the REG_DEAD for the parallel use anyway.

Kenny, it seems to me that we should set do_not_gen regardless of any clobber
flags, because the whole (documented) point of do_not_gen is to avoid emitting
a REG_DEAD for a parallel use, and we should make the REG_UNUSED note emission
consistently conditional on clobbers.  Does it sound like this would work?



More information about the Gcc-bugs mailing list