https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61810
--- Comment #13 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Richard Biener from comment #7) > FAIL: gcc.target/i386/pr98335.c scan-assembler movzbl > FAIL: gcc.target/i386/pr98335.c scan-assembler-not movb I think I understand these: we have: ``` struct Data { char a; int b; }; char c; Data val(int idx) { return { c }; } ``` We first do: ``` MEM <char[1]> [(union Data *)&D.2968 + 1B] = {}; D.2968.a = c_3(D); ``` But when expanding D.2968 is a register. If we had a late "SRA" like pass which handles things like this we could instead just set the full register to zero and not end up with this partial set which needs to combine with the zeroing from init-regs.