mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -16,6 +16,7 @@ int main (void)
|
||||
unsigned int *ua = (unsigned int*)↑
|
||||
init_uarr(ua, N);
|
||||
udiv(ua);
|
||||
#pragma GCC novector
|
||||
for (int i=0; i<N; i++)
|
||||
{
|
||||
unsigned int expected = cl_udiv (0xf0000000 + i, 2);
|
||||
|
||||
@@ -16,6 +16,7 @@ int main (void)
|
||||
unsigned int *ua = (unsigned int*)↑
|
||||
init_uarr(ua, N);
|
||||
udiv(ua);
|
||||
#pragma GCC novector
|
||||
for (int i=0; i<N; i++)
|
||||
{
|
||||
unsigned int expected = cl_udiv (0xf0000000 + i, 8);
|
||||
|
||||
@@ -16,6 +16,7 @@ int main (void)
|
||||
unsigned int *ua = (unsigned int*)↑
|
||||
init_uarr(ua, N);
|
||||
udiv(ua);
|
||||
#pragma GCC novector
|
||||
for (int i=0; i<N; i++)
|
||||
{
|
||||
unsigned int expected = cl_udiv (0xf0000000 + i, 19);
|
||||
|
||||
@@ -17,6 +17,7 @@ int main (void)
|
||||
unsigned int *a = (unsigned int*)↑
|
||||
init_uarr(a, N);
|
||||
mod(a);
|
||||
#pragma GCC novector
|
||||
for (int i=0; i<N; i++)
|
||||
{
|
||||
unsigned int expected = cl_umod (0xf0000000 + i, 2);
|
||||
|
||||
@@ -17,6 +17,7 @@ int main (void)
|
||||
unsigned int *a = (unsigned int*)↑
|
||||
init_uarr(a, N);
|
||||
mod(a);
|
||||
#pragma GCC novector
|
||||
for (int i=0; i<N; i++)
|
||||
{
|
||||
unsigned int expected = cl_umod (0xf0000000 + i, 2);
|
||||
|
||||
@@ -17,6 +17,7 @@ int main (void)
|
||||
unsigned int *a = (unsigned int*)↑
|
||||
init_uarr(a, N);
|
||||
mod(a);
|
||||
#pragma GCC novector
|
||||
for (int i=0; i<N; i++)
|
||||
{
|
||||
unsigned int expected = cl_umod (0xf0000000 + i, 19);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -16,6 +16,7 @@ int main (void)
|
||||
unsigned int * a = (unsigned int*)↑
|
||||
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);
|
||||
|
||||
@@ -16,6 +16,7 @@ int main (void)
|
||||
unsigned int * a = (unsigned int*)↑
|
||||
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);
|
||||
|
||||
@@ -16,6 +16,7 @@ int main (void)
|
||||
unsigned int * a = (unsigned int*)↑
|
||||
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);
|
||||
|
||||
@@ -16,6 +16,7 @@ int main (void)
|
||||
unsigned int * a = (unsigned int*)↑
|
||||
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);
|
||||
|
||||
@@ -16,6 +16,7 @@ int main (void)
|
||||
unsigned int * a = (unsigned int*)↑
|
||||
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);
|
||||
|
||||
@@ -16,6 +16,7 @@ int main (void)
|
||||
unsigned int * a = (unsigned int*)↑
|
||||
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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user