diff --git a/gcc/ipa-devirt.cc b/gcc/ipa-devirt.cc index a7cb2697813..8577e9b30fb 100644 --- a/gcc/ipa-devirt.cc +++ b/gcc/ipa-devirt.cc @@ -3845,23 +3845,21 @@ ipa_devirt (void) with the speculation. */ if (e->speculative) { - bool found = false; for (cgraph_node * likely_target: likely_targets) if (e->speculative_call_for_target (likely_target)) { - found = true; - break; + fprintf (dump_file, + "We agree with speculation on target %s\n\n", + likely_target->dump_name ()); + stats.nok++; + } + else + { + fprintf (dump_file, + "We disagree with speculation on target %s\n\n", + likely_target->dump_name ()); + stats.nwrong++; } - if (found) - { - fprintf (dump_file, "We agree with speculation\n\n"); - stats.nok++; - } - else - { - fprintf (dump_file, "We disagree with speculation\n\n"); - stats.nwrong++; - } continue; } bool first = true; @@ -3908,6 +3906,16 @@ ipa_devirt (void) else if (cgraph_simple_indirect_info *sii = dyn_cast (e->indirect_info)) { + if (e->speculative) + { + if (dump_file) + fprintf (dump_file, "Call is already speculated\n\n"); + stats.nspeculated++; + + /* When dumping see if we agree with speculation. */ + if (!dump_file) + continue; + } if (!sii->fnptr_loaded_from_record || !opt_for_fn (n->decl, flag_speculatively_call_stored_functions)) @@ -3930,6 +3938,20 @@ ipa_devirt (void) if (alias) likely_tgt_node = alias; } + if (e->speculative) + { + if (e->speculative_call_for_target (likely_tgt_node)) + { + fprintf (dump_file, "Simple call agree with speculation\n\n"); + stats.nok++; + } + else + { + fprintf (dump_file, "Simple call disagree with speculation\n\n"); + stats.nwrong++; + } + continue; + } if (dump_enabled_p ()) dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, e->call_stmt,