http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52684
--- Comment #8 from davem at gcc dot gnu.org 2012-05-02 07:23:56 UTC --- I can't see how the current DSE code can properly handle this case, and I'm surprised this doesn't trigger more often. The outgoing args are stored to offsets of FRAME_POINTER_REGNUM, even though this is before reload. This causes DSE to set ->frame_related However I can't see anything that takes into account that these locations in the frame are read by the CALL_INSN. There is some weird commentary in the description of the insn_info->frame_read field in dse.c which talks about how "the stores related to outgoing arguments are stack pointer based and thus deemed of non-constant base in this pass" but as explained above that is simply not true here.