[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