[PR69634] fix debug_insn-inconsistent REG_N_CALLS_CROSSED

Jeff Law law@redhat.com
Tue Feb 9 18:29:00 GMT 2016


On 02/06/2016 03:06 AM, 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?
>
>
> 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.
I removed the explicit -m32.  It was there merely to try and exercise 
the test, even on an x86-64 configured toolchain.  As Uros noted, a 
standard multilib of x86-64 will test -m32, so the explicit -m32 isn't 
needed and it is in fact harmful.

Committed to the trunk with that change.  I'm going to add 4.9/5 
regression markers to the BZ since this affects those releases as well.

Jeff



More information about the Gcc-patches mailing list