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

Reply via email to