This patch replaces switch statements that call specific generator functions with code that constructs the rtl pattern directly. This seemed to scale better to SVE and also seems less error-prone.
As a side-effect, the patch fixes the REV handling for diff==1,
vmode==E_V4HFmode and adds missing support for diff==3,
To compensate for the lack of switches that check for specific modes, the patch makes aarch64_expand_vec_perm_const_1 reject permutes on single-element vectors (specifically V1DImode).
2017-11-01 Richard Sandiford Alan Hayward David Sherwood
- config/aarch64/aarch64.c (aarch64_evpc_trn, aarch64_evpc_uzp) (aarch64_evpc_zip, aarch64_evpc_ext, aarch64_evpc_rev) (aarch64_evpc_dup): Generate rtl direcly, rather than using named expanders. (aarch64_expand_vec_perm_const_1): Explicitly check for permutes of a single element.
- config/aarch64/iterators.md: Add a comment above the permute unspecs to say that they are generated directly by aarch64_expand_vec_perm_const.
- config/aarch64/aarch64-simd.md: Likewise the permute instructions.
ce405054618 [AArch64] Generate permute patterns using rtx builders
gcc/ChangeLog | 15 +++
gcc/config/aarch64/aarch64-simd.md | 11 +-
gcc/config/aarch64/aarch64.c | 241 ++++---------------------------------
gcc/config/aarch64/iterators.md | 7 +-
4 files changed, 57 insertions(+), 217 deletions(-)