On Sat, Feb 06, 2016 at 08:06:18AM -0200, Alexandre Oliva wrote:
> The testcase has a debug insn referencing a pseudo right before an
> insn that modifies the pseudo.
> 
> Without debug insns, REG_N_CALLS_CROSSED was zero for that pseudo, so
> sched_analyze_reg added a dep between the pseudo setter and an earlier
> (lib)call.
> 
> With debug insns, we miscomputed REG_N_CALLS_CROSSED as nonzero
> because of the debug insn, and then no dep was added between the two
> insns.  This was enough to change sched1's decisions about where to
> place the pseudo setter.
> 
> REG_N_CALLS_CROSSED is computed by both regstat_bb_compute_ri and
> regstat_bb_compute_calls_crossed, but although the former skipped
> debug insns, the latter didn't.
> 
> Fixing this inconsistency was enough to fix the -fcompare-debug error.
> 
> Regstrapped on x86_64-linux-gnu and i686-linux-gnu.  Ok to install?

Ok, with nit; thanks.

> for  gcc/ChangeLog
> 
>       PR target/69634
>       * regstat.c (regstat_bb_compute_calls_crossed): Disregard
>       debug insns.
> 
> for  gcc/testsuite/ChangeLog
> 
>       PR target/69634
>       * gcc.dg/pr69634.c: New.

> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr69634.c
> @@ -0,0 +1,22 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -fno-dce -fschedule-insns -fno-tree-vrp 
> -fcompare-debug" } */
> +/* { dg-additional-options "-Wno-psabi -mno-sse" { target i?86-*-* 
> x86_64-*-* } } */

> +/* { dg-additional-options "-m32" { target x86_64-*-* } } */

Please remove the above line, -m32 should come solely from the user, and enough
people either build i686-linux compilers or test with
RUNTESTFLAGS='--target_board=unix\{-m64,-m32\}' that a regression in here
would be noticed soon.

        Jakub

Reply via email to