aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>2017-10-04 11:59:30 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2017-10-04 11:59:30 +0000
commit30d027da83cdcc174747ce19381525a16c4a4503 (patch)
tree5aeec85f033603ace711571b98c84aba26cf9b7c /gcc
parentc059a92eccd96d00ffd23801d032eba14ff2a244 (diff)
downloadgcc-30d027da83cdcc174747ce19381525a16c4a4503.zip
gcc-30d027da83cdcc174747ce19381525a16c4a4503.tar.gz
gcc-30d027da83cdcc174747ce19381525a16c4a4503.tar.bz2
New target check for double<->int conversions
gcc/ChangeLog: 2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com> * doc/sourcebuild.texi: Document vect_intdouble_cvt and vect_doubleint_cvt. gcc/testsuite/ChangeLog: 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 vect_floatint_cvt with vect_doubleint_cvt. * gcc.dg/vect/vect-intfloat-conversion-3.c: Replace vect_intfloat_cvt with vect_intdouble_cvt. * gfortran.dg/vect/pr60510.f: Require vect_intdouble_cvt. * gfortran.dg/vect/vect-8.f90: Make number of vectorized loops depend on vect_intdouble_cvt. * lib/target-supports.exp (check_effective_target_vect_doubleint_cvt) (check_effective_target_vect_intdouble_cvt): New procs. From-SVN: r253406
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/doc/sourcebuild.texi6
-rw-r--r--gcc/testsuite/ChangeLog15
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr66251.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-3.c2
-rw-r--r--gcc/testsuite/gfortran.dg/vect/pr60510.f1
-rw-r--r--gcc/testsuite/gfortran.dg/vect/vect-8.f903
-rw-r--r--gcc/testsuite/lib/target-supports.exp62
9 files changed, 95 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2015b7f..fb76db2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+ * doc/sourcebuild.texi: Document vect_intdouble_cvt and
+ vect_doubleint_cvt.
+
+2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
* doc/sourcebuild.texi: Document vect_long_mult.
2017-10-04 Richard Sandiford <richard.sandiford@linaro.org>
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 4f25268..e09bca1 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1508,6 +1508,12 @@ Target supports conversion from @code{float} to @code{signed int}.
@item vect_floatuint_cvt
Target supports conversion from @code{float} to @code{unsigned int}.
+@item vect_intdouble_cvt
+Target supports conversion from @code{signed int} to @code{double}.
+
+@item vect_doubleint_cvt
+Target supports conversion from @code{double} to @code{signed int}.
+
@item vect_max_reduc
Target supports max reduction for vectors.
@end table
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 68e0f05..f06b7b2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,20 @@
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
+ vect_floatint_cvt with vect_doubleint_cvt.
+ * gcc.dg/vect/vect-intfloat-conversion-3.c: Replace
+ vect_intfloat_cvt with vect_intdouble_cvt.
+ * gfortran.dg/vect/pr60510.f: Require vect_intdouble_cvt.
+ * gfortran.dg/vect/vect-8.f90: Make number of vectorized loops
+ depend on vect_intdouble_cvt.
+ * lib/target-supports.exp
+ (check_effective_target_vect_doubleint_cvt)
+ (check_effective_target_vect_intdouble_cvt): New procs.
+
+2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
* gcc.dg/vect/pr60656.c: Check vect_long_mult.
* lib/target-supports.exp (check_effective_target_vect_long_mult):
New proc.
diff --git a/gcc/testsuite/gcc.dg/vect/pr66251.c b/gcc/testsuite/gcc.dg/vect/pr66251.c
index 7f0c4bc..26afbc9 100644
--- a/gcc/testsuite/gcc.dg/vect/pr66251.c
+++ b/gcc/testsuite/gcc.dg/vect/pr66251.c
@@ -1,7 +1,7 @@
/* { dg-require-effective-target vect_int } */
/* { dg-require-effective-target vect_double } */
-/* { dg-require-effective-target vect_floatint_cvt } */
-/* { dg-require-effective-target vect_intfloat_cvt } */
+/* { dg-require-effective-target vect_doubleint_cvt } */
+/* { dg-require-effective-target vect_intdouble_cvt } */
/* { dg-require-effective-target vect_pack_trunc } */
/* { dg-require-effective-target vect_unpack } */
/* { dg-require-effective-target vect_hw_misalign } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-2.c b/gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-2.c
index 27d248b..64fab38 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-2.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-2.c
@@ -36,4 +36,4 @@ main (void)
return main1 ();
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_floatint_cvt } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_doubleint_cvt } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-3.c b/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-3.c
index 6eb4fec..78fc3da 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-3.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-3.c
@@ -35,4 +35,4 @@ int main (void)
return main1 ();
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_intfloat_cvt } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_intdouble_cvt } } } */
diff --git a/gcc/testsuite/gfortran.dg/vect/pr60510.f b/gcc/testsuite/gfortran.dg/vect/pr60510.f
index 5e2c085..202c1be 100644
--- a/gcc/testsuite/gfortran.dg/vect/pr60510.f
+++ b/gcc/testsuite/gfortran.dg/vect/pr60510.f
@@ -1,5 +1,6 @@
! { dg-do run }
! { dg-require-effective-target vect_double }
+! { dg-require-effective-target vect_intdouble_cvt }
! { dg-additional-options "-fno-inline -ffast-math" }
subroutine foo(a,x,y,n)
implicit none
diff --git a/gcc/testsuite/gfortran.dg/vect/vect-8.f90 b/gcc/testsuite/gfortran.dg/vect/vect-8.f90
index ec95598..8e18be5 100644
--- a/gcc/testsuite/gfortran.dg/vect/vect-8.f90
+++ b/gcc/testsuite/gfortran.dg/vect/vect-8.f90
@@ -704,4 +704,5 @@ CALL track('KERNEL ')
RETURN
END SUBROUTINE kernel
-! { dg-final { scan-tree-dump-times "vectorized 21 loops" 1 "vect" } }
+! { dg-final { scan-tree-dump-times "vectorized 21 loops" 1 "vect" { target { vect_intdouble_cvt } } } }
+! { dg-final { scan-tree-dump-times "vectorized 17 loops" 1 "vect" { target { ! vect_intdouble_cvt } } } }
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 539aaaf..4f752ec2 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3119,6 +3119,68 @@ proc check_effective_target_vect_intfloat_cvt { } {
return $et_vect_intfloat_cvt_saved($et_index)
}
+# Return 1 if the target supports signed double->int conversion
+#
+
+proc check_effective_target_vect_doubleint_cvt { } {
+ global et_vect_doubleint_cvt_saved
+ global et_index
+
+ if [info exists et_vect_doubleint_cvt_saved($et_index)] {
+ verbose "check_effective_target_vect_doubleint_cvt: using cached result" 2
+ } else {
+ set et_vect_doubleint_cvt_saved($et_index) 0
+ if { (([istarget i?86-*-*] || [istarget x86_64-*-*])
+ && [check_no_compiler_messages vect_doubleint_cvt assembly {
+ #ifdef __tune_atom__
+ # error No double vectorizer support.
+ #endif
+ }])
+ || [istarget aarch64*-*-*]
+ || [istarget spu-*-*]
+ || ([istarget powerpc*-*-*] && [check_vsx_hw_available])
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
+ set et_vect_doubleint_cvt_saved($et_index) 1
+ }
+ }
+
+ verbose "check_effective_target_vect_doubleint_cvt:\
+ returning $et_vect_doubleint_cvt_saved($et_index)" 2
+ return $et_vect_doubleint_cvt_saved($et_index)
+}
+
+# Return 1 if the target supports signed int->double conversion
+#
+
+proc check_effective_target_vect_intdouble_cvt { } {
+ global et_vect_intdouble_cvt_saved
+ global et_index
+
+ if [info exists et_vect_intdouble_cvt_saved($et_index)] {
+ verbose "check_effective_target_vect_intdouble_cvt: using cached result" 2
+ } else {
+ set et_vect_intdouble_cvt_saved($et_index) 0
+ if { (([istarget i?86-*-*] || [istarget x86_64-*-*])
+ && [check_no_compiler_messages vect_intdouble_cvt assembly {
+ #ifdef __tune_atom__
+ # error No double vectorizer support.
+ #endif
+ }])
+ || [istarget aarch64*-*-*]
+ || [istarget spu-*-*]
+ || ([istarget powerpc*-*-*] && [check_vsx_hw_available])
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
+ set et_vect_intdouble_cvt_saved($et_index) 1
+ }
+ }
+
+ verbose "check_effective_target_vect_intdouble_cvt:\
+ returning $et_vect_intdouble_cvt_saved($et_index)" 2
+ return $et_vect_intdouble_cvt_saved($et_index)
+}
+
#Return 1 if we're supporting __int128 for target, 0 otherwise.
proc check_effective_target_int128 { } {