https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82918
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Probably fixed by r255093 2017-11-23 Richard Biener <rguent...@suse.de> PR tree-optimization/23094 * tree-ssa-sccvn.c (vuse_ssa_val): Handle VN_TOP when we come here from walking over backedges in the first iteration. (vn_reference_lookup_3): Skip clobbers that store the same value. * gcc.dg/tree-ssa/ssa-fre-61.c: New testcase. because we now see that we at most store the same value to value.data[0]. _1 = value2_6(D)->data[0]; value_5(D)->data[0] = _1; _2 = value2_6(D)->data[0]; But the handling is quite simplistic so value.data[0] = value2.data[0]+1; value.data[1] = value2.data[0]+1; value.data[2] = value2.data[0]+1; isn't handled. We also do not walk which is why the swapped case isn't handled either.