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  <jonathan.wright@arm.com>

	* lower-subreg.c (simple_move): Prevent decomposition if
	modes are not tieable.
This commit is contained in:
Jonathan Wright 2021-10-14 13:49:02 +01:00
parent 66f206b853
commit 511245325a
1 changed files with 3 additions and 1 deletions

View File

@ -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