commit e30889fa7024ccfd47731aafbaf2288646b65504 Author: Kyrylo Tkachov Date: Wed May 13 16:08:03 2015 +0100 Add testsuite check for hw sqrt. Add generic test for pow sqrt synthesis diff --git a/gcc/testsuite/gcc.dg/pow-sqrt-synth-1.c b/gcc/testsuite/gcc.dg/pow-sqrt-synth-1.c new file mode 100644 index 0000000..a65efeb --- /dev/null +++ b/gcc/testsuite/gcc.dg/pow-sqrt-synth-1.c @@ -0,0 +1,38 @@ +/* { dg-do compile { target hw_sqrt } } */ +/* { dg-options "-fdump-tree-sincos -Ofast --param max-pow-sqrt-depth=8" } */ +/* { dg-additional-options "-mfloat-abi=softfp -mfpu=neon-vfpv4" { target arm*-*-* } } */ + +double +foo (double a) +{ + return __builtin_pow (a, -5.875); +} + +double +foof (double a) +{ + return __builtin_pow (a, 0.75f); +} + +double +bar (double a) +{ + return __builtin_pow (a, 1.0 + 0.00390625); +} + +double +baz (double a) +{ + return __builtin_pow (a, -1.25) + __builtin_pow (a, 5.75) - __builtin_pow (a, 3.375); +} + +#define N 256 +void +vecfoo (double *a) +{ + for (int i = 0; i < N; i++) + a[i] = __builtin_pow (a[i], 1.25); +} + +/* { dg-final { scan-tree-dump-times "synthesizing" 7 "sincos" } } */ +/* { dg-final { cleanup-tree-dump "sincos" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/pow-sqrt-synth-1.c b/gcc/testsuite/gcc.target/aarch64/pow-sqrt-synth-1.c deleted file mode 100644 index 52514fb..0000000 --- a/gcc/testsuite/gcc.target/aarch64/pow-sqrt-synth-1.c +++ /dev/null @@ -1,38 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-fdump-tree-sincos -Ofast --param max-pow-sqrt-depth=8" } */ - - -double -foo (double a) -{ - return __builtin_pow (a, -5.875); -} - -double -foof (double a) -{ - return __builtin_pow (a, 0.75f); -} - -double -bar (double a) -{ - return __builtin_pow (a, 1.0 + 0.00390625); -} - -double -baz (double a) -{ - return __builtin_pow (a, -1.25) + __builtin_pow (a, 5.75) - __builtin_pow (a, 3.375); -} - -#define N 256 -void -vecfoo (double *a) -{ - for (int i = 0; i < N; i++) - a[i] = __builtin_pow (a[i], 1.25); -} - -/* { dg-final { scan-tree-dump-times "synthesizing" 7 "sincos" } } */ -/* { dg-final { cleanup-tree-dump "sincos" } } */ \ No newline at end of file diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 3728927..c8f20a4 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -4668,6 +4668,27 @@ proc check_effective_target_vect_call_copysignf { } { return $et_vect_call_copysignf_saved } +# Return 1 if the target supports hardware square root instructions. + +proc check_effective_target_hw_sqrt { } { + global et_hw_sqrt_saved + + if [info exists et_hw_sqrt_saved] { + verbose "check_effective_target_hw_sqrt: using cached result" 2 + } else { + set et_hw_sqrt_saved 0 + if { [istarget x86_64-*-*] + || ([istarget powerpc*-*-*] && [check_vsx_hw_available]) + || [istarget aarch64*-*-*] + || ([istarget arm*-*-*] && [check_effective_target_arm_vfp_ok]) } { + set et_hw_sqrt_saved 1 + } + } + + verbose "check_effective_target_hw_sqrt: returning et_hw_sqrt_saved" 2 + return $et_hw_sqrt_saved +} + # Return 1 if the target supports vector sqrtf calls. proc check_effective_target_vect_call_sqrtf { } {