[Bug rtl-optimization/105455] ICE: verify_flow_info failed (error: verify_flow_info: REG_BR_PROB does not match cfg)
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri May 13 06:06:12 GMT 2022
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
<aoliva@gcc.gnu.org>:
https://gcc.gnu.org/g:e628690d6333f0cc4d338cd8b796408f35e07ced
commit r12-8372-ge628690d6333f0cc4d338cd8b796408f35e07ced
Author: Alexandre Oliva <oliva@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)
More information about the Gcc-bugs
mailing list