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

--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <pins...@gcc.gnu.org>:

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

commit r15-3436-gb2b20b277988ab9ddb6ea82141075147b7b98f74
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Mon Sep 2 21:34:53 2024 -0700

    split-path: Improve ifcvt heurstic for split path [PR112402]

    This simplifies the heurstic for split path to see if the join
    bb is a ifcvt candidate.
    For the predecessors bbs need either to be empty or only have one
    statement in them which could be a decent ifcvt candidate.
    The previous heurstics would miss that:
    ```
    if (a) goto B else goto C;
    B:  goto C;
    C:
    c = PHI<d,e>
    ```

    Would be a decent ifcvt candidate. And would also miss:
    ```
    if (a) goto B else goto C;
    B: d = f + 1;  goto C;
    C:
    c = PHI<d,e>
    ```

    Also since currently the max number of cmovs being able to produced is 3,
we
    should only assume `<= 3` phis can be ifcvt candidates.

    The testcase changes for split-path-6.c is that lookharder function
    is a true ifcvt case where we would get cmov as expected; it looks like it
    was not a candidate when the heurstic was added but became one later on.
    pr88797.C is now rejected via it being an ifcvt candidate rather than being
about
    DCE/const prop.

    The rest of the testsuite changes are just slight change in the dump,
    removing the "*diamnond" part as it was removed from the print.

    Bootstrapped and tested on x86_64.

            PR tree-optimization/112402

    gcc/ChangeLog:

            * gimple-ssa-split-paths.cc (poor_ifcvt_pred): New function.
            (is_feasible_trace): Remove old heurstics for ifcvt cases.
            For num_stmts <=1 for both pred check poor_ifcvt_pred on both
            pred.

    gcc/testsuite/ChangeLog:

            * gcc.dg/tree-ssa/split-path-11.c: Update scan.
            * gcc.dg/tree-ssa/split-path-2.c: Update scan.
            * gcc.dg/tree-ssa/split-path-5.c: Update scan.
            * gcc.dg/tree-ssa/split-path-6.c: Update scan.
            * g++.dg/tree-ssa/pr88797.C: Update scan.
            * gcc.dg/tree-ssa/split-path-13.c: New test.

    Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>

Reply via email to