On Mon, Jul 4, 2011 at 1:52 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Mon, Jul 4, 2011 at 12:57 PM, Richard Sandiford > <rdsandif...@googlemail.com> wrote: >> "H.J. Lu" <hongjiu...@intel.com> writes: >>> RTL-based forward propagation pass shouldn't propagate hard register. >> >> That's seems a bit draconian. Many fixed hard registers ought to be OK. >> E.g. there doesn't seem to be anything wrong with propagating uses of >> the stack or frame pointers, subject to the usual availability checks. >> >> To play devil's advocate, an alternative might be to >> >> (a) make local_ref_killed_between_p return true for non-fixed hard >> registers when a call or asm comes between the two instructions >> >> (b) make use_killed_between return true for non-fixed hard registers >> when the instructions are in different basic blocks >> >> Thoughts? >> > > There are a few problems with this suggestions: > > 1. The comments says: > > /* If USE is a subreg, see if it can be replaced by a pseudo. */ > > static bool > forward_propagate_subreg (df_ref use, rtx def_insn, rtx def_set) > { > > It indicates this function is intended to work on pseudo registers. > > 2. propagate_rtx avoids hard registers: > > static rtx > propagate_rtx (rtx x, enum machine_mode mode, rtx old_rtx, rtx new_rtx, > bool speed) > { > rtx tem; > bool collapsed; > int flags; > > if (REG_P (new_rtx) && REGNO (new_rtx) < FIRST_PSEUDO_REGISTER) > return NULL_RTX; > > It seems that fwprop is intended to deal with pseudo registers. If we > want to extend it to hard registers, that should be a separate project. > > Thanks.
forward_propagate_subreg issue was introduced by http://gcc.gnu.org/ml/gcc-patches/2009-08/msg01203.html Before that, fwprop never tries to work on hard registers. Alan, is your change to process hard registers intentional? Thanks. -- H.J.