tree-optimization/104263 - avoid retaining abnormal edges for non-call/goto stmts
authorRichard Biener <rguenther@suse.de>
Fri, 28 Jan 2022 09:55:29 +0000 (10:55 +0100)
committerRichard Biener <rguenther@suse.de>
Fri, 28 Jan 2022 12:29:37 +0000 (13:29 +0100)
commit5b6f04276e3d1f20817ed37b2e26e43bd12cc0d2
tree2de591d76ed73f57f2e514ac26c1aa2cb631ab91
parent833e651a76cbab26d18307fe761b609c0fa61439
tree-optimization/104263 - avoid retaining abnormal edges for non-call/goto stmts

This removes a premature optimization from
gimple_purge_dead_abnormal_call_edges which, after eliding the
last setjmp (or computed goto) statement from a function and
thus clearing cfun->calls_setjmp, leaves us with the abnormal
edges from other calls that are elided for example via inlining
or DCE.  That's a CFG / IL combination that should be impossible
(not addressing the fact that with cfun->calls_setjmp and
cfun->has_nonlocal_label cleared we should not have any abnormal
edge at all).

For the testcase in the PR this means that IPA inlining will
remove the abormal edges from the block after inlining the call
the edge was coming from.

2022-01-28  Richard Biener  <rguenther@suse.de>

PR tree-optimization/104263
* tree-cfg.cc (gimple_purge_dead_abnormal_call_edges):
Purge edges also when !cfun->has_nonlocal_label
and !cfun->calls_setjmp.

* gcc.dg/tree-ssa/inline-13.c: New testcase.
gcc/testsuite/gcc.dg/tree-ssa/inline-13.c [new file with mode: 0644]
gcc/tree-cfg.cc