https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102844
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at gcc dot gnu.org --- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> --- OK, so the issue is that we are doing a jump threading that violates SSA form since it bypasses the definition used by the merge block. There's likely validation that this cannot happen but since we're forward-threading it's probably happening too early and the SSA definition is only apperaring when visiting a block we thread through where we change if (nd_5 >= 128) to _46 = (singed char) nd_6; if (_46 < 0) and the merge had L4: nd.7_11 = (signed char) nd_5; where we now realize the CSE opportunity to _46. The r9-6384-g1a438d160e1dc845 change makes us enter the new _46 = (signed char) nd_6 expression into the hashtable (it was skipped before). Somebody more familiar with the (old) threading code needs to debug this further or provide hints as to where the designed point is to avoid this issue. Jeff?