In gcc4-8, the max einline iterations are restricted to 1. For AutoFDO, this is bad because early inline is not size restricted. This patch allows einline to do multiple iterations in AutoFDO. It also enables tracer optimization in AutoFDO.
Bootstrapped and passed regression test. OK for googel-4_8? Thanks, Dehao Index: gcc/ipa-inline.c =================================================================== --- gcc/ipa-inline.c (revision 199416) +++ gcc/ipa-inline.c (working copy) @@ -2161,7 +2161,8 @@ early_inliner (void) { /* We iterate incremental inlining to get trivial cases of indirect inlining. */ - while (iterations < PARAM_VALUE (PARAM_EARLY_INLINER_MAX_ITERATIONS) + while ((flag_auto_profile + || iterations < PARAM_VALUE (PARAM_EARLY_INLINER_MAX_ITERATIONS)) && early_inline_small_functions (node)) { timevar_push (TV_INTEGRATION); Index: gcc/opts.c =================================================================== --- gcc/opts.c (revision 199416) +++ gcc/opts.c (working copy) @@ -1644,6 +1644,8 @@ common_handle_option (struct gcc_options *opts, opts->x_flag_peel_loops = value; if (!opts_set->x_flag_value_profile_transformations) opts->x_flag_value_profile_transformations = value; + if (!opts_set->x_flag_tracer) + opts->x_flag_tracer = value; if (!opts_set->x_flag_inline_functions) opts->x_flag_inline_functions = value; if (!opts_set->x_flag_ipa_cp)