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

Reply via email to