On Thu, Nov 24, 2016 at 11:04:13AM +0100, Georg-Johann Lay wrote:
> >@@ -11287,7 +11287,8 @@ change_zero_ext (rtx pat)
> >       else if (GET_CODE (x) == ZERO_EXTEND
> >            && SCALAR_INT_MODE_P (mode)
> >            && REG_P (XEXP (x, 0))
> >-           && HARD_REGISTER_P (XEXP (x, 0)))
> >+           && HARD_REGISTER_P (XEXP (x, 0))
> >+           && can_change_dest_mode (XEXP (x, 0), 0, mode))
> >     {
> >       size = GET_MODE_PRECISION (GET_MODE (XEXP (x, 0)));
> >       x = gen_rtx_REG (mode, REGNO (XEXP (x, 0)));
> 
> IIUC, the will also avoid changing, for example, QI to HI if HI occupies 
> more hard regs than QI?  Great!

Only for hard registers, but this code only handles hard registers anyway.
>From can_change_dest_mode:

  /* Allow hard registers if the new mode is legal, and occupies no more
     registers than the old mode.  */
  if (regno < FIRST_PSEUDO_REGISTER)
    return (HARD_REGNO_MODE_OK (regno, mode)
            && REG_NREGS (x) >= hard_regno_nregs[regno][mode]);


Segher

Reply via email to