The Idea with this patch set is to re-arrange vector permutation so that it can be used to implement other patterns automatically.
In particular, Altivec, SPU currently have (and Sparc VIS would need) a large amount of boilerplate code that transforms several higher level tree codes into vector permutation inside the backend. This seems a bit unnecessary. It's arguable that we could simply make VEC_PERM_EXPR the only code that gets generated at the vectorizer level, and drop some of these other patterns entirely. I'm not 100% sure we should go that far, but even if we did, I still think this is a good cleanup. Bootstrapped and tested on x86_64-linux only. I've only cross-tested the ppc/spu patches. Ok? r~ Richard Henderson (6): Fix typos in the names of vec_extract & vec_interleave tree codes. Change vec_perm checking and expansion level. Implement interleave via permutation. spu: Remove vec_extract_even/odd and vec_interleave expanders. rs6000: Remove some vec_extract_even/odd expanders. i386: Delete the vec_extract_even/odd patterns. gcc/config/i386/i386.c | 18 +-- gcc/config/i386/sse.md | 29 --- gcc/config/rs6000/altivec.md | 134 +------------- gcc/config/spu/spu.md | 433 ------------------------------------------ gcc/doc/tm.texi | 2 +- gcc/expr.c | 28 +-- gcc/optabs.c | 331 ++++++++++++++++++++++---------- gcc/optabs.h | 7 +- gcc/target.def | 7 +- gcc/tree-vect-data-refs.c | 80 +++----- gcc/tree-vect-generic.c | 23 ++- gcc/tree-vect-slp.c | 36 ++-- gcc/tree-vect-stmts.c | 22 ++- gcc/tree.def | 8 +- 14 files changed, 343 insertions(+), 815 deletions(-) -- 1.7.6.4