Limit inlining functions called once
authorJan Hubicka <jh@suse.cz>
Thu, 9 Dec 2021 20:02:17 +0000 (21:02 +0100)
committerJan Hubicka <jh@suse.cz>
Thu, 9 Dec 2021 20:02:17 +0000 (21:02 +0100)
commitf157c5362b4844f7676cae2aba81a4cf75bd68d5
tree81b783c0485d83f14494ca6afb36da088ef5951e
parent243a980437b5e7fca56587bf86667005bdf343a7
Limit inlining functions called once

as dicussed in PR ipa/103454 there are several benchmarks that regresses
for -finline-functions-called once. Runtmes:
 - tramp3d with -Ofast. 31%
 - exchange2 with -Ofast 11-21%
 - roms O2 9%-10%
 - tonto 2.5-3.5% with LTO
Build times:
 - specfp2006 41% (mostly wrf that builds 71% faster)
 - specint2006 1.5-3%
 - specfp2017 64% (again mostly wrf)
 - specint2017 2.5-3.5%

This patch adds two params to tweak the behaviour:
 1) max-inline-functions-called-once-loop-depth limiting the loop depth
    (this is useful primarily for exchange where the inlined function is in
     loop depth 9)
 2) max-inline-functions-called-once-insns
    We already have large-function-insns/growth parameters, but these are
    limiting also inlining small functions, so reducing them will regress
    very large functions that are hot.

    Because inlining functions called once is meant just as a cleanup pass
    I think it makes sense to have separate limit for it.
gcc/ChangeLog:

2021-12-09  Jan Hubicka  <hubicka@ucw.cz>

* doc/invoke.texi (max-inline-functions-called-once-loop-depth,
max-inline-functions-called-once-insns): New parameters.
* ipa-inline.c (check_callers): Handle
param_inline_functions_called_once_loop_depth and
param_inline_functions_called_once_insns.
(edge_badness): Fix linebreaks.
* params.opt (param=max-inline-functions-called-once-loop-depth,
param=max-inline-functions-called-once-insn): New params.
gcc/doc/invoke.texi
gcc/ipa-inline.c
gcc/params.opt