[PATCH] Fixup gcc.dg/vect/pr65947-3.c when masked loads are available

Richard Biener rguenther@suse.de
Fri Oct 9 11:19:04 GMT 2020


The following adds a effective target to properly allow
the gcc.dg/vect/pr65947-3.c expected vectorization to be adjusted
when run with, say, -march=cascadelake.

Tested on x86_64-unknown-linux-gnu, pushed.

2020-10-09  Richard Biener  <rguenther@suse.de>

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

gcc/testsuite
	* lib/target-supports.exp (check_effective_target_vect_masked_load):
	New effective target.
	* gcc.dg/vect/pr65947-3.c: Update.
---
 gcc/doc/sourcebuild.texi              | 3 +++
 gcc/testsuite/gcc.dg/vect/pr65947-3.c | 9 +++++----
 gcc/testsuite/lib/target-supports.exp | 8 ++++++++
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index b625f1e9f68..49316a5d0ff 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1527,6 +1527,9 @@ optabs on vectors.
 Target supports fully-masked (also known as fully-predicated) loops,
 so that vector loops can handle partial as well as full vectors.
 
+@item vect_masked_load
+Target supports vector masked loads.
+
 @item vect_masked_store
 Target supports vector masked stores.
 
diff --git a/gcc/testsuite/gcc.dg/vect/pr65947-3.c b/gcc/testsuite/gcc.dg/vect/pr65947-3.c
index 8a2608cf0f1..f1bfad65c22 100644
--- a/gcc/testsuite/gcc.dg/vect/pr65947-3.c
+++ b/gcc/testsuite/gcc.dg/vect/pr65947-3.c
@@ -51,9 +51,10 @@ main (void)
   return 0;
 }
 
-/* XFAILed because of the fix for PR97307 which sinks the load of a[i], preventing
-   if-conversion to happen.  */
-/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 2 "vect" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" } } */
+/* Since the fix for PR97307 which sinks the load of a[i], preventing
+   if-conversion to happen, targets that cannot do masked loads only
+   vectorize the inline copy.  */
+/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 2 "vect" { target vect_masked_load } } } */
+/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" { target { ! vect_masked_load } } } } */
 /* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 2 "vect" { target vect_fold_extract_last } } } */
 /* { dg-final { scan-tree-dump-not "condition expression based on integer induction." "vect" } } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 15f0649f8ae..ecf8be3e567 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -7194,6 +7194,14 @@ proc check_effective_target_vect_load_lanes { } {
 	     || [istarget aarch64*-*-*] }}]
 }
 
+# Return 1 if the target supports vector masked loads.
+
+proc check_effective_target_vect_masked_load { } {
+    return [expr { [check_avx_available]
+		   || [check_effective_target_aarch64_sve]
+		   || [istarget amdgcn*-*-*] } ]
+}
+
 # Return 1 if the target supports vector masked stores.
 
 proc check_effective_target_vect_masked_store { } {
-- 
2.26.2


More information about the Gcc-patches mailing list