This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[00/13] Make VEC_PERM_EXPR work for variable-length vectors
- From: Richard Sandiford <richard dot sandiford at linaro dot org>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sat, 09 Dec 2017 23:06:26 +0000
- Subject: [00/13] Make VEC_PERM_EXPR work for variable-length vectors
- Authentication-results: sourceware.org; auth=none
This series is a replacement for:
https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00747.html
based on the feedback that using VEC_PERM_EXPR would be better.
The changes are:
(1) Remove the restriction that the selector elements have to have the
same width as the data elements, but only for constant selectors.
This lets through the cases we need without also allowing
potentially-expensive ops. Adding support for the variable
case can be done later if it seems useful, but it's not trivial.
(2) Encode the integer form of constant selectors (vec_perm_indices)
in the same way as the new VECTOR_CST encoding, so that it can
cope with variable-length vectors.
(3) Remove the vec_perm_const optab and reuse the target hook to emit
code. This avoids the need to create a CONST_VECTOR for the wide
selectors, and hence the need to have a corresponding wide vector
mode (which the target wouldn't otherwise need or support).
(4) When handling the variable vec_perm optab, check that modes can store
all element indices before using them.
(5) Unconditionally use ssizetype selector elements in permutes created
by the vectoriser.
(6) Make the AArch64 vec_perm_const handling handle variable-length vectors.
Tested directly on trunk on aarch64-linux-gnu, x86_64-linux-gnu and
powerpc64le-linux-gnu. Also tested by comparing the before and after
assembly output for:
arm-linux-gnueabi arm-linux-gnueabihf aarch64-linux-gnu
aarch64_be-linux-gnu ia64-linux-gnu i686-pc-linux-gnu
mipsisa64-linux-gnu mipsel-linux-gnu powerpc64-linux-gnu
powerpc64le-linux-gnu powerpc-eabispe x86_64-linux-gnu
sparc64-linux-gnu
at -O3, which should cover all the ports that defined vec_perm_const.
The only difference was one instance of different RA for ia64-linux-gnu,
caused by using force_reg on a SUBREG that was previously used directly.
OK to install?
Thanks,
Richard