https://gcc.gnu.org/g:34501ef418da13b361614235077c2162caabab73

commit r15-6652-g34501ef418da13b361614235077c2162caabab73
Author: Richard Biener <rguent...@suse.de>
Date:   Tue Jan 7 13:18:27 2025 +0100

    rtl-optimization/118298 - constant iteration loops and #pragma unroll
    
    When the RTL unroller handles constant iteration loops it bails out
    prematurely when heuristics wouldn't apply any unrolling before
    checking #pragma unroll.
    
            PR rtl-optimization/118298
            * loop-unroll.cc (decide_unroll_constant_iterations): Honor
            loop->unroll even if the loop is too big for heuristics.

Diff:
---
 gcc/loop-unroll.cc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/loop-unroll.cc b/gcc/loop-unroll.cc
index 2bd6e888b266..b49520553182 100644
--- a/gcc/loop-unroll.cc
+++ b/gcc/loop-unroll.cc
@@ -372,7 +372,8 @@ decide_unroll_constant_iterations (class loop *loop, int 
flags)
     nunroll = targetm.loop_unroll_adjust (nunroll, loop);
 
   /* Skip big loops.  */
-  if (nunroll <= 1)
+  if (nunroll <= 1
+      && !(loop->unroll > 1 && loop->unroll < USHRT_MAX))
     {
       if (dump_file)
        fprintf (dump_file, ";; Not considering loop, is too big\n");

Reply via email to