aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-03-09 09:02:07 +0100
committerRichard Biener <rguenther@suse.de>2023-04-19 13:50:21 +0200
commita243ce2a52a6c62bc0d6be0b756a85dd9c1bceb7 (patch)
tree37e227b6780a77a541c003cc36af246061d7841d
parent6d7e0bcfa49e4ddc84dabe520bba8a023bc52692 (diff)
downloadgcc-a243ce2a52a6c62bc0d6be0b756a85dd9c1bceb7.zip
gcc-a243ce2a52a6c62bc0d6be0b756a85dd9c1bceb7.tar.gz
gcc-a243ce2a52a6c62bc0d6be0b756a85dd9c1bceb7.tar.bz2
tree-optimization/44794 - avoid excessive RTL unrolling on epilogues
The following adjusts tree_[transform_and_]unroll_loop to set an upper bound on the number of iterations on the epilogue loop it creates. For the testcase at hand which involves array prefetching this avoids applying RTL unrolling to them when -funroll-loops is specified. Other users of this API includes predictive commoning and unroll-and-jam. PR tree-optimization/44794 * tree-ssa-loop-manip.cc (tree_transform_and_unroll_loop): If an epilogue loop is required set its iteration upper bound.
-rw-r--r--gcc/tree-ssa-loop-manip.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/tree-ssa-loop-manip.cc b/gcc/tree-ssa-loop-manip.cc
index 4ef27ba..a52277a 100644
--- a/gcc/tree-ssa-loop-manip.cc
+++ b/gcc/tree-ssa-loop-manip.cc
@@ -1297,6 +1297,12 @@ tree_transform_and_unroll_loop (class loop *loop, unsigned factor,
}
remove_path (exit);
+
+ /* The epilog loop latch executes at most factor - 1 times.
+ Since the epilog is entered unconditionally it will need to handle
+ up to factor executions of its body. */
+ new_loop->any_upper_bound = 1;
+ new_loop->nb_iterations_upper_bound = factor - 1;
}
else
new_exit = single_dom_exit (loop);