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.
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
#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;
}
return q;
}
-
int fl_mod (int x, int y)
{
int r = x % y;