https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109893
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot
gnu.org
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
This is a failure to jump-thread because of size limits. If we'd limit
the backward threader the same way as the forward threader we'd optimize this
(--param fsm-scale-path-stmts=1).
--param max-jump-thread-duplication-stmts is 15
--param fsm-scale-path-stmts is 2
but for "true" FSM paths we allow --param max-fsm-thread-path-insns == 100
For non-loop FSM threads we only allow 7 stmts (and we lack the forward
thread estimation of the number of stmts we likely eliminate).
Increasing --param max-jump-thread-duplication-stmts to 17 also works to
resolve the regression.
But IMHO the scale param should simply go - we have the other limit for
paths across a backedge when threading multi-way branches. The argument
for the scaling is
/* The generic copier used by the backthreader does not re-use an
existing threading path to reduce code duplication. So for that
case, drastically reduce the number of statements we are allowed
to copy. */
that sounds more like limiting overall threading rather than individual
ones. I'll adjust fsm-scale-path-stmts to be more finely tunable.