From adcef07c9bf0b575fd5d4cf1891a894bc4333a30 Mon Sep 17 00:00:00 2001 From: Kyrylo Tkachov Date: Fri, 5 Apr 2013 16:06:17 +0000 Subject: [PATCH] target-supports.exp (add_options_for_arm_v8_neon): Add -march=armv8-a when we use v8 NEON. 2013-04-05 Kyrylo Tkachov * 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 --- gcc/testsuite/ChangeLog | 14 ++++++++++ .../gcc.target/arm/vect-rounding-btruncf.c | 18 +++++++++++++ .../gcc.target/arm/vect-rounding-ceilf.c | 18 +++++++++++++ .../gcc.target/arm/vect-rounding-floorf.c | 18 +++++++++++++ .../gcc.target/arm/vect-rounding-roundf.c | 18 +++++++++++++ gcc/testsuite/lib/target-supports.exp | 26 ++++--------------- 6 files changed, 91 insertions(+), 21 deletions(-) create mode 100644 gcc/testsuite/gcc.target/arm/vect-rounding-btruncf.c create mode 100644 gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c create mode 100644 gcc/testsuite/gcc.target/arm/vect-rounding-floorf.c create mode 100644 gcc/testsuite/gcc.target/arm/vect-rounding-roundf.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4d7080b0551b..a12f1f491a29 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,17 @@ +2013-04-05 Kyrylo Tkachov + + * 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 * 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 000000000000..ff033d437e6e --- /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 000000000000..b54f358f71b1 --- /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 000000000000..02e188d96548 --- /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 000000000000..85e205806a41 --- /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 268fddb39661..4604af63b899 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 -- 2.47.2