> Hi, > > In symbol merging, ipa_merge_profiles() can encounter functions > where the entry block has an initialized but zero profile count. When > such counts are used as denominators in apply_scale(), it triggers an > assertion failure in profile-count.h:1192 (gcc_checking_assert(den.m_val)). > > This patch adds nonzero_p checks before attempting to scale profile > counts, preventing division by zero. > > This issue shows up randomly with AutoFDO (including profile bootstrap). > Tested with bootstrap and regression testing. Also tested with some > large applications where this first showed up.
In general passes that possibly put ENTRY_BLOCK_PTR (fn)->count to zero should watch for it and drop the profile to GLOBAL0 variant. Do you know from where the zero count originates? There is logic in auto-profile doing that. Other places, like cloning and inlining watches that, too. Honza > > gcc/ChangeLog: > > * ipa-utils.cc (ipa_merge_profiles): Add nonzero_p() checks > for srcden and dstden before using them as denominators in > apply_scale to prevent ICE. > > This is hitting quite a few times including in: > > during IPA pass: modref > lto1: internal compiler error: in apply_scale, at profile-count.h:1192 > 0x2230c13 internal_error(char const*, ...) > > /var/jenkins/workspace/GCC_oss-main/gcc/diagnostic-global-context.cc:787 > 0x899ebf fancy_abort(char const*, int, char const*) > /var/jenkins/workspace/GCC_oss-main/gcc/diagnostics/context.cc:1812 > 0x98620f profile_count::apply_scale(profile_count, profile_count) const > /var/jenkins/workspace/GCC_oss-main/gcc/profile-count.h:1192 > 0xd190cb ipa_merge_profiles(cgraph_node*, cgraph_node*, bool) > /var/jenkins/workspace/GCC_oss-main/gcc/ipa-utils.cc:637 > 0x8f303b lto_symtab_merge_symbols_1 > /var/jenkins/workspace/GCC_oss-main/gcc/lto/lto-symtab.cc:934 > 0x8f303b lto_symtab_merge_symbols() > /var/jenkins/workspace/GCC_oss-main/gcc/lto/lto-symtab.cc:996 > 0x9027d7 read_cgraph_and_symbols(unsigned int, char const**) > /var/jenkins/workspace/GCC_oss-main/gcc/lto/lto-common.cc:3003 > 0x8dce9f lto_main() > /var/jenkins/workspace/GCC_oss-main/gcc/lto/lto.cc:663 > <http://lto.cc:663/> > > Bootstrapped and regression tested on aavch64-linux-gnu with no new > regressions. Is this OK? > > Thanks, > Kugan > > > > > >
