]> git.ipfire.org Git - thirdparty/gcc.git/commit
Fix inaccuracy in cunroll/cunrolli when considering what's innermost loop.
authorliuhongt <hongtao.liu@intel.com>
Mon, 2 Dec 2024 09:54:59 +0000 (01:54 -0800)
committerliuhongt <hongtao.liu@intel.com>
Wed, 11 Dec 2024 00:58:52 +0000 (16:58 -0800)
commitee2f19b0937b5efc0b23c4319cbd4a38b27eac6e
tree5fefd01df10747bf9531ce05a7b73eb7a5b10ef8
parentd5b3d9ed3447bd85c50d794421e97c757b84bfdf
Fix inaccuracy in cunroll/cunrolli when considering what's innermost loop.

r15-919-gef27b91b62c3aa removed 1 / 3 size reduction for innermost
loop, but it doesn't accurately remember what's "innermost" for 2
testcases in PR117888.

1) For pass_cunroll, the "innermost" loop could be an originally outer
loop with inner loop completely unrolled by cunrolli. The patch moves
local variable cunrolli to parameter of tree_unroll_loops_completely
and passes it directly from execute of the pass.

2) For pass_cunrolli, cunrolli is set to false when the sibling loop
of a innermost loop is completely unrolled, and it inaccurately
takes the innermost loop as an "outer" loop. The patch add another
paramter innermost to helps recognizing the "original" innermost loop.

gcc/ChangeLog:

PR tree-optimization/117888
* tree-ssa-loop-ivcanon.cc (try_unroll_loop_completely): Use
cunrolli instead of cunrolli && !loop->inner to check if it's
innermost loop.
(canonicalize_loop_induction_variables): Add new parameter
const_sbitmap innermost, and pass
cunrolli
&& (unsigned) loop->num < SBITMAP_SIZE (innermost)
&& bitmap_bit_p (innermost, loop->num) as "cunrolli" to
try_unroll_loop_completely
(canonicalize_induction_variables): Pass innermost to
canonicalize_loop_induction_variables.
(tree_unroll_loops_completely_1): Add new parameter
const_sbitmap innermost.
(tree_unroll_loops_completely): Move local variable cunrolli
to parameter to indicate it's from pass cunrolli, also track
all "original" innermost loop at the beginning.

gcc/testsuite/ChangeLog:

* gcc.dg/pr117888-2.c: New test.
* gcc.dg/vect/pr117888-1.c: Ditto.
* gcc.dg/tree-ssa/pr83403-1.c: Add
--param max-completely-peeled-insns=300 for arm*-*-*.
* gcc.dg/tree-ssa/pr83403-2.c: Ditto.
gcc/testsuite/gcc.dg/pr117888-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/pr83403-1.c
gcc/testsuite/gcc.dg/tree-ssa/pr83403-2.c
gcc/testsuite/gcc.dg/vect/pr117888-1.c [new file with mode: 0644]
gcc/tree-ssa-loop-ivcanon.cc