From: Jonathan Wright Date: Thu, 14 Oct 2021 12:49:02 +0000 (+0100) Subject: gcc/lower_subreg.c: Prevent decomposition if modes are not tieable X-Git-Tag: basepoints/gcc-13~3402 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=511245325a4d3414a951e2d489112e8372eae1b1;p=thirdparty%2Fgcc.git gcc/lower_subreg.c: Prevent decomposition if modes are not tieable 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. gcc/ChangeLog: 2021-10-14 Jonathan Wright * lower-subreg.c (simple_move): Prevent decomposition if modes are not tieable. --- diff --git a/gcc/lower-subreg.c b/gcc/lower-subreg.c index 21078268ba0d..f0dc63f485f1 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