[Bug target/63321] [SH] Unused T bit result of shll / shlr insns

olegendo at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Dec 2 09:46:00 GMT 2014


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.


More information about the Gcc-bugs mailing list