On 2015-01-03, at 2:48 PM, H.J. Lu wrote: > On Sat, Jan 3, 2015 at 9:35 AM, John David Anglin > <d...@hiauly1.hia.nrc.ca> wrote: >> On Wed, 31 Dec 2014, H.J. Lu wrote: >> >>> - /* Arguments for a sibling call that are pushed to memory are passed >>> - using the incoming argument pointer of the current function. These >>> - may or may not be frame related depending on the target. Since >>> - argument pointer related stores are not currently tracked, we treat >>> - a sibling call as though it does a wild read. */ >>> - if (SIBLING_CALL_P (insn)) >>> + if (targetm.sibcall_wild_read_p (insn)) >>> { >>> add_wild_read (bb_info); >>> return; >> >> Instead of falling through to code designed to handle normal calls, it >> would be better to treat them separately. Potentially, there are other >> optimizations that may be applicable. If a sibcall doesn't read from >> the frame, add_non_frame_wild_read() can be called. This would restore >> the x86 optimization. >> > > That will a new optimization. I am trying to restore the old behavior on > x86 with minimum impact in stage 3.
Not really. In gcc.dg/pr44194-1.c, the sibcall was not a const function and this case was covered by this hunk of code: else /* Every other call, including pure functions, may read any memory that is not relative to the frame. */ add_non_frame_wild_read (bb_info); Dave -- John David Anglin dave.ang...@bell.net