https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108657
--- Comment #19 from Jakub Jelinek <jakub at gcc dot gnu.org> --- With the deferred stuff (why don't we DCE it for variables which are otherwise not used?), all looks fine until fre5. In fre4 we have k ={v} {CLOBBER(eol)}; c = -1; c = 1; foo (); return 0; at the end which is reasonable, the outer loop iterates c = 1, c = 0 and c = -1 and then c = 1 is stored, dse4 optimizes it to: k ={v} {CLOBBER(eol)}; c = 1; foo (); return 0; in split-path, we have in bb2 c = 1; then in one of the conditionalized bbs c = 0; and finally still <bb 8> [local count: 38651690]: k ={v} {CLOBBER(eol)}; c = 1; foo (); return 0; at the end, but fre5 keeps those c = 1; and c = 0; early stores and drops the last one.