https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88906
--- Comment #3 from Uroš Bizjak <ubizjak at gmail dot com> --- Before dse1 pass, we have: 5: {r90:SI=frame:SI-0x20;clobber flags:CC;} REG_UNUSED flags:CC 6: r91:SI=0 7: r92:SI=0x4 8: {r92:SI=0;r90:SI=r92:SI<<0x2+r90:SI;[r90:SI]=0;use r91:SI;use r92:SI;} REG_DEAD r91:SI REG_UNUSED r92:SI REG_UNUSED r90:SI 9: [frame:SI-0x20]=0xffffffffffffffff 10: [frame:SI-0x20]=0 13: {r95:SI=frame:SI-0x10;clobber flags:CC;} REG_UNUSED flags:CC 14: {r96:SI=frame:SI-0x20;clobber flags:CC;} REG_UNUSED flags:CC 16: {sp:SI=sp:SI-0x4;clobber flags:CC;} REG_UNUSED flags:CC REG_ARGS_SIZE 0x4 17: [--sp:SI]=0x10 REG_ARGS_SIZE 0x8 18: [--sp:SI]=r96:SI REG_DEAD r96:SI REG_ARGS_SIZE 0xc 19: [--sp:SI]=r95:SI REG_DEAD r95:SI REG_ARGS_SIZE 0x10 20: ax:SI=call [`memcpy'] argc:0x10 REG_UNUSED ax:SI REG_EH_REGION 0 with (insn 8), (insn 9) and (insn 10) initializing area, beginning at frame-0x20. The next insns set up arguments of the call to memcpy, where frame-0x20 is referred as source. However, when memcpy is emitted, nothing marks its source region as used, so dse1 pass simply removes seemingly unused initializations, leaving: 5: {r90:SI=frame:SI-0x20;clobber flags:CC;} REG_UNUSED flags:CC 6: r91:SI=0 7: r92:SI=0x4 13: {r95:SI=frame:SI-0x10;clobber flags:CC;} REG_UNUSED flags:CC 14: {r96:SI=frame:SI-0x20;clobber flags:CC;} REG_UNUSED flags:CC 16: {sp:SI=sp:SI-0x4;clobber flags:CC;} REG_UNUSED flags:CC REG_ARGS_SIZE 0x4 17: [--sp:SI]=0x10 REG_ARGS_SIZE 0x8 18: [--sp:SI]=r96:SI REG_DEAD r96:SI REG_ARGS_SIZE 0xc 19: [--sp:SI]=r95:SI REG_DEAD r95:SI REG_ARGS_SIZE 0x10 20: ax:SI=call [`memcpy'] argc:0x10 REG_UNUSED ax:SI REG_EH_REGION 0