vect: Fix regression for PR104116

The commit gcc-16-4464-g6883d51304f added 30 new tests for testing
vectorization of {FLOOR,MOD,ROUND}_{DIV,MOD}_EXPR. Few of them failed
for certain targets due to the vectorization of runtime-check loop which
was not intended.
This patch disables optimization for all of the run-time check loops so
that the count of vectorized loop is always 1.

2025-10-21  Avinash Jayakar  <avinashd@linux.ibm.com>

gcc/testsuite/ChangeLog:
	PR target/104116
	* gcc.dg/vect/pr104116-ceil-div-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-div-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-div.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-mod-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-mod-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-mod.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-udiv-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-udiv-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-udiv.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-umod-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-umod-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-ceil-umod.c: disable vectorization.
	* gcc.dg/vect/pr104116-floor-div-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-floor-div-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-floor-div.c: disable vectorization.
	* gcc.dg/vect/pr104116-floor-mod-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-floor-mod-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-floor-mod.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-div-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-div-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-div.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-mod-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-mod-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-mod.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-udiv-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-udiv-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-udiv.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-umod-2.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-umod-pow2.c: disable vectorization.
	* gcc.dg/vect/pr104116-round-umod.c: disable vectorization.
	* gcc.dg/vect/pr104116.h (init_arr): use std idiom, correct
	indentation.
	(init_uarr): use std idiom.
This commit is contained in:
Avinash Jayakar
2025-10-21 15:03:41 +05:30
parent 07800a565a
commit 01c854c2a3
31 changed files with 34 additions and 5 deletions

View File

@@ -16,6 +16,7 @@ int main (void)
int *a = (int*)&arr;
init_arr(a, N);
div(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = cl_div (i - N/2, 2);

View File

@@ -17,6 +17,7 @@ int main (void)
int *a = (int*)&arr;
init_arr(a, N);
div(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = cl_div (i - N/2, 8);

View File

@@ -17,6 +17,7 @@ int main (void)
int *a = (int*)&arr;
init_arr(a, N);
div(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = cl_div (i - N/2, 19);

View File

@@ -17,6 +17,7 @@ int main (void)
int *a = (int*)&arr;
init_arr(a, N);
div(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = cl_mod (i - N/2, 2);

View File

@@ -17,6 +17,7 @@ int main (void)
unsigned int *a = (unsigned int*)&arr;
init_arr(a, N);
div(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
unsigned int expected = cl_mod (i - N/2, 8);

View File

@@ -17,6 +17,7 @@ int main (void)
int *a = (int*)&arr;
init_arr(a, N);
div(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = cl_mod (i - N/2, 19);

View File

@@ -16,6 +16,7 @@ int main (void)
unsigned int *ua = (unsigned int*)&uarr;
init_uarr(ua, N);
udiv(ua);
#pragma GCC novector
for (int i=0; i<N; i++)
{
unsigned int expected = cl_udiv (0xf0000000 + i, 2);

View File

@@ -16,6 +16,7 @@ int main (void)
unsigned int *ua = (unsigned int*)&uarr;
init_uarr(ua, N);
udiv(ua);
#pragma GCC novector
for (int i=0; i<N; i++)
{
unsigned int expected = cl_udiv (0xf0000000 + i, 8);

View File

@@ -16,6 +16,7 @@ int main (void)
unsigned int *ua = (unsigned int*)&uarr;
init_uarr(ua, N);
udiv(ua);
#pragma GCC novector
for (int i=0; i<N; i++)
{
unsigned int expected = cl_udiv (0xf0000000 + i, 19);

View File

@@ -17,6 +17,7 @@ int main (void)
unsigned int *a = (unsigned int*)&uarr;
init_uarr(a, N);
mod(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
unsigned int expected = cl_umod (0xf0000000 + i, 2);

View File

@@ -17,6 +17,7 @@ int main (void)
unsigned int *a = (unsigned int*)&uarr;
init_uarr(a, N);
mod(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
unsigned int expected = cl_umod (0xf0000000 + i, 2);

View File

@@ -17,6 +17,7 @@ int main (void)
unsigned int *a = (unsigned int*)&uarr;
init_uarr(a, N);
mod(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
unsigned int expected = cl_umod (0xf0000000 + i, 19);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
div_2(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = fl_div (i - N/2, 2);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
div_2(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = fl_div (i - N/2, 8);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
div_2(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = fl_div (i - N/2, 19);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
mod(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = fl_mod (i - N/2, 2);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
mod(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = fl_mod (i - N/2, 8);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
mod(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = fl_mod (i - N/2, 19);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
div(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = rd_div (i - N/2, 2);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
div(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = rd_div (i - N/2, 8);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
div(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = rd_div (i - N/2, 19);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
mod(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = rd_mod (i - N/2, 2);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
mod(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = rd_mod (i - N/2, 8);

View File

@@ -16,6 +16,7 @@ int main (void)
int * a = (int*)&arr;
init_arr(a, N);
mod(a);
#pragma GCC novector
for (int i=0; i<N; i++)
{
int expected = rd_mod (i - N/2, 19);

View File

@@ -16,6 +16,7 @@ int main (void)
unsigned int * a = (unsigned int*)&uarr;
init_uarr(a, N);
div(a);
#pragma GCC novector
for (unsigned int i=0; i<N; i++)
{
unsigned int expected = rd_udiv (0xf0000000 + i, 2);

View File

@@ -16,6 +16,7 @@ int main (void)
unsigned int * a = (unsigned int*)&uarr;
init_uarr(a, N);
div(a);
#pragma GCC novector
for (unsigned int i=0; i<N; i++)
{
unsigned int expected = rd_udiv (0xf0000000 + i, 8);

View File

@@ -16,6 +16,7 @@ int main (void)
unsigned int * a = (unsigned int*)&uarr;
init_uarr(a, N);
div(a);
#pragma GCC novector
for (unsigned int i=0; i<N; i++)
{
unsigned int expected = rd_udiv (0xf0000000 + i, 19);

View File

@@ -16,6 +16,7 @@ int main (void)
unsigned int * a = (unsigned int*)&uarr;
init_uarr(a, N);
mod(a);
#pragma GCC novector
for (unsigned int i=0; i<N; i++)
{
unsigned int expected = rd_umod (0xf0000000 + i, 2);

View File

@@ -16,6 +16,7 @@ int main (void)
unsigned int * a = (unsigned int*)&uarr;
init_uarr(a, N);
mod(a);
#pragma GCC novector
for (unsigned int i=0; i<N; i++)
{
unsigned int expected = rd_umod (0xf0000000 + i, 8);

View File

@@ -16,6 +16,7 @@ int main (void)
unsigned int * a = (unsigned int*)&uarr;
init_uarr(a, N);
mod(a);
#pragma GCC novector
for (unsigned int i=0; i<N; i++)
{
unsigned int expected = rd_umod (0xf0000000 + i, 19);

View File

@@ -82,17 +82,17 @@ NAME (unsigned int * a) \
#define N 1024
int arr[N];
__attribute__((optimize("O0")))
void init_arr (int *a, int n)
{
for (int i=0; i<n; i++)
a[i] = i - n/2;
#pragma GCC novector
for (int i=0; i<n; i++)
a[i] = i - n/2;
}
unsigned int uarr[N];
__attribute__((optimize("O0")))
void init_uarr (unsigned int *a, int n)
{
#pragma GCC novector
for (unsigned int i=0; i<n; i++)
a[i] = 0xf0000000 + i;
}
@@ -141,7 +141,6 @@ int fl_div (int x, int y)
return q;
}
int fl_mod (int x, int y)
{
int r = x % y;