mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-25 03:55:32 +08:00
02e32295b2
Add a new check-simd target to the testsuite. The new target creates a subdirectory, generates the necessary Makefiles, and spawns submakes to build and run the tests. Running this testsuite with defaults on my machine takes half of the time the dejagnu testsuite required to only determine whether to run tests. Since the simd testsuite integrated in dejagnu increased the time of the whole libstdc++ testsuite by ~100% this approach is a compromise for speed while not sacrificing coverage too much. Since the test driver is invoked individually per test executable from a Makefile, make's jobserver (-j) trivially parallelizes testing. Testing different flags and with simulator (or remote execution) is possible. E.g. `make check-simd DRIVEROPTS=-q target_list="unix{-m64,-m32}{-march=sandybridge,-march=skylake-avx512}{,- ffast-math}"` runs the testsuite 8 times in different subdirectories, using 8 different combinations of compiler flags, only outputs failing tests (-q), and prints all summaries at the end. It skips most ABI tags by default unless --run-expensive is passed to DRIVEROPTS or GCC_TEST_RUN_EXPENSIVE is not empty. To use a simulator, the CHECK_SIMD_CONFIG variable needs to point to a shell script which calls `define_target <name> <flags> <simulator>` and set target_list as needed. E.g.: case "$target_triplet" in x86_64-*) target_list="unix{-march=sandybridge,-march=skylake-avx512} ;; powerpc64le-*) define_target power8 "-static -mcpu=power8" "/usr/bin/qemu-ppc64le -cpu power8" define_target power9 -mcpu=power9 "$HOME/bin/run_on_gcc135" target_list="power8 power9{,-ffast-math}" ;; esac libstdc++-v3/ChangeLog: * scripts/check_simd: New file. This script is called from the the check-simd target. It determines a set of compiler flags and simulator setups for calling generate_makefile.sh and passes the information back to the check-simd target, which recurses to the generated Makefiles. * scripts/create_testsuite_files: Remove files below simd/tests/ from testsuite_files and place them in testsuite_files_simd. * testsuite/Makefile.am: Add testsuite_files_simd. Add check-simd target. * testsuite/Makefile.in: Regenerate. * testsuite/experimental/simd/driver.sh: New file. This script compiles and runs a given simd test, logging its output and status. It uses the timeout command to implement compile and test timeouts. * testsuite/experimental/simd/generate_makefile.sh: New file. This script generates a Makefile which uses driver.sh to compile and run the tests and collect the logs into a single log file. * testsuite/experimental/simd/tests/abs.cc: New file. Tests abs(simd). * testsuite/experimental/simd/tests/algorithms.cc: New file. Tests min/max(simd, simd). * testsuite/experimental/simd/tests/bits/conversions.h: New file. Contains functions to support tests involving conversions. * testsuite/experimental/simd/tests/bits/make_vec.h: New file. Support functions make_mask and make_vec. * testsuite/experimental/simd/tests/bits/mathreference.h: New file. Support functions to supply precomputed math function reference data. * testsuite/experimental/simd/tests/bits/metahelpers.h: New file. Support code for SFINAE testing. * testsuite/experimental/simd/tests/bits/simd_view.h: New file. * testsuite/experimental/simd/tests/bits/test_values.h: New file. Test functions to easily drive a test with simd objects initialized from a given list of values and a range of random values. * testsuite/experimental/simd/tests/bits/ulp.h: New file. Support code to determine the ULP distance of simd objects. * testsuite/experimental/simd/tests/bits/verify.h: New file. Test framework for COMPARE'ing simd objects and instantiating the test templates with value_type and ABI tag. * testsuite/experimental/simd/tests/broadcast.cc: New file. Test simd broadcasts. * testsuite/experimental/simd/tests/casts.cc: New file. Test simd casts. * testsuite/experimental/simd/tests/fpclassify.cc: New file. Test floating-point classification functions. * testsuite/experimental/simd/tests/frexp.cc: New file. Test frexp(simd). * testsuite/experimental/simd/tests/generator.cc: New file. Test simd generator constructor. * testsuite/experimental/simd/tests/hypot3_fma.cc: New file. Test 3-arg hypot(simd,simd,simd) and fma(simd,simd,sim). * testsuite/experimental/simd/tests/integer_operators.cc: New file. Test integer operators. * testsuite/experimental/simd/tests/ldexp_scalbn_scalbln_modf.cc: New file. Test ldexp(simd), scalbn(simd), scalbln(simd), and modf(simd). * testsuite/experimental/simd/tests/loadstore.cc: New file. Test (converting) simd loads and stores. * testsuite/experimental/simd/tests/logarithm.cc: New file. Test log*(simd). * testsuite/experimental/simd/tests/mask_broadcast.cc: New file. Test simd_mask broadcasts. * testsuite/experimental/simd/tests/mask_conversions.cc: New file. Test simd_mask conversions. * testsuite/experimental/simd/tests/mask_implicit_cvt.cc: New file. Test simd_mask implicit conversions. * testsuite/experimental/simd/tests/mask_loadstore.cc: New file. Test simd_mask loads and stores. * testsuite/experimental/simd/tests/mask_operator_cvt.cc: New file. Test simd_mask operators convert as specified. * testsuite/experimental/simd/tests/mask_operators.cc: New file. Test simd_mask compares, subscripts, and negation. * testsuite/experimental/simd/tests/mask_reductions.cc: New file. Test simd_mask reductions. * testsuite/experimental/simd/tests/math_1arg.cc: New file. Test 1-arg math functions on simd. * testsuite/experimental/simd/tests/math_2arg.cc: New file. Test 2-arg math functions on simd. * testsuite/experimental/simd/tests/operator_cvt.cc: New file. Test implicit conversions on simd binary operators behave as specified. * testsuite/experimental/simd/tests/operators.cc: New file. Test simd compares, subscripts, not, unary minus, plus, minus, multiplies, divides, increment, and decrement. * testsuite/experimental/simd/tests/reductions.cc: New file. Test reduce(simd). * testsuite/experimental/simd/tests/remqo.cc: New file. Test remqo(simd). * testsuite/experimental/simd/tests/simd.cc: New file. Basic sanity checks of simd types. * testsuite/experimental/simd/tests/sincos.cc: New file. Test sin(simd) and cos(simd). * testsuite/experimental/simd/tests/split_concat.cc: New file. Test split(simd) and concat(simd, simd). * testsuite/experimental/simd/tests/splits.cc: New file. Test split(simd_mask). * testsuite/experimental/simd/tests/trigonometric.cc: New file. Test remaining trigonometric functions on simd. * testsuite/experimental/simd/tests/trunc_ceil_floor.cc: New file. Test trunc(simd), ceil(simd), and floor(simd). * testsuite/experimental/simd/tests/where.cc: New file. Test masked operations using where.
61 lines
2.1 KiB
Bash
Executable File
61 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Constructs lists of source files (full pathnames) to test. Two
|
|
# files are constructed: testsuite_files, which is used to test with
|
|
# the default dg-runtest command, and testsuite_files_interactive,
|
|
# which is used to test cases that require input to be entered. In
|
|
# addition, both lists are pruned of wchar_t tests if the toolchain
|
|
# under test does not support wchar_t functionality.
|
|
#
|
|
# We mimic the mkcheck script in that the first time this is run, all
|
|
# existing files are listed in "testsuite_files" in the output
|
|
# directory. Subsequent runs pull the list from that file, allowing
|
|
# users to trim the list down to problematic tests, or just run
|
|
# particular directories or sub-directories of tests.
|
|
#
|
|
# Selecting individual tests can also be done with RUNTESTFLAGS, but
|
|
# that doesn't really do all that we are trying to accomplish here.
|
|
|
|
LC_ALL=C
|
|
export LC_ALL
|
|
|
|
# Both of these are in the appropriate testsuite subdirectories.
|
|
srcdir="$1"
|
|
outdir="$2"
|
|
|
|
tmp="${TMPDIR:-/tmp}/ctt$$"
|
|
tests_file_normal="$outdir/testsuite_files"
|
|
tests_file_inter="$outdir/testsuite_files_interactive"
|
|
tests_file_perf="$outdir/testsuite_files_performance"
|
|
tests_file_simd="$outdir/testsuite_files_simd"
|
|
|
|
cd $srcdir
|
|
# This is the ugly version of "everything but the current directory". It's
|
|
# what has to happen when find(1) doesn't support -mindepth, or -xtype.
|
|
# The directories here should be consistent with libstdc++-dg/conformance.exp
|
|
dlist=`echo [0-9][0-9]*`
|
|
dlist="$dlist std abi backward ext performance tr1 tr2 decimal experimental"
|
|
dlist="$dlist special_functions"
|
|
find $dlist "(" -type f -o -type l ")" -name "*.cc" -print > $tmp.01
|
|
find $dlist "(" -type f -o -type l ")" -name "*.c" -print > $tmp.02
|
|
cat $tmp.01 $tmp.02 | sort > $tmp.1
|
|
if test ! -s "$tmp.1"; then
|
|
exit 1
|
|
fi
|
|
|
|
# Now filter out classes of tests. These classes are run using special rules.
|
|
grep _xin $tmp.1 > $tests_file_inter
|
|
grep -v _xin $tmp.1 > $tmp.4
|
|
|
|
grep performance $tmp.4 > $tests_file_perf
|
|
grep -v performance $tmp.4 > $tmp.5
|
|
|
|
grep simd/tests/ $tmp.5 > $tests_file_simd
|
|
grep -v simd/tests/ $tmp.5 > $tmp.6
|
|
|
|
# ...more filters go here.
|
|
cp $tmp.6 $tests_file_normal
|
|
|
|
rm $tmp*
|
|
exit 0
|