https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78408
--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Richard Biener from comment #10) > (In reply to Jakub Jelinek from comment #9) > > Note in the testcase a = (struct buf) {}, b = (struct buf) {} generates > > significantly more efficient code than a = b = (struct buf) {} - the former > > is 2x memset, the latter 1x memset + 1x memcpy. > > So, shall we for large aggregates gimplify those differently as an > > optimization? > > I believe the gimplifier is not a good place to do optimization. You can > pattern-match > > memset (&a, ..., N); > memcpy (&b, &a, N); > > and transform it to two times memset. Even the *.optimized dump contains: b = {}; a = b; d = {}; c = d; Can match.pd handle these, or would it need to be special folding code (where? gimple-fold.c, tree dse, what other passes have good framework for that)?