https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97350
--- Comment #12 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Aha, the code in question is: # USE = nonlocal null { D.8330 D.22051 D.22054 D.22059 D.22060 } (nonlocal, escaped, interposable) # CLB = nonlocal null { D.8330 D.22051 D.22054 D.22059 D.22060 } (nonlocal, escaped, interposable) find_placeholder_in_expr (size_8(D), &self_refs); # PT = nonlocal escaped null _30 = self_refs.m_vec; if (_30 != 0B) goto <bb 10>; [100.00%] else goto <bb 11>; [0.00%] <bb 10> [count: 7690]: _31 = MEM[(const struct vec *)_30].m_vecpfx.m_num; if (_31 == 0) goto <bb 11>; [0.00%] else goto <bb 12>; [100.00%] What we seem to optimize out is the to m_vec, here alias set 12 makes more sense. and indeed it seems that this is missing in the summary. Smells like a bug in ipa_merge_modref_summary_after_inlining since the function is split and re-merged by inliner.