From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7835) id 5B3313858439; Thu, 4 Nov 2021 14:56:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5B3313858439 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wright To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-4911] gcc/lower_subreg.c: Prevent decomposition if modes are not tieable X-Act-Checkin: gcc X-Git-Author: Jonathan Wright X-Git-Refname: refs/heads/master X-Git-Oldrev: 66f206b85395c273980e2b81a54dbddc4897e4a7 X-Git-Newrev: 511245325a4d3414a951e2d489112e8372eae1b1 Message-Id: <20211104145634.5B3313858439@sourceware.org> Date: Thu, 4 Nov 2021 14:56:34 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Nov 2021 14:56:34 -0000 https://gcc.gnu.org/g:511245325a4d3414a951e2d489112e8372eae1b1 commit r12-4911-g511245325a4d3414a951e2d489112e8372eae1b1 Author: Jonathan Wright Date: Thu Oct 14 13:49:02 2021 +0100 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: --- 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 21078268ba0..f0dc63f485f 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