> So with this the discriminator we assign might depend on whether
> we have debug stmts or not.  We output them only to debug info, so
> it should in principle not cause compare-debug issues, right?  And
> we don't use discriminators to affect code generation (hopefully).

This is the reason of opts.cc change:
> diff --git a/gcc/opts.cc b/gcc/opts.cc
> index 6ca1ec7e865..60ad633b7ff 100644
> --- a/gcc/opts.cc
> +++ b/gcc/opts.cc
> @@ -1411,11 +1411,14 @@ finish_options (struct gcc_options *opts, struct 
> gcc_options *opts_set,
>       opts->x_debug_info_level = DINFO_LEVEL_NONE;
>      }
>  
> +  /* Also enable markers with -fauto-profile even when debug info is 
> disabled,
> +     so we assign same discriminators and can read back the profile info.  */
>    if (!opts_set->x_debug_nonbind_markers_p)
>      opts->x_debug_nonbind_markers_p
>        = (opts->x_optimize
> -      && opts->x_debug_info_level >= DINFO_LEVEL_NORMAL
> -      && (dwarf_debuginfo_p (opts) || codeview_debuginfo_p ())
> +      && ((opts->x_debug_info_level >= DINFO_LEVEL_NORMAL
> +           && (dwarf_debuginfo_p (opts) || codeview_debuginfo_p ()))
> +          || opts->x_flag_auto_profile)
>        && !(opts->x_flag_selective_scheduling
>             || opts->x_flag_selective_scheduling2));

We only consume discriminators if we produce dwarf or if we do
auto-profile and they indeed must agree.  With -Wauto-profile you now
get compiler complain if they does not.  

I enable debug stmt markers in both cases, so discriminators should be
the same.  I tested that on spec and it seems to work. As discussed on
IRC I will look into possibility of enabling compare_debug for
profiledbootstrap and autoprofiledbootstrap where it is currently off.

We already have function to remove debug statements, so I guess we could
remove them after auto-profile annotate pass at -O0, that I plan to look
into incrementally now.  My immediate plan is to fix the create_gcov
consumer, so things can be finally properly tested.

Honza

Reply via email to