From 7c67e6e8b9815d18f548f9c54444adaef17c0a6e Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Fri, 18 May 2018 17:30:18 +0000 Subject: Split test-tgmath3 by function. It has been noted that test-tgmath3 is slow to compile, and to link on some systems , because of the size of the test. I'm working on tgmath.h support for the TS 18661-1 / 18661-3 functions that round their results to a narrower type. For the functions already present in glibc, this wouldn't make test-tgmath3 much bigger, because those functions only have two arguments. For the narrowing versions of fma (for which I've not yet added the functions to glibc), however, it would result in many configurations building tests of the type-generic macros f32fma, f64fma, f32xfma, f64xfma, each with 21 possible types for each of three arguments (float, double, long double aren't valid argument types for these macros when they return a _FloatN / _FloatNx type), so substantially increasing the size of the testcase. To avoid further increasing the size of a single test when adding the type-generic narrowing fma macros, this patch arranges for the test-tgmath3 tests to be run separately for each function tested. The fma tests are still by far the largest (next is pow, as that has two arguments that can be real or complex; after that, the two-argument real-only functions), but each type-generic fma macro for a different return type would end up with its tests being run separately, rather than increasing the size of a single test. To avoid accidentally missing testing a macro because gen-tgmath-tests.py supports testing it but the makefile fails to call it for that function, a test is also added that verifies that the lists of macros in the makefile and gen-tgmath-tests.py agree. Tested for x86_64. * math/gen-tgmath-tests.py: Import sys. (Tests.__init__): Initialize macros_seen. (Tests.add_tests): Add macro to macros_seen. Only generate tests if requested to do so for this macro. (Tests.add_all_tests): Take argument for macro for which to generate tests. (Tests.check_macro_list): New function. (main): Handle check-list argument and argument specifying macro for which to generate tests. * math/Makefile [PYTHON] (tgmath3-macros): New variable. [PYTHON] (tgmath3-macro-tests): Likewise. [PYTHON] (tests): Add $(tgmath3-macro-tests) not test-tgmath3. [PYTHON] (generated): Add $(addsuffix .c,$(tgmath3-macro-tests)) not test-tgmath3.c. [PYTHON] (CFLAGS-test-tgmath3.c): Remove. [PYTHON] ($(tgmath3-macro-tests:%=$(objpfx)%.o): Add -fno-builtin to CFLAGS. [PYTHON] ($(objpfx)test-tgmath3.c): Replace rule by.... [PYTHON] ($(foreach m,$(tgmath3-macros),$(objpfx)test-tgmath3-$(m).c): ... this. New rule. [PYTHON] (tests-special): Add $(objpfx)test-tgmath3-macro-list.out. [PYTHON] ($(objpfx)test-tgmath3-macro-list.out): New rule. --- math/Makefile | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'math/Makefile') diff --git a/math/Makefile b/math/Makefile index 23574f5e09..ea141cbf99 100644 --- a/math/Makefile +++ b/math/Makefile @@ -350,12 +350,32 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \ endif ifdef PYTHON -tests += test-tgmath3 -generated += test-tgmath3.c -CFLAGS-test-tgmath3.c += -fno-builtin - -$(objpfx)test-tgmath3.c: gen-tgmath-tests.py - $(PYTHON) $< > $@ +tgmath3-macros = atan2 cbrt ceil copysign erf erfc exp2 expm1 fdim floor \ + fma fmax fmin fmod frexp hypot ilogb ldexp lgamma llrint \ + llround log10 log1p log2 logb lrint lround nearbyint \ + nextafter nexttoward remainder remquo rint round scalbn \ + scalbln tgamma trunc acos asin atan acosh asinh atanh cos \ + sin tan cosh sinh tanh exp log pow sqrt fabs carg cimag conj \ + cproj creal roundeven nextup nextdown fminmag fmaxmag llogb \ + fromfp fromfpx ufromfp ufromfpx totalorder totalordermag \ + scalb +tgmath3-macro-tests = $(addprefix test-tgmath3-,$(tgmath3-macros)) +tests += $(tgmath3-macro-tests) +generated += $(addsuffix .c,$(tgmath3-macro-tests)) + +$(tgmath3-macro-tests:%=$(objpfx)%.o): CFLAGS += -fno-builtin + +$(foreach m,$(tgmath3-macros),\ + $(objpfx)test-tgmath3-$(m).c): $(objpfx)test-tgmath3-%.c: \ + gen-tgmath-tests.py + $(PYTHON) gen-tgmath-tests.py $* > $@ + +# Verify that the list of supported macros is in sync between the +# Makefile and gen-tgmath-tests.py. +tests-special += $(objpfx)test-tgmath3-macro-list.out +$(objpfx)test-tgmath3-macro-list.out: gen-tgmath-tests.py + $(PYTHON) $< check-list $(tgmath3-macros) > $@; \ + $(evaluate-test) endif libm-test-fast-math-cflags = -fno-builtin -D__FAST_MATH__ -DTEST_FAST_MATH -- cgit v1.2.3