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.

Reply via email to