diff options
author | Kenneth Zadeck <zadeck@naturalbridge.com> | 2007-10-10 03:32:43 +0000 |
---|---|---|
committer | Kenneth Zadeck <zadeck@gcc.gnu.org> | 2007-10-10 03:32:43 +0000 |
commit | 341f08a37692e99ef0732b0295333093a9fc7fd1 (patch) | |
tree | c81f34fbe275d4e8c68d7eae5d0b05c87d9dd4d7 /gcc/ra-conflict.c | |
parent | 69ccae8140cdd00ad1780ec300757acc4d91fc7e (diff) | |
download | gcc-341f08a37692e99ef0732b0295333093a9fc7fd1.zip gcc-341f08a37692e99ef0732b0295333093a9fc7fd1.tar.gz gcc-341f08a37692e99ef0732b0295333093a9fc7fd1.tar.bz2 |
re PR rtl-optimization/33669 (Revision 128957 miscompiles 481.wrf)
2007-10-07 Kenneth Zadeck <zadeck@naturalbridge.com>
PR middle-end/33669
* ra-conflict.c (record_one_conflict_between_regnos,
set_conflicts_for_earlyclobber, global_conflicts): Improved logging.
(global_conflicts): Enhanced incorrect check.
From-SVN: r129193
Diffstat (limited to 'gcc/ra-conflict.c')
-rw-r--r-- | gcc/ra-conflict.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/gcc/ra-conflict.c b/gcc/ra-conflict.c index 27a9fcc..8f35afd 100644 --- a/gcc/ra-conflict.c +++ b/gcc/ra-conflict.c @@ -196,7 +196,7 @@ record_one_conflict_between_regnos (enum machine_mode mode1, int r1, int allocno2 = reg_allocno[r2]; if (dump_file) - fprintf (dump_file, " rocbr adding %d<=>%d\n", r1, r2); + fprintf (dump_file, " rocbr adding %d<=>%d\n", r1, r2); if (allocno1 >= 0 && allocno2 >= 0) set_conflict (allocno1, allocno2); @@ -401,9 +401,6 @@ set_conflicts_for_earlyclobber (rtx insn) recog_data.operand[use + 1]); } } - - if (dump_file) - fprintf (dump_file, " finished early clobber conflicts.\n"); } @@ -983,12 +980,12 @@ global_conflicts (void) set_renumbers_live (&renumbers_live, live_subregs, live_subregs_used, allocnum, renumber); } - - else if (!sparseset_bit_p (allocnos_live, allocnum)) + else if (live_subregs_used[allocnum] > 0 + || !sparseset_bit_p (allocnos_live, allocnum)) { if (dump_file) - fprintf (dump_file, " dying pseudo\n"); - + fprintf (dump_file, " %sdying pseudo\n", + (live_subregs_used[allocnum] > 0) ? "partially ": ""); /* Resetting the live_subregs_used is effectively saying do not use the subregs because we are reading the whole pseudo. */ @@ -1071,6 +1068,8 @@ global_conflicts (void) FIXME: We should consider either adding a new kind of clobber, or adding a flag to the clobber distinguish these two cases. */ + if (dump_file && VEC_length (df_ref_t, clobbers)) + fprintf (dump_file, " clobber conflicts\n"); for (k = VEC_length (df_ref_t, clobbers) - 1; k >= 0; k--) { struct df_ref *def = VEC_index (df_ref_t, clobbers, k); @@ -1132,6 +1131,8 @@ global_conflicts (void) if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn)) { int j; + if (dump_file) + fprintf (dump_file, " multiple sets\n"); for (j = VEC_length (df_ref_t, dying_regs) - 1; j >= 0; j--) { int used_in_output = 0; @@ -1166,7 +1167,7 @@ global_conflicts (void) } } - /* Add the renumbers live to the hard_regs_live for the next few + /* Add the renumbers live to the hard_regs_live for the next few calls. All of this gets recomputed at the top of the loop so there is no harm. */ IOR_HARD_REG_SET (hard_regs_live, renumbers_live); |