http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57303
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- DSE has /* If use_stmt is or might be a nop assignment, e.g. for struct { ... } S a, b, *p; ... b = a; b = b; or b = a; b = *p; where p might be &b, or *p = a; *p = b; where p might be &b, or *p = *u; *p = *v; where p might be v, then USE_STMT acts as a use as well as definition, so store in STMT is not dead. */ if (stmt != use_stmt && ref_maybe_used_by_stmt_p (use_stmt, gimple_assign_lhs (stmt))) return; for this very reason.