On Fri, May 16, 2014 at 11:19 PM, Xinliang David Li <davi...@google.com> wrote: > Modified the patch according to yours and Richard's feedback. PTAL.
ENOPATCH. Btw, I don't see any issue with leaking node order to opt-report. Richard. > 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