https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106716
--- Comment #6 from Jan Hubicka <hubicka at gcc dot gnu.org> --- The reason why GIMPLE_PREDICT is ignored is that it is never used after ipa-icf and gets removed at the very beggining of late optimizations. GIMPLE_PREDICT is consumed by profile_generate pass which is run before ipa-icf. The reason why GIMPLE_PREDICT statements are not stripped during ICF is early inlining. If we early inline, we throw away its profile and estimate it again (in the context of function it was inlined to) and for that it is a good idea to keep predicts. There is no convenient place to remove them after early inlining was done and before IPA passes and that is the only reason why they are around. We may revisit that since streaming them to LTO bytecode is probably more harmful then adding extra pass after early opts to strip them. ICF doesn't code to compare edge profiles and stmt histograms. It knows how to merge them (so resulting BB profile is consistent with merging) but I suppose we may want to have some threshold on when we do not want to marge functions with very different branch probabilities in the hot part of their bodies...