https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117888

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <liuho...@gcc.gnu.org>:

https://gcc.gnu.org/g:ee2f19b0937b5efc0b23c4319cbd4a38b27eac6e

commit r15-6097-gee2f19b0937b5efc0b23c4319cbd4a38b27eac6e
Author: liuhongt <hongtao....@intel.com>
Date:   Mon Dec 2 01:54:59 2024 -0800

    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.

Reply via email to