New early __builtin_unreachable processing.
commitbf6b107e2a342319b3787ec960fc8014ef3aff91
authorAndrew MacLeod <amacleod@redhat.com>
Wed, 13 Sep 2023 15:52:15 +0000 (13 11:52 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Tue, 19 Sep 2023 14:30:40 +0000 (19 10:30 -0400)
tree3eb95486492b81a13d602cc1c3bddb098ce2c87a
parent6851e3423c2b5ec6516efa0677745d25c905e079
New early __builtin_unreachable processing.

in VRP passes before __builtin_unreachable MUST be removed, only remove it
if all exports affected by the unreachable can have global values updated, and
do not involve loads from memory.

PR tree-optimization/110080
PR tree-optimization/110249
gcc/
* tree-vrp.cc (remove_unreachable::final_p): New.
(remove_unreachable::maybe_register): Rename from
maybe_register_block and call early or final routine.
(fully_replaceable): New.
(remove_unreachable::handle_early): New.
(remove_unreachable::remove_and_update_globals): Remove
non-final processing.
(rvrp_folder::rvrp_folder): Add final flag to constructor.
(rvrp_folder::post_fold_bb): Remove unreachable registration.
(rvrp_folder::pre_fold_stmt): Move unreachable processing to here.
(execute_ranger_vrp): Adjust some call parameters.

gcc/testsuite/
* g++.dg/pr110249.C: New.
* gcc.dg/pr110080.c: New.
* gcc.dg/pr93917.c: Adjust.
gcc/testsuite/g++.dg/pr110249.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr110080.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr93917.c
gcc/tree-vrp.cc