As a followup to http://gcc.gnu.org/ml/gcc-patches/2014-04/msg00079.html, which
implements the shuffle operation but still leaves that unused - if/once that's
gone in, I see no reason now we can't start using it, and enable the appropriate
tests. I see the following test changes:
FAIL->PASS:
gcc.c-torture/execute/20000112-1.c execution, -O0
gcc.c-torture/execute/20000112-1.c execution, -O1
gcc.c-torture/execute/900409-1.c execution, -O0
gcc.c-torture/execute/900409-1.c execution, -O1
gcc.c-torture/execute/ieee/20000320-1.c execution, -O0
gcc.c-torture/execute/ieee/20000320-1.c execution, -O1
gcc.dg/vect/no-vfa-vect-depend-2.c scan-tree-dump-times vect "dependence
distance negative" 1
gcc.dg/vect/no-vfa-vect-depend-2.c scan-tree-dump-times vect "vectorized 1
loops" 1
gcc.dg/vect/no-vfa-vect-depend-3.c scan-tree-dump-times vect "dependence
distance negative" 4
gcc.dg/vect/no-vfa-vect-depend-3.c scan-tree-dump-times vect "vectorized 1
loops" 4
gcc.dg/vect/slp-perm-1.c -flto -ffat-lto-objects execution test
gcc.dg/vect/slp-perm-1.c execution test
gcc.dg/vect/slp-perm-3.c -flto -ffat-lto-objects execution test
gcc.dg/vect/slp-perm-3.c execution test
gcc.dg/vect/slp-perm-5.c -flto -ffat-lto-objects execution test
gcc.dg/vect/slp-perm-5.c execution test
gcc.dg/vect/slp-perm-6.c -flto -ffat-lto-objects execution test
gcc.dg/vect/slp-perm-6.c execution test
gcc.dg/vect/slp-perm-7.c -flto -ffat-lto-objects execution test
gcc.dg/vect/slp-perm-7.c execution test
UNSUPPORTED/NA->PASS:
gcc.dg/vect/nodump-forwprop-22.c (test for excess errors)
gcc.dg/vect/nodump-forwprop-22.c scan-tree-dump-not copyprop1 "BIT_FIELD_REF"
gcc.dg/vect/nodump-forwprop-22.c scan-tree-dump-times copyprop1 "VEC_PERM_EXPR"
1
gcc.dg/vect/pr43432.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops" 1
gcc.dg/vect/pr43432.c scan-tree-dump-times vect "vectorized 1 loops" 1
gcc.dg/vect/pr45752.c -flto -ffat-lto-objects scan-tree-dump vect "permutation
requires at least three vectors"
gcc.dg/vect/pr45752.c scan-tree-dump vect "permutation requires at least three
vectors"
gcc.dg/vect/slp-38.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops in function" 1
gcc.dg/vect/slp-38.c scan-tree-dump-times vect "vectorized 1 loops in function"
1
gcc.dg/vect/slp-perm-1.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops" 1
gcc.dg/vect/slp-perm-1.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorizing stmts using SLP" 1
gcc.dg/vect/slp-perm-1.c scan-tree-dump-times vect "vectorized 1 loops" 1
gcc.dg/vect/slp-perm-1.c scan-tree-dump-times vect "vectorizing stmts using
SLP" 1
gcc.dg/vect/slp-perm-2.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops" 1
gcc.dg/vect/slp-perm-2.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorizing stmts using SLP" 1
gcc.dg/vect/slp-perm-2.c scan-tree-dump-times vect "vectorized 1 loops" 1
gcc.dg/vect/slp-perm-2.c scan-tree-dump-times vect "vectorizing stmts using
SLP" 1
gcc.dg/vect/slp-perm-3.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops" 1
gcc.dg/vect/slp-perm-3.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorizing stmts using SLP" 1
gcc.dg/vect/slp-perm-3.c scan-tree-dump-times vect "vectorized 1 loops" 1
gcc.dg/vect/slp-perm-3.c scan-tree-dump-times vect "vectorizing stmts using
SLP" 1
gcc.dg/vect/slp-perm-4.c -flto -ffat-lto-objects scan-tree-dump vect
"permutation requires at least three vectors"
gcc.dg/vect/slp-perm-4.c scan-tree-dump vect "permutation requires at least
three vectors"
gcc.dg/vect/slp-perm-5.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops" 1
gcc.dg/vect/slp-perm-5.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorizing stmts using SLP" 2
gcc.dg/vect/slp-perm-5.c scan-tree-dump-times vect "vectorized 1 loops" 1
gcc.dg/vect/slp-perm-5.c scan-tree-dump-times vect "vectorizing stmts using
SLP" 2
gcc.dg/vect/slp-perm-6.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops" 1
gcc.dg/vect/slp-perm-6.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorizing stmts using SLP" 2
gcc.dg/vect/slp-perm-6.c scan-tree-dump-times vect "vectorized 1 loops" 1
gcc.dg/vect/slp-perm-6.c scan-tree-dump-times vect "vectorizing stmts using
SLP" 2
gcc.dg/vect/slp-perm-7.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops" 1
gcc.dg/vect/slp-perm-7.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorizing stmts using SLP" 1
gcc.dg/vect/slp-perm-7.c scan-tree-dump-times vect "vectorized 1 loops" 1
gcc.dg/vect/slp-perm-7.c scan-tree-dump-times vect "vectorizing stmts using
SLP" 1
gcc.dg/vect/vect-114.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops" 1
gcc.dg/vect/vect-114.c scan-tree-dump-times vect "vectorized 1 loops" 1
gcc.dg/vect/vect-15-big-array.c -flto -ffat-lto-objects scan-tree-dump-times
vect "vectorized 1 loops" 1
gcc.dg/vect/vect-15-big-array.c scan-tree-dump-times vect "vectorized 1 loops" 1
gcc.dg/vect/vect-15.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loops" 1
gcc.dg/vect/vect-15.c scan-tree-dump-times vect "vectorized 1 loops" 1
Also a PASS->NA:
gcc.dg/vect/vect-114.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 0 loops" 1
gcc.dg/vect/vect-114.c scan-tree-dump-times vect "vectorized 0 loops" 1
Ok for stage 1 (repeat, only after
http://gcc.gnu.org/ml/gcc-patches/2014-04/msg00079.html) ?
gcc/ChangeLog:
2014-04-11 Alan Lawrence <alan.lawre...@arm.com>
* config/aarch64/aarch64.c (aarch64_evpc_tbl): enable for bigendian.
gcc/testsuite/ChangeLog:
2014-04-11 Alan Lawrence <alan.lawre...@arm.com>
* lib/target-supports.exp (check_effective_target_vect_perm): return
true for aarch64_be.
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 0c8d77c..d332741 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -8089,11 +8089,6 @@ aarch64_evpc_tbl (struct expand_vec_perm_d *d)
enum machine_mode vmode = d->vmode;
unsigned int i, nelt = d->nelt;
- /* TODO: ARM's TBL indexing is little-endian. In order to handle GCC's
- numbering of elements for big-endian, we must reverse the order. */
- if (BYTES_BIG_ENDIAN)
- return false;
-
if (d->testing_p)
return true;
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 0d2ccd5..84eb82c 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3462,8 +3462,7 @@ proc check_effective_target_vect_perm { } {
} else {
set et_vect_perm_saved 0
if { [is-effective-target arm_neon_ok]
- || ([istarget aarch64*-*-*]
- && [is-effective-target aarch64_little_endian])
+ || [istarget aarch64*-*-*]
|| [istarget powerpc*-*-*]
|| [istarget spu-*-*]
|| [istarget i?86-*-*]