https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113372
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Ah, so it really is the classical stack conflicts vs. ADDR_EXPR problem. Before dom3 we have _2 = &bitint.6 + 8; ivtmp.40_3 = (unsigned long) _2; from ivopts above the loop using bitint.6 and _44 = &bitint.6 + 8; ivtmp.28_43 = (unsigned long) _44; above the second loop computing bitint.6, with bitint.6 ={v} {CLOBBER(eos)}; in between (or eob). dom3 optimizes the latter to _44 = &MEM <unsigned long[100]> [(void *)&bitint.6 + 8B]; ivtmp.28_43 = ivtmp.40_3; and later on all the visible uses of bitint.6 in the second part of the function after bitint.6 ={v} {CLOBBER(eos)}; disappear.