diff options
author | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2017-10-04 12:00:34 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2017-10-04 12:00:34 +0000 |
commit | 4f15b6a282bc4c11ee8b32dac4f05aab10ce3e10 (patch) | |
tree | e2cff2f4ad2fc459a9fb658dd4c251145353c6e1 /gcc | |
parent | 30d027da83cdcc174747ce19381525a16c4a4503 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/doc/sourcebuild.texi | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/vect/slp-pr56812.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 22 |
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. |