This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Fix PR 56077
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Andrey Belevantsev <abel at ispras dot ru>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Leonid Lisovskiy <lly dot dev at gmail dot com>, Vladimir Makarov <vmakarov at redhat dot com>, Alexandre Oliva <aoliva at redhat dot com>
- Date: Fri, 5 Apr 2013 09:16:26 +0200
- Subject: Re: Fix PR 56077
- References: <512772F5 dot 3040007 at ispras dot ru> <51594783 dot 2050600 at ispras dot ru> <515E7538 dot 4070408 at ispras dot ru>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Fri, Apr 05, 2013 at 10:54:48AM +0400, Andrey Belevantsev wrote:
> I am testing the revert of this backport for 4.6 and will commit it
> in about an hour or so. However, I am surprised we don't hit this
Ok, thanks.
> either on 4.7, 4.8 or trunk. Some flush_pending_lists calls are
> protected from debug insns as they check CALL_P or JUMP_P, but not
> all of them. It looks like flush_pending_lists should not be called
> on debug insns at all. And indeed, the attached patch fixes
> Leonid's test case.
>
> Jakub, you don't happen to remember any changes in this area that
> could hide the problem for 4.7 and later?
No, but Alex or Vlad could know better. In any case, perhaps it could be
bisected (I only have x86_64 compilers around for bisecting seed though,
I'm afraid the testcase is mips only and hasn't been even posted).
> *** gcc/sched-deps.c (revision 197492)
> --- gcc/sched-deps.c (working copy)
> *************** sched_analyze_insn (struct deps_desc *de
> *** 3044,3050 ****
>
> /* Don't flush pending lists on speculative checks for
> selective scheduling. */
> ! if (!sel_sched_p () || !sel_insn_is_speculation_check (insn))
> flush_pending_lists (deps, insn, true, true);
>
> if (!deps->readonly)
> --- 3044,3050 ----
>
> /* Don't flush pending lists on speculative checks for
> selective scheduling. */
> ! if (NONDEBUG_INSN_P (insn) && (!sel_sched_p () || !sel_insn_is_speculation_check (insn)))
Too long line. Start && below NONDEBUG.
> flush_pending_lists (deps, insn, true, true);
>
> if (!deps->readonly)
Jakub