Commit 341f08a3 by Kenneth Zadeck Committed by Kenneth Zadeck

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
parent 69ccae81
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.
2007-10-09 Geoffrey Keating <geoffk@apple.com> 2007-10-09 Geoffrey Keating <geoffk@apple.com>
* dwarf2out.c (output_call_frame_info): FDEs are always emitted * dwarf2out.c (output_call_frame_info): FDEs are always emitted
...@@ -196,7 +196,7 @@ record_one_conflict_between_regnos (enum machine_mode mode1, int r1, ...@@ -196,7 +196,7 @@ record_one_conflict_between_regnos (enum machine_mode mode1, int r1,
int allocno2 = reg_allocno[r2]; int allocno2 = reg_allocno[r2];
if (dump_file) 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) if (allocno1 >= 0 && allocno2 >= 0)
set_conflict (allocno1, allocno2); set_conflict (allocno1, allocno2);
...@@ -401,9 +401,6 @@ set_conflicts_for_earlyclobber (rtx insn) ...@@ -401,9 +401,6 @@ set_conflicts_for_earlyclobber (rtx insn)
recog_data.operand[use + 1]); recog_data.operand[use + 1]);
} }
} }
if (dump_file)
fprintf (dump_file, " finished early clobber conflicts.\n");
} }
...@@ -983,12 +980,12 @@ global_conflicts (void) ...@@ -983,12 +980,12 @@ global_conflicts (void)
set_renumbers_live (&renumbers_live, live_subregs, live_subregs_used, set_renumbers_live (&renumbers_live, live_subregs, live_subregs_used,
allocnum, renumber); allocnum, renumber);
} }
else if (live_subregs_used[allocnum] > 0
else if (!sparseset_bit_p (allocnos_live, allocnum)) || !sparseset_bit_p (allocnos_live, allocnum))
{ {
if (dump_file) 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 /* Resetting the live_subregs_used is
effectively saying do not use the subregs effectively saying do not use the subregs
because we are reading the whole pseudo. */ because we are reading the whole pseudo. */
...@@ -1071,6 +1068,8 @@ global_conflicts (void) ...@@ -1071,6 +1068,8 @@ global_conflicts (void)
FIXME: We should consider either adding a new kind of FIXME: We should consider either adding a new kind of
clobber, or adding a flag to the clobber distinguish clobber, or adding a flag to the clobber distinguish
these two cases. */ 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--) for (k = VEC_length (df_ref_t, clobbers) - 1; k >= 0; k--)
{ {
struct df_ref *def = VEC_index (df_ref_t, clobbers, k); struct df_ref *def = VEC_index (df_ref_t, clobbers, k);
...@@ -1132,6 +1131,8 @@ global_conflicts (void) ...@@ -1132,6 +1131,8 @@ global_conflicts (void)
if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn)) if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn))
{ {
int j; int j;
if (dump_file)
fprintf (dump_file, " multiple sets\n");
for (j = VEC_length (df_ref_t, dying_regs) - 1; j >= 0; j--) for (j = VEC_length (df_ref_t, dying_regs) - 1; j >= 0; j--)
{ {
int used_in_output = 0; int used_in_output = 0;
...@@ -1166,7 +1167,7 @@ global_conflicts (void) ...@@ -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 calls. All of this gets recomputed at the top of the loop so
there is no harm. */ there is no harm. */
IOR_HARD_REG_SET (hard_regs_live, renumbers_live); IOR_HARD_REG_SET (hard_regs_live, renumbers_live);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment