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