We've previously discussed eliminating VEC_INTERLEAVE_*_EXPR, and VEC_EXTRACT_{EVEN,ODD}_EXPR, as both have different semantics depending on target endianness. The replacement, VEC_PERM_EXPR, does not have this ambiguity.
In order for this to not introduce regressions in the various targets that have previously implmented vec_interleave patterns, we have to recognize the various vec_perm_const patterns. To a greater or lesser degree, all of these backend patches mirror the way that i386 approaches this problem. Not all of the variations are completely tested; e.g. mips loongson or powerpc paired-single. The arm patches have had some amount of cross-testing, and are currently bootstrapping on hardware. The ia64 patches need testing on big-endian hpux. r~ Richard Henderson (5): rs6000: Implement vec_perm_constv16qi for altivec. ia64: Implement vec_perm_const. rs6000: Cleanup interleave/even_odd/vec_perm. mips: Implement vec_perm_const. arm: Implement vec_perm and vec_perm_const for NEON. jakub (1): Delete VEC_INTERLEAVE_*_EXPR. gcc/cfgexpand.c | 2 - gcc/config/arm/arm-protos.h | 3 + gcc/config/arm/arm.c | 527 ++++++++++++++++++++- gcc/config/arm/neon.md | 59 +++ gcc/config/arm/vec-common.md | 26 + gcc/config/i386/i386.c | 26 +- gcc/config/ia64/ia64-protos.h | 4 + gcc/config/ia64/ia64.c | 424 ++++++++++++++++- gcc/config/ia64/vect.md | 183 ++------ gcc/config/mips/loongson.md | 24 +- gcc/config/mips/mips-modes.def | 1 + gcc/config/mips/mips-protos.h | 1 + gcc/config/mips/mips-ps-3d.md | 145 ++++-- gcc/config/mips/mips.c | 266 ++++++++++- gcc/config/mips/predicates.md | 7 +- gcc/config/rs6000/altivec.md | 381 ++++------------ gcc/config/rs6000/paired.md | 116 ++--- gcc/config/rs6000/predicates.md | 10 + gcc/config/rs6000/rs6000-builtin.def | 8 +- gcc/config/rs6000/rs6000-modes.def | 10 +- gcc/config/rs6000/rs6000-protos.h | 4 + gcc/config/rs6000/rs6000.c | 335 +++++++++++++- gcc/config/rs6000/spe.md | 58 ++- gcc/config/rs6000/vector.md | 74 +--- gcc/config/rs6000/vsx.md | 151 ++++--- gcc/doc/generic.texi | 13 - gcc/doc/md.texi | 14 - gcc/expr.c | 2 - gcc/fold-const.c | 10 - gcc/genopinit.c | 4 +- gcc/gimple-pretty-print.c | 2 - gcc/optabs.c | 28 +- gcc/optabs.h | 5 - gcc/testsuite/gcc.target/powerpc/altivec-perm-1.c | 76 +++ gcc/testsuite/gcc.target/powerpc/altivec-perm-2.c | 19 + gcc/testsuite/gcc.target/powerpc/altivec-perm-4.c | 13 + gcc/testsuite/lib/target-supports.exp | 9 +- gcc/tree-cfg.c | 2 - gcc/tree-inline.c | 2 - gcc/tree-pretty-print.c | 16 - gcc/tree-vect-data-refs.c | 86 ++-- gcc/tree-vect-generic.c | 4 +- gcc/tree-vect-stmts.c | 14 +- gcc/tree-vectorizer.h | 1 + gcc/tree.def | 4 - 45 files changed, 2242 insertions(+), 927 deletions(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-perm-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-perm-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-perm-4.c -- 1.7.7.3