As suggested in PR108030, I used __attribute__ syntax to annotate lambdas as always_inline. In few cases the lambda was meant to be a function boundary and the attribute was omitted.
PR108030 mentions a few more functions as problematic. But ideally these should not be inline in some fixed_size_simd cases. This needs further verification. This fix is not simply an optimization. If the user hits this bug then using simd makes the code significantly slower than without using simd. That defeats the whole purpose of the type. While doing verification I found a few more issues and implemented the use of PCH to speed up the test suite. Matthias Kretz (7): libstdc++: Ensure __builtin_constant_p isn't lost on the way libstdc++: Annotate most lambdas with always_inline libstdc++: Document timeout and timeout-factor of simd tests libstdc++: Use a PCH to speed up check-simd libstdc++: printf format string fix in testsuite libstdc++: Fix incorrect __builtin_is_constant_evaluated calls libstdc++: Fix incorrect function call in -ffast-math optimization libstdc++-v3/include/experimental/bits/simd.h | 245 ++++++------ .../include/experimental/bits/simd_builtin.h | 351 ++++++++++-------- .../experimental/bits/simd_converter.h | 22 +- .../include/experimental/bits/simd_detail.h | 3 + .../experimental/bits/simd_fixed_size.h | 265 ++++++------- .../include/experimental/bits/simd_math.h | 56 +-- .../include/experimental/bits/simd_neon.h | 14 +- .../include/experimental/bits/simd_x86.h | 143 +++---- .../testsuite/experimental/simd/README.md | 10 +- .../experimental/simd/generate_makefile.sh | 24 +- .../testsuite/experimental/simd/tests/abs.cc | 4 +- .../experimental/simd/tests/algorithms.cc | 3 +- .../simd/tests/bits/conversions.h | 25 +- .../experimental/simd/tests/bits/main.h | 87 +++++ .../experimental/simd/tests/bits/make_vec.h | 10 + .../simd/tests/bits/mathreference.h | 3 + .../simd/tests/bits/test_values.h | 6 + .../experimental/simd/tests/bits/verify.h | 66 +--- .../experimental/simd/tests/broadcast.cc | 3 +- .../experimental/simd/tests/casts.cc | 4 +- .../experimental/simd/tests/fpclassify.cc | 4 +- .../experimental/simd/tests/frexp.cc | 4 +- .../experimental/simd/tests/generator.cc | 3 +- .../experimental/simd/tests/hypot3_fma.cc | 4 +- .../simd/tests/integer_operators.cc | 5 +- .../simd/tests/ldexp_scalbn_scalbln_modf.cc | 4 +- .../experimental/simd/tests/loadstore.cc | 4 +- .../experimental/simd/tests/logarithm.cc | 5 +- .../experimental/simd/tests/mask_broadcast.cc | 3 +- .../simd/tests/mask_conversions.cc | 2 +- .../simd/tests/mask_implicit_cvt.cc | 3 +- .../experimental/simd/tests/mask_loadstore.cc | 29 +- .../simd/tests/mask_operator_cvt.cc | 3 +- .../experimental/simd/tests/mask_operators.cc | 3 +- .../simd/tests/mask_reductions.cc | 30 +- .../experimental/simd/tests/math_1arg.cc | 3 +- .../experimental/simd/tests/math_2arg.cc | 4 +- .../experimental/simd/tests/operator_cvt.cc | 3 +- .../experimental/simd/tests/operators.cc | 14 +- .../experimental/simd/tests/reductions.cc | 4 +- .../experimental/simd/tests/remqo.cc | 4 +- .../testsuite/experimental/simd/tests/simd.cc | 2 +- .../experimental/simd/tests/sincos.cc | 6 +- .../experimental/simd/tests/split_concat.cc | 4 +- .../experimental/simd/tests/splits.cc | 2 +- .../experimental/simd/tests/trigonometric.cc | 4 +- .../simd/tests/trunc_ceil_floor.cc | 3 +- .../experimental/simd/tests/where.cc | 4 +- 48 files changed, 772 insertions(+), 735 deletions(-) create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/bits/ main.h -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Centre for Heavy Ion Research https://gsi.de stdₓ::simd ──────────────────────────────────────────────────────────────────────────