[ was: Re: [RFC] Add check_effective_target_vect_min_max ]

On 12-08-15 12:06, Richard Biener wrote:
On Wed, 12 Aug 2015, Rainer Orth wrote:

Tom de Vries <tom_devr...@mentor.com> writes:

On 12/08/15 10:51, Rainer Orth wrote:
Tom de Vries <tom_devr...@mentor.com> writes:

This follow-up patch introduces a new effective target vect_min_max,
similar to how effective target vect_bswap is implemented.

Any comments?

Thanks,
- Tom

Add check_effective_target_vect_min_max

2015-08-12  Tom de Vries  <t...@codesourcery.com>

        * lib/target-supports.exp (check_effective_target_vect_min_max): New
        proc.
        * gcc.dg/vect/trapv-vect-reduc-4.c: Use vect_min_max effective target.

Looks good to me, but the new effective-target keyword needs documenting
in sourcebuild.texi.


Hmm, in sourcebuild.texi I found:
...
@item vect_no_int_max
Target does not support a vector max instruction on @code{int}.
...

That looks related. [ I also found a patch introducing vect_no_uint_max
here: https://gcc.gnu.org/ml/gcc-patches/2010-01/msg00152.html. ]

I'm not sure where to take it from here. Should I introduce
vect_no_int_min, and use that in combination with vect_no_int_max?

I'd say this is something for the vectorizer maintainers to decide.  Richi?

I expect the above is already effectively
vect_no_int_min as well (which target would support min but not max...?).

So after double-checking that you could rename it to vect_no_int_min_max.


I found test-case vect-double-reduc-3.c, which uses vect_no_int_max for both min and max.

Committed patch to trunk.

Thanks,
- Tom

Rename vect_no_int_max to vect_no_int_min_max

2015-08-23  Tom de Vries  <t...@codesourcery.com>

	* gcc.dg/vect/trapv-vect-reduc-4.c: Use vect_no_int_min_max.
	* gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c: Rename
	vect_no_int_max to vect_no_int_min_max.
	* gcc.dg/vect/costmodel/ppc/costmodel-vect-reduc-1char.c: Same.
	* gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c: Same.
	* gcc.dg/vect/no-scevccp-noreassoc-slp-reduc-7.c: Same.
	* gcc.dg/vect/slp-reduc-4.c: Same.
	* gcc.dg/vect/slp-reduc-5.c: Same.
	* gcc.dg/vect/vect-125.c: Same.
	* gcc.dg/vect/vect-13.c: Same.
	* gcc.dg/vect/vect-double-reduc-3.c: Same.
	* gcc.dg/vect/vect-reduc-1.c: Same.
	* gcc.dg/vect/vect-reduc-1char-big-array.c: Same.
	* gcc.dg/vect/vect-reduc-1char.c:Same.
	* gcc.dg/vect/vect-reduc-1short.c: Same.
	* gcc.dg/vect/vect-reduc-2.c: Same.
	* gcc.dg/vect/wrapv-vect-reduc-2char.c: Same.
	* gcc.dg/vect/wrapv-vect-reduc-2short.c: Same.
	* lib/target-supports.exp: Same.

	* doc/sourcebuild.texi: Rename vect_no_int_max with
	vect_no_int_min_max.  Update description.
---
 gcc/doc/sourcebuild.texi                                 |  4 ++--
 .../vect/costmodel/i386/costmodel-vect-reduc-1char.c     |  2 +-
 .../vect/costmodel/ppc/costmodel-vect-reduc-1char.c      |  2 +-
 .../vect/costmodel/x86_64/costmodel-vect-reduc-1char.c   |  2 +-
 .../gcc.dg/vect/no-scevccp-noreassoc-slp-reduc-7.c       |  4 ++--
 gcc/testsuite/gcc.dg/vect/slp-reduc-4.c                  |  4 ++--
 gcc/testsuite/gcc.dg/vect/slp-reduc-5.c                  |  4 ++--
 gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c           |  2 +-
 gcc/testsuite/gcc.dg/vect/vect-125.c                     |  2 +-
 gcc/testsuite/gcc.dg/vect/vect-13.c                      |  2 +-
 gcc/testsuite/gcc.dg/vect/vect-double-reduc-3.c          |  2 +-
 gcc/testsuite/gcc.dg/vect/vect-reduc-1.c                 |  2 +-
 gcc/testsuite/gcc.dg/vect/vect-reduc-1char-big-array.c   |  2 +-
 gcc/testsuite/gcc.dg/vect/vect-reduc-1char.c             |  2 +-
 gcc/testsuite/gcc.dg/vect/vect-reduc-1short.c            |  2 +-
 gcc/testsuite/gcc.dg/vect/vect-reduc-2.c                 |  2 +-
 gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2char.c       |  2 +-
 gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2short.c      |  2 +-
 gcc/testsuite/lib/target-supports.exp                    | 16 ++++++++--------
 19 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index d339d1e..7aa9c9d 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1366,8 +1366,8 @@ Target supports a vector misalign access.
 @item vect_no_align
 Target does not support a vector alignment mechanism.
 
-@item vect_no_int_max
-Target does not support a vector max instruction on @code{int}.
+@item vect_no_int_min_max
+Target does not support a vector min and max instruction on @code{int}.
 
 @item vect_no_int_add
 Target does not support a vector add instruction on @code{int}.
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c b/gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c
index 29bb6c7..ff955af 100644
--- a/gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c
@@ -47,5 +47,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
 /* { dg-final { scan-tree-dump-times "vectorization not profitable" 0 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-reduc-1char.c b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-reduc-1char.c
index 318346a..82b614b 100644
--- a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-reduc-1char.c
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-reduc-1char.c
@@ -46,5 +46,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
 /* { dg-final { scan-tree-dump-times "vectorization not profitable" 0 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c b/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c
index 29bb6c7..ff955af 100644
--- a/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c
@@ -47,5 +47,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
 /* { dg-final { scan-tree-dump-times "vectorization not profitable" 0 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-noreassoc-slp-reduc-7.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-noreassoc-slp-reduc-7.c
index bbaf964..1d67450 100644
--- a/gcc/testsuite/gcc.dg/vect/no-scevccp-noreassoc-slp-reduc-7.c
+++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-noreassoc-slp-reduc-7.c
@@ -36,6 +36,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_max } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail vect_no_int_min_max } } } */
 
diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c
index 3572dfc..c41d322 100644
--- a/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c
+++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c
@@ -56,6 +56,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_max } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail vect_no_int_min_max } } } */
 
diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-5.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-5.c
index b1590d8..fc689e4 100644
--- a/gcc/testsuite/gcc.dg/vect/slp-reduc-5.c
+++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-5.c
@@ -42,6 +42,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail vect_no_int_max } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail vect_no_int_min_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail vect_no_int_min_max } } } */
 
diff --git a/gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c b/gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c
index 8fd353c..f801e76 100644
--- a/gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c
+++ b/gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c
@@ -47,4 +47,4 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "Detected reduction\\." 2 "vect"  } } */
-/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { ! { sparc*-*-* } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { ! vect_no_int_min_max } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-125.c b/gcc/testsuite/gcc.dg/vect/vect-125.c
index 0b3623e..4a3c0dc 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-125.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-125.c
@@ -16,4 +16,4 @@ void train(short *t, short *w, int n, int err)
     }
 }
 
-/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { xfail vect_no_int_min_max } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-13.c b/gcc/testsuite/gcc.dg/vect/vect-13.c
index 752fea8..5d90292 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-13.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-13.c
@@ -38,5 +38,5 @@ int main (void)
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-double-reduc-3.c b/gcc/testsuite/gcc.dg/vect/vect-double-reduc-3.c
index f2becfa..3bdf9ef 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-double-reduc-3.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-double-reduc-3.c
@@ -61,5 +61,5 @@ int main ()
   return 0;
 }
         
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_int_min_max } } } */
       
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-1.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-1.c
index 99abe06..aafa9a2 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-1.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-1.c
@@ -52,4 +52,4 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail { vect_no_int_add || vect_no_int_max } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail { vect_no_int_add || vect_no_int_min_max } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-1char-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-1char-big-array.c
index a25b6cb..660e0fd 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-1char-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-1char-big-array.c
@@ -67,4 +67,4 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-1char.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-1char.c
index 644b474..d5c6221 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-1char.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-1char.c
@@ -47,4 +47,4 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-1short.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-1short.c
index 32eb324..8bbc68c 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-1short.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-1short.c
@@ -47,4 +47,4 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-2.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-2.c
index 44f0fc7..656e571 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-2.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-2.c
@@ -49,4 +49,4 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail { vect_no_int_add || vect_no_int_max } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail { vect_no_int_add || vect_no_int_min_max } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2char.c b/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2char.c
index 6b3cd09..556c2a0 100644
--- a/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2char.c
+++ b/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2char.c
@@ -47,4 +47,4 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2short.c b/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2short.c
index 0a4df48..f914217 100644
--- a/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2short.c
+++ b/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2short.c
@@ -46,4 +46,4 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_max } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 91fd35b..b270722 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3719,23 +3719,23 @@ proc check_effective_target_vect_long_long { } {
 #
 # This won't change for different subtargets so cache the result.
 
-proc check_effective_target_vect_no_int_max { } {
-    global et_vect_no_int_max_saved
+proc check_effective_target_vect_no_int_min_max { } {
+    global et_vect_no_int_min_max_saved
 
-    if [info exists et_vect_no_int_max_saved] {
-	verbose "check_effective_target_vect_no_int_max: using cached result" 2
+    if [info exists et_vect_no_int_min_max_saved] {
+	verbose "check_effective_target_vect_no_int_min_max: using cached result" 2
     } else {
-	set et_vect_no_int_max_saved 0
+	set et_vect_no_int_min_max_saved 0
 	if { [istarget sparc*-*-*]
 	     || [istarget spu-*-*]
 	     || [istarget alpha*-*-*]
 	     || ([istarget mips*-*-*]
 		 && [check_effective_target_mips_loongson]) } {
-	    set et_vect_no_int_max_saved 1
+	    set et_vect_no_int_min_max_saved 1
 	}
     }
-    verbose "check_effective_target_vect_no_int_max: returning $et_vect_no_int_max_saved" 2
-    return $et_vect_no_int_max_saved
+    verbose "check_effective_target_vect_no_int_min_max: returning $et_vect_no_int_min_max_saved" 2
+    return $et_vect_no_int_min_max_saved
 }
 
 # Return 1 if the target plus current options does not support a vector
-- 
1.9.1

Reply via email to