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-*-*]

Reply via email to