]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
vect: Fix regression for PR104116
authorAvinash Jayakar <avinashd@linux.ibm.com>
Tue, 21 Oct 2025 09:33:41 +0000 (15:03 +0530)
committerAvinash Jayakar <avinashd@linux.ibm.com>
Tue, 21 Oct 2025 09:33:41 +0000 (15:03 +0530)
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.

31 files changed:
gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-2.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-div.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-2.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-2.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-2.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod.c
gcc/testsuite/gcc.dg/vect/pr104116-floor-div-2.c
gcc/testsuite/gcc.dg/vect/pr104116-floor-div-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-floor-div.c
gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-2.c
gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-floor-mod.c
gcc/testsuite/gcc.dg/vect/pr104116-round-div-2.c
gcc/testsuite/gcc.dg/vect/pr104116-round-div-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-round-div.c
gcc/testsuite/gcc.dg/vect/pr104116-round-mod-2.c
gcc/testsuite/gcc.dg/vect/pr104116-round-mod-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-round-mod.c
gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-2.c
gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-round-udiv.c
gcc/testsuite/gcc.dg/vect/pr104116-round-umod-2.c
gcc/testsuite/gcc.dg/vect/pr104116-round-umod-pow2.c
gcc/testsuite/gcc.dg/vect/pr104116-round-umod.c
gcc/testsuite/gcc.dg/vect/pr104116.h

index 7078776a5771ed8688e6b94efbc4c792c968a526..cc0cb45bc407b20c3be311a522f615224c7299d4 100644 (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);
index 7aa9ae8462748ca9800731c7222e75a1eaffbf4a..8abd35350564046c0be1d5d7dc889b27b6e68f3f 100644 (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);
index 6f903ffda92597e9d3302ff1691f03c297d5f6a3..e4a8d3062292c5880b7ef9f25c675490d67c1f31 100644 (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);
index ee6dfb92de94dd4168e3ffd99b61fd7d51585e3b..6e559ab4b068d801c21be12df8d0ab78bdaf2fc2 100644 (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);
index de409ea349a259c2fa4aebfd8ebdf1da06c006c8..9fdbf2713c40eb347a45f7f6e3efcd5a0ef62dc7 100644 (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);
index f2ba9367461129c362c466c718ff3817e63cdaa1..3f852184d209932743b1991b821cb6010a8e08ac 100644 (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);
index db1f797c1da14e7ee606e63070c45103f339d2d3..d8365c0d2c2ce0b46112241ae1ef81cac910f6f1 100644 (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);
index 06b4257d58f0bb12a6b16057356c8721261cf938..389b6c31a0ab8a21623b3a1f0305ab46d8c73ac5 100644 (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);
index ef6e8563ce01fc4e70e4ac00a61b0c6164dc6d61..54aa4fbf08a97b36c9e8243fd5cf392b36cbbc98 100644 (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);
index 2d0a5dbaf77a9c80bccd11990e9ec14997536408..190b805da3d0200ac5cabc55d277343153d0cf9a 100644 (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);
index 2d0a5dbaf77a9c80bccd11990e9ec14997536408..190b805da3d0200ac5cabc55d277343153d0cf9a 100644 (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);
index 949a5091e36b59ea5dce6fa24c356e06ccff645c..632fd46cdee381d2a4f8f29ecac17f33f2ead017 100644 (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);
index d93e0513984a6b6a737048fc66f12566b14fc771..b9db0d2d9eb8c29994b4d6c0377c4814d3ba5e07 100644 (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);
index 9e986a75dd17431c8a3cdb5db61eff7c45afc0e0..5000c29b437bb86b61977aaf28448451b4c5aec6 100644 (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);
index 89dd270364cb57757812efa727941c752ad21b5f..ed34249070ab62a308dbb1b160470eadc9a5a086 100644 (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);
index 0c5c1621e0db9a00aac8a409864eb321b472f02a..62995bb55cc3e5ec529f437de31f2786f0135285 100644 (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);
index f3de1450000ff722e9e1917db75559926f597e52..b92243dbc865ef76b3b78df8f7f8496d82a2cd7d 100644 (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);
index 3e6bbe978b5a5ad5603b9c18e49a177b1a47d6c9..63843b9795de7960f0ff4540d70a75be4e6bdeec 100644 (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);
index c242ccb9b61c26612e8ec04be85a0400631386d2..c72866a9144d96e9f7958851698b31b4509d1768 100644 (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);
index 365c2c59866f7b2de11ad4e73b589ae79fd72424..9e3e1ed2e094e6e34ce3aa4c504ded825dc5942c 100644 (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);
index 5c377d118ab6bffffc0aa73bd3c92be85e0a3a5c..5dd0f3746406c24d2819bd3270eb14d41b66944e 100644 (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);
index 6430b3ea9adeb13bd522fea338867b2dad063cd5..fe8f8bb01967b966cf4cf5bc43a9709d6c97a22b 100644 (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);
index 46c1789e9391195cb875f4fff95c4379945e618e..cd3bbda29a4806ba5c30baa3e0cd58bb02e781f2 100644 (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);
index e7ca44e2f84b26975814ecfabbc5d4fa673de69f..e617623e1eecb5fcc76162e35ecf8d32e45fbfde 100644 (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);
index 4d42f4e3c02cfbb45fd2a74415fe46eabe3f1f8f..de5e0a42da1010c7ac4bdc9113926a89b3d15541 100644 (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);
index 137b249dc4443ba6edd21ac82d5f2bc43afdee0f..a802b97c28cd71d2359b029f218c3666ffe2ae85 100644 (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);
index 183a930aef90beea2bcfc555277ce00c469a4a79..7d5db9223b77fc1cbdbc16eb4d30ddade132040d 100644 (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);
index f321e0e5c2d3fb2b203810ec84ea2b9fa484e0cf..155b26aea187a33fbde5f46fb2fb2ee378f42128 100644 (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);
index 041ecd17f5620024edf72059c30b5b939417dbbf..1b4911a059248d0bbcc163772063bc61704f57d0 100644 (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);
index b5ddad1d472ddf98a0481caaf2f5fbe302cd2876..3db289e7b57ae0bd621892742c12001a48c08bad 100644 (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);
index 6f14e4b31033c80353207c59f300297cdac6c4d2..c0973535a8c6528a65bbf035e09320440e9da7b3 100644 (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;