From 511245325a4d3414a951e2d489112e8372eae1b1 Mon Sep 17 00:00:00 2001 From: Jonathan Wright Date: Thu, 14 Oct 2021 13:49:02 +0100 Subject: [PATCH] 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. --- gcc/lower-subreg.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 -- 2.47.2