> diff --git a/gcc/ChangeLog b/gcc/ChangeLog
> index 5cb07b7..754f882 100644
> --- a/gcc/ChangeLog
> +++ b/gcc/ChangeLog
> @@ -1,3 +1,13 @@
> +2013-11-17 Martin Liska <[email protected]>
> + Jan Hubicka <[email protected]>
> +
> + * cgraphunit.c (node_cmp): New function.
> + (expand_all_functions): Function ordering added.
> + * common.opt: New profile based function reordering flag introduced.
> + * lto-partition.c: Support for time profile added.
> + * lto.c: Likewise.
> + * predict.c (handle_missing_profiles): Time profile handled in
> + missing profiles.
OK.
> @@ -8933,6 +8933,14 @@ from profiling values of expressions for usage in
> optimizations.
>
> Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
>
> +@item -fprofile-reoder-functions
> +@opindex fprofile-reorder-functions
> +Function reordering based on profile instrumentation collects
> +first time of execution of a function and orders these functions
> +in ascending order.
> +
> +Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
I wonder if we don't want to enable it only for -fprofile-use -flto.
You do not need to enable it -fprofile-generate.
> --- a/gcc/opts.c
> +++ b/gcc/opts.c
> @@ -1690,6 +1690,8 @@ common_handle_option (struct gcc_options *opts,
> opts->x_flag_vect_cost_model = VECT_COST_MODEL_DYNAMIC;
> if (!opts_set->x_flag_tree_loop_distribute_patterns)
> opts->x_flag_tree_loop_distribute_patterns = value;
> + if (!opts_set->x_flag_profile_reorder_functions)
> + opts->x_flag_profile_reorder_functions = value;
> /* Indirect call profiling should do all useful transformations
> speculative devirutalization does. */
> if (!opts_set->x_flag_devirtualize_speculatively
> @@ -1708,6 +1710,8 @@ common_handle_option (struct gcc_options *opts,
> opts->x_flag_profile_values = value;
> if (!opts_set->x_flag_inline_functions)
> opts->x_flag_inline_functions = value;
> + if (!opts_set->x_flag_profile_reorder_functions)
> + opts->x_flag_profile_reorder_functions = value;
> /* FIXME: Instrumentation we insert makes ipa-reference bitmaps
> quadratic. Disable the pass until better memory representation
> is done. */
Rmove the -fprofile-generate path here.
> +
> + /* If time profile is missing, let assign the maximum that comes from
> + caller functions. */
> + if (!node->tp_first_run)
> + node->tp_first_run = max_tp_first_run;
Probably +1 here, you want the function to appar
afterwards.
Honza
> +
> if (call_count
> && fn && fn->cfg
> && (call_count * unlikely_count_fraction >= profile_info->runs))