> 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 <davi...@google.com> > + > + * cgraphunit.c (walk_polymorphic_call_targets): Add > + dbgcnt and fopt-info support. > + 2014-05-15 Xinliang David Li <davi...@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 <mjam...@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