diff options
author | Richard Biener <rguenther@suse.de> | 2022-01-05 16:29:53 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-01-10 11:08:42 +0100 |
commit | 92e114d66e93d60dcef97c66cddbae38b657d768 (patch) | |
tree | 4f637ed6d4d46c427fe061536cc60080b0686b7e /gcc/tree-ssa-loop-ivcanon.c | |
parent | a42dd9febbbeb328af5b3b6adf4431dd7bcca113 (diff) | |
download | gcc-92e114d66e93d60dcef97c66cddbae38b657d768.zip gcc-92e114d66e93d60dcef97c66cddbae38b657d768.tar.gz gcc-92e114d66e93d60dcef97c66cddbae38b657d768.tar.bz2 |
tree-optimization/100359 - restore unroll at -O3
This fixes a mistake done with r8-5008 when introducing
allow_peel to the unroll code. The intent was to allow
peeling that doesn't grow code but the result was that
with -O3 and UL_ALL this wasn't done. The following
instantiates the desired effect by adjusting ul to UL_NO_GROWTH
if peeling is not allowed.
2022-01-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/100359
* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely):
Allow non-growing peeling with !allow_peel and UL_ALL.
* gcc.dg/tree-ssa/pr100359.c: New testcase.
Diffstat (limited to 'gcc/tree-ssa-loop-ivcanon.c')
-rw-r--r-- | gcc/tree-ssa-loop-ivcanon.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c index 4f1e353..e2ac204 100644 --- a/gcc/tree-ssa-loop-ivcanon.c +++ b/gcc/tree-ssa-loop-ivcanon.c @@ -720,7 +720,7 @@ try_unroll_loop_completely (class loop *loop, exit = NULL; /* See if we can improve our estimate by using recorded loop bounds. */ - if ((allow_peel || maxiter == 0 || ul == UL_NO_GROWTH) + if ((maxiter == 0 || ul != UL_SINGLE_ITER) && maxiter >= 0 && (!n_unroll_found || (unsigned HOST_WIDE_INT)maxiter < n_unroll)) { @@ -729,6 +729,10 @@ try_unroll_loop_completely (class loop *loop, /* Loop terminates before the IV variable test, so we cannot remove it in the last iteration. */ edge_to_cancel = NULL; + /* If we do not allow peeling and we iterate just allow cases + that do not grow code. */ + if (!allow_peel && maxiter != 0) + ul = UL_NO_GROWTH; } if (!n_unroll_found) |