diff options
author | Francois-Xavier Coudert <fxcoudert@gmail.com> | 2023-08-22 10:15:00 +0200 |
---|---|---|
committer | Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2023-08-23 00:49:08 +0200 |
commit | 0ccfbe6431e7c59a5953d1998e73d30667fd75e0 (patch) | |
tree | 7d9ec569f464f5d9a0c528a0c6f8965fcc1dc251 /libgomp/testsuite | |
parent | 3242fb533d48abab621618c4f183ca395de3dcd2 (diff) | |
download | gcc-0ccfbe6431e7c59a5953d1998e73d30667fd75e0.zip gcc-0ccfbe6431e7c59a5953d1998e73d30667fd75e0.tar.gz gcc-0ccfbe6431e7c59a5953d1998e73d30667fd75e0.tar.bz2 |
libgomp, testsuite: Do not call nonstandard functions
The following functions are not standard, and not always available
(e.g., on darwin). They should not be called unless available: gamma,
gammaf, scalb, scalbf, significand, and significandf.
libgomp/ChangeLog:
* testsuite/lib/libgomp.exp: Add effective target.
* testsuite/libgomp.c/simd-math-1.c: Avoid calling nonstandard
functions.
Diffstat (limited to 'libgomp/testsuite')
-rw-r--r-- | libgomp/testsuite/lib/libgomp.exp | 19 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.c/simd-math-1.c | 9 |
2 files changed, 28 insertions, 0 deletions
diff --git a/libgomp/testsuite/lib/libgomp.exp b/libgomp/testsuite/lib/libgomp.exp index 2f9e538..a143b5d 100644 --- a/libgomp/testsuite/lib/libgomp.exp +++ b/libgomp/testsuite/lib/libgomp.exp @@ -377,6 +377,25 @@ proc offload_target_to_openacc_device_type { offload_target } { } } +# Return 1 if certain nonstandard math functions are available +# on the target: gamma, scalb, significand, and their float variants. +proc check_effective_target_nonstandard_math_functions { } { + return [check_no_compiler_messages nonstandard_math_functions executable { + #include <math.h> + int main() { + float x = 42; + double y = 42; + x = gammaf (x); + x = __builtin_scalbf (x, 2.f); + x =__builtin_significandf (x); + y = gamma (y); + y = __builtin_scalb (y, 2.); + y =__builtin_significand (y); + return 0; + } + } "-lm" ] +} + # Return 1 if compiling for the specified offload target # Takes -foffload=... into account by checking OFFLOAD_TARGET_NAMES= # in the -v compiler output. diff --git a/libgomp/testsuite/libgomp.c/simd-math-1.c b/libgomp/testsuite/libgomp.c/simd-math-1.c index dd2077c..42a008c 100644 --- a/libgomp/testsuite/libgomp.c/simd-math-1.c +++ b/libgomp/testsuite/libgomp.c/simd-math-1.c @@ -4,6 +4,7 @@ /* { dg-do run } */ /* { dg-options "-O2 -ftree-vectorize -fno-math-errno" } */ /* { dg-additional-options -foffload-options=amdgcn-amdhsa=-mstack-size=3000000 { target offload_target_amdgcn } } */ +/* { dg-additional-options "-DNONSTDFUNC=1" { target nonstandard_math_functions } } */ #undef PRINT_RESULT #define VERBOSE 0 @@ -160,7 +161,9 @@ int main (void) TEST_FUN (float, -10.0, 10.0, expf); TEST_FUN (float, -10.0, 10.0, exp2f); TEST_FUN2 (float, -10.0, 10.0, 100.0, -25.0, fmodf); +#ifdef NONSTDFUNC TEST_FUN (float, -10.0, 10.0, gammaf); +#endif TEST_FUN2 (float, -10.0, 10.0, 15.0, -5.0,hypotf); TEST_FUN (float, -10.0, 10.0, lgammaf); TEST_FUN (float, -1.0, 50.0, logf); @@ -169,8 +172,10 @@ int main (void) TEST_FUN2 (float, -100.0, 100.0, 100.0, -100.0, powf); TEST_FUN2 (float, -50.0, 100.0, -2.0, 40.0, remainderf); TEST_FUN (float, -50.0, 50.0, rintf); +#ifdef NONSTDFUNC TEST_FUN2 (float, -50.0, 50.0, -10.0, 32.0, __builtin_scalbf); TEST_FUN (float, -10.0, 10.0, __builtin_significandf); +#endif TEST_FUN (float, -3.14159265359, 3.14159265359, sinf); TEST_FUN (float, -3.14159265359, 3.14159265359, sinhf); TEST_FUN (float, -0.1, 10000.0, sqrtf); @@ -193,7 +198,9 @@ int main (void) TEST_FUN (double, -10.0, 10.0, exp); TEST_FUN (double, -10.0, 10.0, exp2); TEST_FUN2 (double, -10.0, 10.0, 100.0, -25.0, fmod); +#ifdef NONSTDFUNC TEST_FUN (double, -10.0, 10.0, gamma); +#endif TEST_FUN2 (double, -10.0, 10.0, 15.0, -5.0, hypot); TEST_FUN (double, -10.0, 10.0, lgamma); TEST_FUN (double, -1.0, 50.0, log); @@ -202,8 +209,10 @@ int main (void) TEST_FUN2 (double, -100.0, 100.0, 100.0, -100.0, pow); TEST_FUN2 (double, -50.0, 100.0, -2.0, 40.0, remainder); TEST_FUN (double, -50.0, 50.0, rint); +#ifdef NONSTDFUNC TEST_FUN2 (double, -50.0, 50.0, -10.0, 32.0, __builtin_scalb); TEST_FUN (double, -10.0, 10.0, __builtin_significand); +#endif TEST_FUN (double, -3.14159265359, 3.14159265359, sin); TEST_FUN (double, -3.14159265359, 3.14159265359, sinh); TEST_FUN (double, -0.1, 10000.0, sqrt); |