https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63321

--- Comment #4 from Oleg Endo <olegendo at gcc dot gnu.org> ---
(In reply to Oleg Endo from comment #1)
> Combine recently received some updates which improve handling of
> multiple-set parallel insns.  Applying the following:
> 
> Index: gcc/config/sh/sh.md
> ===================================================================
> --- gcc/config/sh/sh.md       (revision 218250)
> +++ gcc/config/sh/sh.md       (working copy)
> @@ -5156,6 +5156,12 @@
>        DONE;
>      }
>  
> +  if (operands[2] == const1_rtx)
> +    {
> +      emit_insn (gen_shlr (operands[0], operands[1]));
> +      DONE;
> +    }
> +
>    /* If the lshrsi3_* insn is going to clobber the T_REG it must be
>       expanded here.  */
>    if (CONST_INT_P (operands[2])
> 
> 
> will always expand the multiple-set shlr insn and combine will be able to
> utilize this.

Doing that for the shlr insn is OK, since there is no other alternative to do a
1 bit right shift without touching the T bit.  However, since there is a
non-T-bit-clobbering shll alternative (add x,x), doing the same for shll might
have negative side effects on other sequences.

Reply via email to