https://gcc.gnu.org/g:4302e16581b490a196a11de3a54a424f52e27340
commit r17-2325-g4302e16581b490a196a11de3a54a424f52e27340 Author: Andrew Pinski <[email protected]> Date: Fri Jul 10 16:55:19 2026 -0700 vect: Add back testcases for trapping math with comparisons [PR36190] 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]> Diff: --- 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(+) 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 000000000000..a8a6d15aa1d8 --- /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 000000000000..a7f2f93a6140 --- /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 000000000000..b8418dd5a4ed --- /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 000000000000..3a62c8cadba4 --- /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 000000000000..3a62c8cadba4 --- /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 000000000000..3180b36eb785 --- /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" } } */
