http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49452
--- Comment #20 from Carrot <carrot at google dot com> 2011-09-14 03:02:03 UTC --- > Instruction 2 and 24 refer to the same location, but have different offset > relative to FP because the call to y changes FP. DSE doesn't (and can not, if > it is intra-procedural) know that they both refer to the same location and > hence thinks insn 2 is dead. > > It seems to me this (FP having different value after the call) can only happen > at postreload. It seems to me that setting wild_read (not just > non_frame_wild_read) on all calls after postreload will fix this problem. > What's the best way to do that? Will checking for clear_alias_sets != NULL > work? All callee saved registers should never changed after function call. Here fp has been changed is not because it is after a function call, it is because it is after the target of non local goto. I'm not familiar with the implementation of non local goto, but I guess there is some convention/protocol defines which registers may be changed after the target of a non local goto.