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