Add a vect_variable_length target selector
authorRichard Sandiford <richard.sandiford@linaro.org>
Thu, 9 Nov 2017 15:18:32 +0000 (15:18 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 9 Nov 2017 15:18:32 +0000 (15:18 +0000)
This patch adds a target selector for variable-length vectors.
Initially it's always false, but the SVE patch provides a case
in which it's true.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/sourcebuild.texi (vect_variable_length): Document.

gcc/testsuite/
* lib/target-supports.exp
(check_effective_target_vect_variable_length): New proc.
* gcc.dg/vect/pr60482.c: XFAIL test for no epilog loop if
vect_variable_length.
* gcc.dg/vect/slp-reduc-6.c: XFAIL two-operation SLP if
vect_variable_length.
* gcc.dg/vect/vect-alias-check-5.c: XFAIL alias optimization if
vect_variable_length.
* gfortran.dg/vect/fast-math-mgrid-resid.f: XFAIL predictive
commoning optimization if vect_variable_length.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254595

gcc/ChangeLog
gcc/doc/sourcebuild.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/pr60482.c
gcc/testsuite/gcc.dg/vect/slp-reduc-6.c
gcc/testsuite/gcc.dg/vect/vect-alias-check-5.c
gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f
gcc/testsuite/lib/target-supports.exp

index 01743bd724ec2c9a7858cc8b77da0ecc5dc51282..0c56090da27dc0e247ca7c4f84422d000916223b 100644 (file)
@@ -1,3 +1,9 @@
+2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * doc/sourcebuild.texi (vect_variable_length): Document.
+
 2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index cdee0502e470e98418499300d99808f71d89edd0..25e1103fd218293b5a943de98ebf51e1f39ead2d 100644 (file)
@@ -1486,6 +1486,9 @@ Target prefers vectors to have an alignment greater than element
 alignment, but also allows unaligned vector accesses in some
 circumstances.
 
+@item vect_variable_length
+Target has variable-length vectors.
+
 @item vect_widen_sum_hi_to_si
 Target supports a vector widening summation of @code{short} operands
 into @code{int} results, or can promote (unpack) from @code{short}
index 76d9f3cca7db97373222f8d49f85c8a5f416360b..0a17dfa8593ff9ac7c59b59ae84d2a8d94b8d431 100644 (file)
@@ -1,3 +1,18 @@
+2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * lib/target-supports.exp
+       (check_effective_target_vect_variable_length): New proc.
+       * gcc.dg/vect/pr60482.c: XFAIL test for no epilog loop if
+       vect_variable_length.
+       * gcc.dg/vect/slp-reduc-6.c: XFAIL two-operation SLP if
+       vect_variable_length.
+       * gcc.dg/vect/vect-alias-check-5.c: XFAIL alias optimization if
+       vect_variable_length.
+       * gfortran.dg/vect/fast-math-mgrid-resid.f: XFAIL predictive
+       commoning optimization if vect_variable_length.
+
 2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index 4c5c20c810932ec042523121173b80f59f22cc9a..b07fe1ef33e523c93ba67480145326821b672c7e 100644 (file)
@@ -16,4 +16,6 @@ foo (double *x, int n)
   return p;
 }
 
-/* { dg-final { scan-tree-dump-not "epilog loop required" "vect" } } */
+/* Until fully-masked loops are supported, we always need an epilog
+   loop for variable-length vectors.  */
+/* { dg-final { scan-tree-dump-not "epilog loop required" "vect" { xfail vect_variable_length } } } */
index 88591c5bdcbab0d066349b74503c3eb0a0a4cc8d..49a0ffc2168fa73546b8706f0946b523a46d6191 100644 (file)
@@ -44,5 +44,5 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_int_add || { ! { vect_unpack || vect_strided2 } } } } } } */
 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "different interleaving chains in one node" 1 "vect" { target { ! vect_no_int_add } } } } */
+/* { dg-final { scan-tree-dump-times "different interleaving chains in one node" 1 "vect" { target { ! vect_no_int_add } xfail vect_variable_length } } } */
 
index bfa946b9ad2bceab4971068d2f43596fe041ed1a..e17c7150a061152e687f9ed7b36c951c318ddf3d 100644 (file)
@@ -15,5 +15,5 @@ f1 (struct s *a, struct s *b)
 }
 
 /* { dg-final { scan-tree-dump-times "consider run-time aliasing" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "improved number of alias checks from 1 to 0" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "improved number of alias checks from 1 to 0" 1 "vect" { xfail vect_variable_length } } } */
 /* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" } } */
index 7e2816b8b4f2eae2645115852a6526f65d7374d7..2e0840d256b84a0192eebe44ef1b59928028e49b 100644 (file)
@@ -42,5 +42,5 @@ C
 ! vectorized loop.  If vector factor is 2, the vectorized loop can
 ! be predictive commoned, we check if predictive commoning PHI node
 ! is created with vector(2) type.
-! { dg-final { scan-tree-dump "Executing predictive commoning without unrolling" "pcom" } }
-! { dg-final { scan-tree-dump "vectp_u.*__lsm.* = PHI <.*vectp_u.*__lsm" "pcom" } }
+! { dg-final { scan-tree-dump "Executing predictive commoning without unrolling" "pcom" { xfail vect_variable_length } } }
+! { dg-final { scan-tree-dump "vectp_u.*__lsm.* = PHI <.*vectp_u.*__lsm" "pcom" { xfail vect_variable_length } } }
index 353887dac8c209ca0b680a5d463148619c5ad37c..8d49ed2e6874c4feae5e1a37a653020dbe43334b 100644 (file)
@@ -6714,6 +6714,12 @@ proc check_effective_target_vect_multiple_sizes { } {
     return [expr { [llength [available_vector_sizes]] > 1 }]
 }
 
+# Return true if variable-length vectors are supported.
+
+proc check_effective_target_vect_variable_length { } {
+    return [expr { [lindex [available_vector_sizes] 0] == 0 }]
+}
+
 # Return 1 if the target supports vectors of 64 bits.
 
 proc check_effective_target_vect64 { } {