add dbgcnt and opt-info support for devirtualization

Jan Hubicka hubicka@ucw.cz
Fri May 16 16:03:00 GMT 2014


> Hi, debugging runtime bugs due to devirtualization can be hard for
> very large C++ programs with complicated class hierarchy. This patch
> adds the support to report this high level transformation via
> -fopt-info (not hidden inside dump file) and the ability the do binary
> search with cutoff.
> 
> Ok for trunk after build and test?

Seems resonable to me.
> 
> thanks,
> 
> David

> Index: ChangeLog
> ===================================================================
> --- ChangeLog	(revision 210479)
> +++ ChangeLog	(working copy)
> @@ -1,3 +1,18 @@
> +2014-05-15  Xinliang David Li  <davidxl@google.com>
> +
> +	* cgraphunit.c (walk_polymorphic_call_targets): Add
> +	dbgcnt and fopt-info support.
> +	2014-05-15  Xinliang David Li  <davidxl@google.com>
> +
> +		* cgraphunit.c (walk_polymorphic_call_targets): Add
> +		dbgcnt and fopt-info support.
> +		* ipa-prop.c (ipa_make_edge_direct_to_target): Ditto.
> +		* ipa-devirt.c (ipa_devirt): Ditto.
> +		* ipa.c (walk_polymorphic_call_targets): Ditto.
> +		* gimple-fold.c (fold_gimple_assign): Ditto.
> +		(gimple_fold_call): Ditto.
> +		* dbgcnt.def: New counter.
> +
>  2014-05-15  Martin Jambor  <mjambor@suse.cz>
>  
>  	PR ipa/61085
> Index: ipa-prop.c
> ===================================================================
> --- ipa-prop.c	(revision 210479)
> +++ ipa-prop.c	(working copy)
> @@ -59,6 +59,7 @@ along with GCC; see the file COPYING3.
>  #include "ipa-utils.h"
>  #include "stringpool.h"
>  #include "tree-ssanames.h"
> +#include "dbgcnt.h"
>  
>  /* Intermediate information about a parameter that is only useful during the
>     run of ipa_analyze_node and is not kept afterwards.  */
> @@ -2494,6 +2495,13 @@ ipa_make_edge_direct_to_target (struct c
>  	    fprintf (dump_file, "ipa-prop: Discovered direct call to non-function"
>  				" in %s/%i, making it unreachable.\n",
>  		     ie->caller->name (), ie->caller->order);
> +          else if (dump_enabled_p ())
> +	    {
> +	      location_t loc = gimple_location (ie->call_stmt);
> +	      dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
> +			       "Discovered direct call to non-function in %s, "
> +			       "making it unreachable\n", ie->caller->name ());

Perhaps "turning it to __builtin_unreachable call" and similarly in the other cases
we introduce __builtin_unreachable? I think that could be easier for user to work
out.

What king of problems in devirtualizatoin you are seeing?


Honza



More information about the Gcc-patches mailing list