gcc-17-2325-g4302e16581b4: 10 regressions on arm
A commit adding testcases for trapping math with comparisons caused regressions on ARM due to an interaction with -ffast-math.
This thread discusses 10 regressions on ARM architectures caused by commit gcc-17-2325-g4302e16581b4, which introduced test cases for trapping math operations with comparisons. Richard Biener explains that the regressions stem from an interaction between the new test cases using -ftrapping-math and the existing test suite logic, which sets -ffast-math for NEON vectorization support. This combination leads to unexpected behavior, specifically manifesting as ‘excess errors’ in test cases like vect-111.c.
- contributor
Reports 10 regressions on armv8l-unknown-linux-gnueabihf native after commit gcc-17-2325-g4302e16581b4.
“in armv8l-unknown-linux-gnueabihf native, after: ... Produces 10 regressions: ...”
- contributor
Identifies a specific regression (FAIL: gcc.dg/vect/vect-111.c (test for excess errors)) and notes an interaction with -ftrapping-math.
“FAIL: gcc.dg/vect/vect-111.c (test for excess errors) Excess errors: cc1: warning: '-fassociative-math' disabled; other options take precedence”
- reviewer
Explains the root cause: the new test cases use -ftrapping-math, which conflicts with the test suite's automatic addition of -ffast-math for NEON vectorization, leading to unexpected issues.
“This is caused by an interaction with -ftrapping-math added by the new new testcases and this from check_vect_support_and_set_flags: ``` } elseif [is-effective-target arm_neon_ok] { eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_neon ""] # NEON does not support denormals, so is not used for vectorization by # default to avoid loss of precision. We must pass -ffa…”
Technical Tradeoffs
- Enabling trapping math for test coverage conflicts with fast-math optimizations needed for NEON vectorization tests.
- The interaction between flags leads to unexpected errors in the test suite, indicating a need for better flag management or test case isolation.
In Details
A commit intended to enhance vectorization test coverage by enabling trapping-math-with-comparisons has triggered regressions on ARM. The issue arises from a conflict between the test's -ftrapping-math flag and the test suite's default -ffast-math applied for NEON vectorization, leading to unexpected errors. This problem affects the gcc.dg/vect/ test suite on ARM targets.
- regression
- A bug introduced into a software system that causes previously working functionality to fail.
- ARM
- A family of reduced instruction set computing (RISC) architectures for computer processors, commonly used in mobile devices and embedded systems, as well as servers and desktops.
- vect
- Refers to vectorization, a compiler optimization technique that allows operations to be performed on multiple data points simultaneously, often by utilizing specialized CPU instructions.
- test cases
- Specific inputs and conditions designed to verify that a piece of software behaves as expected.
- NEON
- An advanced SIMD (Single Instruction, Multiple Data) instruction set extension for the ARM architecture, used for accelerating media and signal processing, and general-purpose SIMD programming.
- -ftrapping-math
- A GCC compiler flag that enables trapping for operations that can cause exceptions, such as division by zero or floating-point exceptions.
- -ffast-math
- A GCC compiler flag that enables optimizations for floating-point arithmetic, potentially sacrificing strict IEEE compliance for performance.