aarch64: Pass and return Neon vector-tuple types without a parallel
authorJonathan Wright <jonathan.wright@arm.com>
Thu, 7 Oct 2021 15:08:33 +0000 (16:08 +0100)
committerJonathan Wright <jonathan.wright@arm.com>
Thu, 4 Nov 2021 14:55:44 +0000 (14:55 +0000)
commiteb04ccf4bfd6586cf0d22d439de28a4e6c649182
tree1dcd92b4df93c5e2ae686712b4f83b9c06e5f2f6
parent511245325a4d3414a951e2d489112e8372eae1b1
aarch64: Pass and return Neon vector-tuple types without a parallel

Neon vector-tuple types can be passed in registers on function call
and return - there is no need to generate a parallel rtx. This patch
adds cases to detect vector-tuple modes and generates an appropriate
register rtx.

This change greatly improves code generated when passing Neon vector-
tuple types between functions; many new test cases are added to
defend these improvements.

gcc/ChangeLog:

2021-10-07  Jonathan Wright  <jonathan.wright@arm.com>

* config/aarch64/aarch64.c (aarch64_function_value): Generate
a register rtx for Neon vector-tuple modes.
(aarch64_layout_arg): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/vector_structure_intrinsics.c: New code
generation tests.
gcc/config/aarch64/aarch64.c
gcc/testsuite/gcc.target/aarch64/vector_structure_intrinsics.c