https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103690
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Priority|P3 |P1 Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org --- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- Value numbering stmt = __trans_tmp_1_14 = _24 + 4; Setting value number of __trans_tmp_1_14 to __trans_tmp_1_22 (changed) what we do is avoiding useless work during elimination, not visiting if (0) guarded code - those regions will have not up-to-date SSA form. Block 14: BB5 found not executable the issue is that PRE does /* Because we don't follow exactly the standard PRE algorithm, and decide not to insert PHI nodes sometimes, and because value numbering of casts isn't perfect, we sometimes end up inserting dead code. This simple DCE-like pass removes any insertions we made that weren't actually used. */ simple_dce_from_worklist (inserted_exprs); which eventually runs into those uses for expressions we inserted into those unreachable blocks. The issue is long latent I think.