From 341f08a37692e99ef0732b0295333093a9fc7fd1 Mon Sep 17 00:00:00 2001 From: Kenneth Zadeck Date: Wed, 10 Oct 2007 03:32:43 +0000 Subject: re PR rtl-optimization/33669 (Revision 128957 miscompiles 481.wrf) 2007-10-07 Kenneth Zadeck 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 --- gcc/ChangeLog | 7 +++++++ gcc/ra-conflict.c | 19 ++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cb9b878..548053e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-10-07 Kenneth Zadeck + + 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. + 2007-10-09 Geoffrey Keating * dwarf2out.c (output_call_frame_info): FDEs are always emitted 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); -- cgit v1.1