https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83189
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- This is in: /* Ensure that the frequencies in the loop match the new estimated number of iterations, and change the probability of the new exit edge. */ freq_h = loop->header->count; freq_e = (loop_preheader_edge (loop))->count (); if (freq_h.nonzero_p ()) { /* Avoid dropping loop body profile counter to 0 because of zero count in loop's preheader. */ freq_e = freq_e.force_nonzero (); scale_loop_frequencies (loop, freq_e.probability_in (freq_h)); } (gdb) p freq_h $13 = {static n_bits = 61, static max_count = 2305843009213693950, static uninitialized_count = 2305843009213693951, m_val = 410706248, m_quality = profile_guessed_local} (gdb) p freq_e $14 = {static n_bits = 61, static max_count = 2305843009213693950, static uninitialized_count = 2305843009213693951, m_val = 0, m_quality = profile_precise} and the problem is calling probability_in with !compatible_p profile_counts - one is guessed local, i.e. !ipa_p (), the other is precise and thus ipa_p (). No idea what to do here, don't scale if they aren't incompatible, do something else?