aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>2017-10-04 12:00:34 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2017-10-04 12:00:34 +0000
commit4f15b6a282bc4c11ee8b32dac4f05aab10ce3e10 (patch)
treee2cff2f4ad2fc459a9fb658dd4c251145353c6e1
parent30d027da83cdcc174747ce19381525a16c4a4503 (diff)
downloadgcc-4f15b6a282bc4c11ee8b32dac4f05aab10ce3e10.zip
gcc-4f15b6a282bc4c11ee8b32dac4f05aab10ce3e10.tar.gz
gcc-4f15b6a282bc4c11ee8b32dac4f05aab10ce3e10.tar.bz2
New target check: vect_peeling_profitable
gcc/ChangeLog: 2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com> * doc/sourcebuild.texi: Document vect_peeling_profitable. gcc/testsuite/ChangeLog: 2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com> * g++.dg/vect/slp-pr56812.cc: xfail for targets which don't want vector loop peeling. * lib/target-supports.exp (check_effective_target_vect_peeling_profitable): New proc. From-SVN: r253407
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/doc/sourcebuild.texi3
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/vect/slp-pr56812.cc4
-rw-r--r--gcc/testsuite/lib/target-supports.exp22
5 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fb76db2..7ad2fe0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+ * doc/sourcebuild.texi: Document vect_peeling_profitable.
+
+2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
* doc/sourcebuild.texi: Document vect_intdouble_cvt and
vect_doubleint_cvt.
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index e09bca1..1646d0a 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1404,6 +1404,9 @@ Target supports a vector misalign access.
@item vect_no_align
Target does not support a vector alignment mechanism.
+@item vect_peeling_profitable
+Target might require to peel loops for alignment purposes.
+
@item vect_no_int_min_max
Target does not support a vector min and max instruction on @code{int}.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f06b7b2..62991d5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,12 @@
2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+ * g++.dg/vect/slp-pr56812.cc: xfail for targets which don't want
+ vector loop peeling.
+ * lib/target-supports.exp (check_effective_target_vect_peeling_profitable):
+ New proc.
+
+2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
* gcc.dg/vect/pr66251.c: Replace vect_floatint_cvt with
vect_doubleint_cvt and vect_intfloat_cvt with vect_intdouble_cvt.
* gcc.dg/vect/vect-floatint-conversion-2.c: Replace
diff --git a/gcc/testsuite/g++.dg/vect/slp-pr56812.cc b/gcc/testsuite/g++.dg/vect/slp-pr56812.cc
index 80bdcdd..8b24b33 100644
--- a/gcc/testsuite/g++.dg/vect/slp-pr56812.cc
+++ b/gcc/testsuite/g++.dg/vect/slp-pr56812.cc
@@ -17,4 +17,6 @@ void mydata::Set (float x)
data[i] = x;
}
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" } } */
+/* For targets without vector loop peeling the loop becomes cheap
+ enough to be vectorized. */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" { xfail { ! vect_peeling_profitable } } } } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 4f752ec2..b6f9e51 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3277,6 +3277,28 @@ proc check_effective_target_vect_floatuint_cvt { } {
return $et_vect_floatuint_cvt_saved($et_index)
}
+# Return 1 if peeling for alignment might be profitable on the target
+#
+
+proc check_effective_target_vect_peeling_profitable { } {
+ global et_vect_peeling_profitable_saved
+ global et_index
+
+ if [info exists et_vect_peeling_profitable_saved($et_index)] {
+ verbose "check_effective_target_vect_peeling_profitable: using cached result" 2
+ } else {
+ set et_vect_peeling_profitable_saved($et_index) 1
+ if { ([istarget s390*-*-*]
+ && [check_effective_target_s390_vx]) } {
+ set et_vect_peeling_profitable_saved($et_index) 0
+ }
+ }
+
+ verbose "check_effective_target_vect_peeling_profitable:\
+ returning $et_vect_peeling_profitable_saved($et_index)" 2
+ return $et_vect_peeling_profitable_saved($et_index)
+}
+
# Return 1 if the target supports #pragma omp declare simd, 0 otherwise.
#
# This won't change for different subtargets so cache the result.