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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Alexandre Oliva
<aol...@gcc.gnu.org>:

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

commit r12-8372-ge628690d6333f0cc4d338cd8b796408f35e07ced
Author: Alexandre Oliva <ol...@adacore.com>
Date:   Fri May 13 03:05:46 2022 -0300

    [PR105455] Set edge probabilities when hardening conditionals

    When turning unconditional edges into conditional, as in
    gimple-harden-conditionals.cc:insert_check_and_trap, the newly-created
    edge's probability comes out uninitialized, while the previously
    unconditional edge's probability is presumably
    profile_probability::always.

    Mixing initialized and uninitialized probabilities before expand
    breaks predict.cc:force_edge_cold: the initialized probability may end
    up copied to a REG_BR_PROB note in a conditional branch insn, but if
    force_edge_cold is called on that edge, it will find another edge with
    uninitialized probability and assume the note is absent.  Later on,
    rtl_verify_edges complains that the note does not match the
    probability modified by force_edge_cold in the edge.

    This patch sets probabilities for edges affected by hardening of
    conditionals, both the newly-created edges to trap blocks and the
    previously-unconditional edges, so that the former are considered
    never taken, while the latter are confirmed as always taken.


    for  gcc/ChangeLog

            PR rtl-optimization/105455
            * gimple-harden-conditionals.cc (insert_check_and_trap): Set
            probabilities for newly-conditional edges.

    for  gcc/testsuite/ChangeLog

            PR rtl-optimization/105455
            * gcc.dg/pr105455.c: New.

    (cherry picked from commit 90a8eab4a1292430467f68b65e5127f7760acc94)

Reply via email to