This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PATCH: [5 Regression] r219037 caused FAIL: gcc.dg/pr44194-1.c
- From: Jakub Jelinek <jakub at redhat dot com>
- To: John David Anglin <dave dot anglin at bell dot net>
- Cc: Jeff Law <law at redhat dot com>, Richard Biener <richard dot guenther at gmail dot com>, "H.J. Lu" <hjl dot tools at gmail dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 5 Jan 2015 22:31:17 +0100
- Subject: Re: PATCH: [5 Regression] r219037 caused FAIL: gcc.dg/pr44194-1.c
- Authentication-results: sourceware.org; auth=none
- References: <CAMe9rOq-rrmXKUGExxGMb-AWYcVe94e4oL=egYPpnAt+LAOnOA at mail dot gmail dot com> <BLU436-SMTP2162BA4BC148FE8B140D186975A0 at phx dot gbl> <CAMe9rOrHBxjFpZtkyQa+tn5=GV3KQY_sdCd+YNhq5uXcu-x73g at mail dot gmail dot com> <1DEC62AA-F782-423D-B110-FC1E48CC97E8 at gmail dot com> <CAMe9rOq5hPS=e6FZug4SbPvjch=KKzP9woUoETYNY8WfJWgxUg at mail dot gmail dot com> <BAB09BDF-695F-4653-A3A1-4B406E38D48A at gmail dot com> <54AA9D75 dot 7050400 at redhat dot com> <20150105185103 dot GW1667 at tucnak dot redhat dot com> <BLU436-SMTP16492009098D2670451691E97580 at phx dot gbl> <20150105212357 dot GY1667 at tucnak dot redhat dot com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Mon, Jan 05, 2015 at 10:23:57PM +0100, Jakub Jelinek wrote:
> On Mon, Jan 05, 2015 at 03:16:46PM -0500, John David Anglin wrote:
> > I think there may be one situation after reload that's not handled
> > by the above. frame_read is only used for const calls. What about
> > the situation where we have a non const sibcall and the frame pointer
> > isn't eliminated?
>
> After reload DSE is run after threading prologues/epilogues, end
> the prologue/epilogue sequences usually contain wild reads, e.g.
> (mem:BLK (scratch)) in some insn etc.
> Do you have some particular testcase in mind?
>
> That said, DSE after reload is much more limited than the DSE before reload,
> so is less important, so perhaps even
> if ((HARD_FRAME_POINTER_IS_ARG_POINTER || reload_completed)
> && SIBLING_CALL_P (insn))
> {
> add_wild_read (bb_info);
> return;
> }
> might be good enough.
Or you could e.g. do the
if (HARD_FRAME_POINTER_IS_ARG_POINTER
&& !reload_completed
&& SIBLING_CALL_P (insn))
{ add_wild_read (bb_info); return; }
case first, then compute const_call and memset_call,
if (const_call || memset_call)
{ current_big_block }
else if (reload_completed && SIBLING_CALL_P (insn))
add_wild_read (bb_info);
else
add_non_frame_wild_read (bb_info);
That way, you would not punish const/memset calls unnecessarily after reload
when they are sibling calls.
Jakub