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.
Code is fine.  Testcase needs tweaking per Uros's comments in the BZ:

  Please don't use explicit -m32. If the test is valid only for 32bit
  target, you should use "target ia32", otherwise just leave it out.
  32bit multilib tests will add -m32 automatically.

  Explicit -m32 will probably fail with x32, which is x86_64 target,
  too.

With the test fixed this is fine.

jeff

Reply via email to