Modified the patch according to yours and Richard's feedback. PTAL. thanks,
David On Fri, May 16, 2014 at 9:03 AM, Jan Hubicka <hubi...@ucw.cz> wrote: >> 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