Re: [PUSHED] vect: Add back testcases for trapping math with comparisons [PR36190]

Andrea Pinski <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <CALvbMcBkUq3QJObwDJp99_RT4RMDD2kk68vHPpbPHbN-Zo11Nw@mail.gmail.com>
On Fri, Aug 7, 2026 at 10:01 AM Torbjorn SVENSSON
<[email protected]> wrote:
>
> Hi,
>
> These test fail for arm-none-eabi with -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=auto.
>
> Should the tests include the following line
>
> /* { dg-warning "'-fassociative-math' disabled" "" { target *-*-* } 0 } */
>
> or something similar to remove the warning (above line is from gcc.dg/tree-ssa/pr23109.c)?

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126339 and
https://gcc.gnu.org/pipermail/gcc-regression/2026-July/084147.html
where I was figuring out the best way of solving this.
I think s/-ffast-math/-funsafe-math-optimizations/ in
testsuite/lib/target-supports.exp but I have not a chance to test it
out yet.

>
> This is what I see in my logs:
>
> Testing vect/vect-ifcvt-15.c
> doing compile
> Executing on host: /build/r17-2833-g32657f29f91871/bin/arm-none-eabi-gcc  /build/gcc_src/gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c  -mthumb -march=armv7ve+simd -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=auto   -dumpbase "" -fdiagnostics-plain-output   -ffast-math -ftree-vectorize -fno-tree-loop-distribute-patterns -fno-vect-cost-model -fno-common -O2 -fdump-tree-vect-details -ftrapping-math      --specs=rdimon.specs -Wl,--start-group -lc -lm -Wl,--end-group --specs=nosys.specs -Wl,--allow-multiple-definition -Wl,-u,_isatty,-u,_fstat  -Wl,-wrap,exit -Wl,-wrap,_exit -Wl,-wrap,main -Wl,-wrap,abort -Wl,gcc_tg.o -lm -T qemu.ld -o ./vect-ifcvt-15.exe    (timeout = 800)
> ...
>   status 0
> FAIL: gcc.dg/vect/vect-ifcvt-15.c (test for excess errors)
> Excess errors:
> cc1: warning: '-fassociative-math' disabled; other options take precedence
>
>
> Kind regards,
> Torbjörn
>
> On 2026-07-11 02:00, Andrew Pinski wrote:
> > These were originally renamed to no-trapping-math-vect-*.c in r0-87196-g04b03edb56633f
> > but were fixed in r0-107313-gf9613c9a919462 but never added back to the
> > trapping versions.
> > This adds them back this time with an explict -ftrapping-math.  Note vect-ifcvt-11.c
> > already exists now so need to name it vect-ifcvt-11a.c.
> >
> > Committed as obvious after testing these testcases work on x86_64-linux-gnu.
> >
> >       PR testsuite/36190
> >
> > gcc/testsuite/ChangeLog:
> >
> >       * gcc.dg/vect/vect-111.c: New test.
> >       * gcc.dg/vect/vect-ifcvt-11a.c: New test.
> >       * gcc.dg/vect/vect-ifcvt-12.c: New test.
> >       * gcc.dg/vect/vect-ifcvt-13.c: New test.
> >       * gcc.dg/vect/vect-ifcvt-14.c: New test.
> >       * gcc.dg/vect/vect-ifcvt-15.c: New test.
> >
> > Signed-off-by: Andrew Pinski <[email protected]>
> > ---
> >   gcc/testsuite/gcc.dg/vect/vect-111.c       | 40 ++++++++++++++++++++++
> >   gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c | 34 ++++++++++++++++++
> >   gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c  | 33 ++++++++++++++++++
> >   gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c  | 34 ++++++++++++++++++
> >   gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c  | 34 ++++++++++++++++++
> >   gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c  | 34 ++++++++++++++++++
> >   6 files changed, 209 insertions(+)
> >   create mode 100644 gcc/testsuite/gcc.dg/vect/vect-111.c
> >   create mode 100644 gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c
> >   create mode 100644 gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c
> >   create mode 100644 gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c
> >   create mode 100644 gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c
> >   create mode 100644 gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c
> >
> > diff --git a/gcc/testsuite/gcc.dg/vect/vect-111.c b/gcc/testsuite/gcc.dg/vect/vect-111.c
> > new file mode 100644
> > index 00000000000..a8a6d15aa1d
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.dg/vect/vect-111.c
> > @@ -0,0 +1,40 @@
> > +/* { dg-require-effective-target vect_float } */
> > +/* { dg-additional-options "-ftrapping-math" } */
> > +
> > +#include <stdarg.h>
> > +#include "tree-vect.h"
> > +
> > +#define N 16
> > +
> > +float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
> > +
> > +__attribute__ ((noinline)) int
> > +main1 (void)
> > +{
> > +  int i;
> > +  float a[N];
> > +
> > +  /* Condition in loop.  */
> > +  /* This loop is vectorized on platforms that support vect_condition.  */
> > +  for (i = 0; i < N; i++)
> > +  {
> > +    a[i] = (b[i] > 0 ? b[i] : 0);
> > +  }
> > +
> > +#pragma GCC novector
> > +  for (i = 0; i < N; i++)
> > +  {
> > +    if (a[i] != b[i])
> > +     abort ();
> > +  }
> > +  return 0;
> > +}
> > +
> > +int main (void)
> > +{
> > +  check_vect ();
> > +  return main1 ();
> > +}
> > +
> > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target powerpc*-*-* } } } */
> > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target i?86-*-* x86_64-*-* ia64-*-* } } } */
> > diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c
> > new file mode 100644
> > index 00000000000..a7f2f93a614
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c
> > @@ -0,0 +1,34 @@
> > +/* { dg-require-effective-target vect_condition } */
> > +/* { dg-require-effective-target vect_float } */
> > +/* { dg-additional-options "-fno-trapping-math" } */
> > +
> > +#include <stdarg.h>
> > +#include "tree-vect.h"
> > +
> > +#define N 16
> > +#define MAX 42
> > +
> > +float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
> > +float B[N] = {0,0,42,42,42,0,0,0,0,0,42,42,42,42,42,0};
> > +
> > +extern void abort(void);
> > +
> > +int main ()
> > +{
> > +  int i, j;
> > +
> > +  check_vect ();
> > +
> > +  for (i = 0; i < 16; i++)
> > +    A[i] = ( A[i] >= MAX ? MAX : 0);
> > +
> > +  /* check results:  */
> > +#pragma GCC novector
> > +  for (i = 0; i < N; i++)
> > +    if (A[i] != B[i])
> > +      abort ();
> > +
> > +  return 0;
> > +}
> > +
> > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> > diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c
> > new file mode 100644
> > index 00000000000..b8418dd5a4e
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c
> > @@ -0,0 +1,33 @@
> > +/* { dg-require-effective-target vect_condition } */
> > +/* { dg-require-effective-target vect_float } */
> > +/* { dg-additional-options "-ftrapping-math" } */
> > +
> > +#include <stdarg.h>
> > +#include "tree-vect.h"
> > +
> > +#define N 16
> > +#define MAX 42
> > +
> > +float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
> > +float B[N] = {0,0,0,42,42,0,0,0,0,0,42,42,42,42,42,0};
> > +
> > +extern void abort(void);
> > +
> > +int main ()
> > +{
> > +  int i, j;
> > +
> > +  check_vect ();
> > +  for (i = 0; i < 16; i++)
> > +    A[i] = ( A[i] > MAX ? MAX : 0);
> > +
> > +  /* check results:  */
> > +#pragma GCC novector
> > +  for (i = 0; i < N; i++)
> > +    if (A[i] != B[i])
> > +      abort ();
> > +
> > +  return 0;
> > +}
> > +
> > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> > diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c
> > new file mode 100644
> > index 00000000000..3a62c8cadba
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c
> > @@ -0,0 +1,34 @@
> > +/* { dg-require-effective-target vect_condition } */
> > +/* { dg-require-effective-target vect_float } */
> > +/* { dg-additional-options "-ftrapping-math" } */
> > +
> > +#include <stdarg.h>
> > +#include "tree-vect.h"
> > +
> > +#define N 16
> > +#define MAX 42
> > +
> > +float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
> > +float B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
> > +
> > +extern void abort(void);
> > +
> > +int main ()
> > +{
> > +  int i, j;
> > +
> > +  check_vect ();
> > +
> > +  for (i = 0; i < 16; i++)
> > +    A[i] = ( A[i] <= MAX ? MAX : 0);
> > +
> > +  /* check results:  */
> > +#pragma GCC novector
> > +  for (i = 0; i < N; i++)
> > +    if (A[i] != B[i])
> > +      abort ();
> > +
> > +  return 0;
> > +}
> > +
> > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> > diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c
> > new file mode 100644
> > index 00000000000..3a62c8cadba
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c
> > @@ -0,0 +1,34 @@
> > +/* { dg-require-effective-target vect_condition } */
> > +/* { dg-require-effective-target vect_float } */
> > +/* { dg-additional-options "-ftrapping-math" } */
> > +
> > +#include <stdarg.h>
> > +#include "tree-vect.h"
> > +
> > +#define N 16
> > +#define MAX 42
> > +
> > +float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
> > +float B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
> > +
> > +extern void abort(void);
> > +
> > +int main ()
> > +{
> > +  int i, j;
> > +
> > +  check_vect ();
> > +
> > +  for (i = 0; i < 16; i++)
> > +    A[i] = ( A[i] <= MAX ? MAX : 0);
> > +
> > +  /* check results:  */
> > +#pragma GCC novector
> > +  for (i = 0; i < N; i++)
> > +    if (A[i] != B[i])
> > +      abort ();
> > +
> > +  return 0;
> > +}
> > +
> > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> > diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c
> > new file mode 100644
> > index 00000000000..3180b36eb78
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c
> > @@ -0,0 +1,34 @@
> > +/* { dg-require-effective-target vect_condition } */
> > +/* { dg-require-effective-target vect_float } */
> > +/* { dg-additional-options "-ftrapping-math" } */
> > +
> > +#include <stdarg.h>
> > +#include "tree-vect.h"
> > +
> > +#define N 16
> > +#define MAX 42
> > +
> > +float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
> > +float B[N] = {42,42,0,0,0,42,42,42,42,42,0,0,0,0,0,42};
> > +
> > +extern void abort(void);
> > +
> > +int main ()
> > +{
> > +  int i, j;
> > +
> > +  check_vect ();
> > +
> > +  for (i = 0; i < 16; i++)
> > +    A[i] = ( A[i] < MAX ? MAX : 0);
> > +
> > +  /* check results:  */
> > +#pragma GCC novector
> > +  for (i = 0; i < N; i++)
> > +    if (A[i] != B[i])
> > +      abort ();
> > +
> > +  return 0;
> > +}
> > +
> > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.