Jonathan Wright <jonathan.wri...@arm.com> writes:
> Hi,
>
> Preventing decomposition if modes are not tieable is necessary to
> stop AArch64 partial Neon structure modes being treated as packed in
> registers.
>
> This is a necessary prerequisite for a future AArch64 PCS change to
> maintain good code generation.
>
> Bootstrapped and regression tested on:
> * x86_64-pc-linux-gnu - no issues.
> * aarch64-none-linux-gnu - two test failures which will be fixed by
>   the next patch in this series.
>
> Ok for master?
>
> Thanks,
> Jonathan
>
> ---
>
> gcc/ChangeLog:
>
> 2021-10-14  Jonathan Wright  <jonathan.wri...@arm.com>
>
>         * lower-subreg.c (simple_move): Prevent decomposition if
>         modes are not tieable.

OK as a single commit with 6/6.  Thanks for splitting this out for
review purposes.

Richard

>
> diff --git a/gcc/lower-subreg.c b/gcc/lower-subreg.c
> index 
> 21078268ba0d241efc469fe71357d3b94f8935d6..f0dc63f485f1237d96ceeb0c75dca9aa8e053c6e
>  100644
> --- a/gcc/lower-subreg.c
> +++ b/gcc/lower-subreg.c
> @@ -383,8 +383,10 @@ simple_move (rtx_insn *insn, bool speed_p)
>       non-integer mode for which there is no integer mode of the same
>       size.  */
>    mode = GET_MODE (SET_DEST (set));
> +  scalar_int_mode int_mode;
>    if (!SCALAR_INT_MODE_P (mode)
> -      && !int_mode_for_size (GET_MODE_BITSIZE (mode), 0).exists ())
> +      && (!int_mode_for_size (GET_MODE_BITSIZE (mode), 0).exists (&int_mode)
> +       || !targetm.modes_tieable_p (mode, int_mode)))
>      return NULL_RTX;
>  
>    /* Reject PARTIAL_INT modes.  They are used for processor specific

Reply via email to