aboutsummaryrefslogtreecommitdiff
path: root/gcc/ra-conflict.c
diff options
context:
space:
mode:
authorKenneth Zadeck <zadeck@naturalbridge.com>2007-10-10 03:32:43 +0000
committerKenneth Zadeck <zadeck@gcc.gnu.org>2007-10-10 03:32:43 +0000
commit341f08a37692e99ef0732b0295333093a9fc7fd1 (patch)
treec81f34fbe275d4e8c68d7eae5d0b05c87d9dd4d7 /gcc/ra-conflict.c
parent69ccae8140cdd00ad1780ec300757acc4d91fc7e (diff)
downloadgcc-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.c19
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);