aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2013-04-05 16:06:17 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2013-04-05 16:06:17 +0000
commitadcef07c9bf0b575fd5d4cf1891a894bc4333a30 (patch)
treec52d829dbb3bd5bd40cdc74828ca8fcc0c5ff227
parent3f3bf1a8bfe2212d9a83b5316d93a4add718dbf2 (diff)
downloadgcc-adcef07c9bf0b575fd5d4cf1891a894bc4333a30.zip
gcc-adcef07c9bf0b575fd5d4cf1891a894bc4333a30.tar.gz
gcc-adcef07c9bf0b575fd5d4cf1891a894bc4333a30.tar.bz2
target-supports.exp (add_options_for_arm_v8_neon): Add -march=armv8-a when we use v8 NEON.
2013-04-05 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * lib/target-supports.exp (add_options_for_arm_v8_neon): Add -march=armv8-a when we use v8 NEON. (check_effective_target_vect_call_btruncf): Remove arm-*-*-*. (check_effective_target_vect_call_ceilf): Likewise. (check_effective_target_vect_call_floorf): Likewise. (check_effective_target_vect_call_roundf): Likewise. (check_vect_support_and_set_flags): Remove check for arm_v8_neon. * gcc.target/arm/vect-rounding-btruncf.c: New testcase. * gcc.target/arm/vect-rounding-ceilf.c: Likewise. * gcc.target/arm/vect-rounding-floorf.c: Likewise. * gcc.target/arm/vect-rounding-roundf.c: Likewise. From-SVN: r197523
-rw-r--r--gcc/testsuite/ChangeLog14
-rw-r--r--gcc/testsuite/gcc.target/arm/vect-rounding-btruncf.c18
-rw-r--r--gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c18
-rw-r--r--gcc/testsuite/gcc.target/arm/vect-rounding-floorf.c18
-rw-r--r--gcc/testsuite/gcc.target/arm/vect-rounding-roundf.c18
-rw-r--r--gcc/testsuite/lib/target-supports.exp26
6 files changed, 91 insertions, 21 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4d7080b..a12f1f4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,17 @@
+2013-04-05 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * lib/target-supports.exp (add_options_for_arm_v8_neon):
+ Add -march=armv8-a when we use v8 NEON.
+ (check_effective_target_vect_call_btruncf): Remove arm-*-*-*.
+ (check_effective_target_vect_call_ceilf): Likewise.
+ (check_effective_target_vect_call_floorf): Likewise.
+ (check_effective_target_vect_call_roundf): Likewise.
+ (check_vect_support_and_set_flags): Remove check for arm_v8_neon.
+ * gcc.target/arm/vect-rounding-btruncf.c: New testcase.
+ * gcc.target/arm/vect-rounding-ceilf.c: Likewise.
+ * gcc.target/arm/vect-rounding-floorf.c: Likewise.
+ * gcc.target/arm/vect-rounding-roundf.c: Likewise.
+
2013-04-05 David Edelsohn <dje.gcc@gmail.com>
* gcc.target/powerpc/sd-vsx.c: Skip on AIX.
diff --git a/gcc/testsuite/gcc.target/arm/vect-rounding-btruncf.c b/gcc/testsuite/gcc.target/arm/vect-rounding-btruncf.c
new file mode 100644
index 0000000..ff033d4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/vect-rounding-btruncf.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_v8_neon_ok } */
+/* { dg-options "-O2 -ffast-math -ftree-vectorize" } */
+/* { dg-add-options arm_v8_neon } */
+
+#define N 32
+
+void
+foo (float *output, float *input)
+{
+ int i = 0;
+ /* Vectorizable. */
+ for (i = 0; i < N; i++)
+ output[i] = __builtin_truncf (input[i]);
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_call_btruncf } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c b/gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c
new file mode 100644
index 0000000..b54f358
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_v8_neon_ok } */
+/* { dg-options "-O2 -ffast-math -ftree-vectorize" } */
+/* { dg-add-options arm_v8_neon } */
+
+#define N 32
+
+void
+foo (float *output, float *input)
+{
+ int i = 0;
+ /* Vectorizable. */
+ for (i = 0; i < N; i++)
+ output[i] = __builtin_ceilf (input[i]);
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_call_ceilf } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.target/arm/vect-rounding-floorf.c b/gcc/testsuite/gcc.target/arm/vect-rounding-floorf.c
new file mode 100644
index 0000000..02e188d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/vect-rounding-floorf.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_v8_neon_ok } */
+/* { dg-options "-O2 -ffast-math -ftree-vectorize" } */
+/* { dg-add-options arm_v8_neon } */
+
+#define N 32
+
+void
+foo (float *output, float *input)
+{
+ int i = 0;
+ /* Vectorizable. */
+ for (i = 0; i < N; i++)
+ output[i] = __builtin_floorf (input[i]);
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_call_floorf } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.target/arm/vect-rounding-roundf.c b/gcc/testsuite/gcc.target/arm/vect-rounding-roundf.c
new file mode 100644
index 0000000..85e2058
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/vect-rounding-roundf.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_v8_neon_ok } */
+/* { dg-options "-O2 -ffast-math -ftree-vectorize" } */
+/* { dg-add-options arm_v8_neon } */
+
+#define N 32
+
+void
+foo (float *output, float *input)
+{
+ int i = 0;
+ /* Vectorizable. */
+ for (i = 0; i < N; i++)
+ output[i] = __builtin_roundf (input[i]);
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_call_roundf } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 268fddb..4604af6 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -2211,7 +2211,7 @@ proc add_options_for_arm_v8_neon { flags } {
return "$flags"
}
global et_arm_v8_neon_flags
- return "$flags $et_arm_v8_neon_flags"
+ return "$flags $et_arm_v8_neon_flags -march=armv8-a"
}
# Add the options needed for NEON. We need either -mfloat-abi=softfp
@@ -4082,9 +4082,7 @@ proc check_effective_target_vect_call_btruncf { } {
verbose "check_effective_target_vect_call_btruncf: using cached result" 2
} else {
set et_vect_call_btruncf_saved 0
- if { [istarget aarch64*-*-*]
- || ([istarget arm*-*-*]
- && [check_effective_target_arm_v8_neon_ok]) } {
+ if { [istarget aarch64*-*-*] } {
set et_vect_call_btruncf_saved 1
}
}
@@ -4120,9 +4118,7 @@ proc check_effective_target_vect_call_ceilf { } {
verbose "check_effective_target_vect_call_ceilf: using cached result" 2
} else {
set et_vect_call_ceilf_saved 0
- if { [istarget aarch64*-*-*]
- || ([istarget arm*-*-*]
- && [check_effective_target_arm_v8_neon_ok]) } {
+ if { [istarget aarch64*-*-*] } {
set et_vect_call_ceilf_saved 1
}
}
@@ -4158,9 +4154,7 @@ proc check_effective_target_vect_call_floorf { } {
verbose "check_effective_target_vect_call_floorf: using cached result" 2
} else {
set et_vect_call_floorf_saved 0
- if { [istarget aarch64*-*-*]
- || ([istarget arm*-*-*]
- && [check_effective_target_arm_v8_neon_ok]) } {
+ if { [istarget aarch64*-*-*] } {
set et_vect_call_floorf_saved 1
}
}
@@ -4268,9 +4262,7 @@ proc check_effective_target_vect_call_roundf { } {
verbose "check_effective_target_vect_call_roundf: using cached result" 2
} else {
set et_vect_call_roundf_saved 0
- if { [istarget aarch64*-*-*]
- || ([istarget arm*-*-*]
- && [check_effective_target_arm_v8_neon_ok]) } {
+ if { [istarget aarch64*-*-*] } {
set et_vect_call_roundf_saved 1
}
}
@@ -5172,14 +5164,6 @@ proc check_vect_support_and_set_flags { } {
}
} elseif [istarget ia64-*-*] {
set dg-do-what-default run
- } elseif [is-effective-target arm_v8_neon_ok] {
- eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_v8_neon ""]
- lappend DEFAULT_VECTCFLAGS "-ffast-math"
- if [is-effective-target arm_v8_neon_hw] {
- set dg-do-what-default run
- } else {
- set dg-do-what-default compile
- }
} elseif [is-effective-target arm_neon_ok] {
eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_neon ""]
# NEON does not support denormals, so is not used for vectorization by