Commit e5d7a520 by Richard Sandiford Committed by Richard Sandiford

re PR middle-end/27736 (unwind-dw2-fde.c:833: fatal error: internal consistency failure)

	PR rtl-optimization/27736
	* combine.c (replaced_rhs_value): New variable.
	(combine_instructions): Set it.
	(distribute_notes): When distributing a note in replaced_rhs_insn,
	check whether the value was used in replaced_rhs_value.

From-SVN: r114019
parent f004ab02
2006-05-23 Richard Sandiford <richard@codesourcery.com>
PR rtl-optimization/27736
* combine.c (replaced_rhs_value): New variable.
(combine_instructions): Set it.
(distribute_notes): When distributing a note in replaced_rhs_insn,
check whether the value was used in replaced_rhs_value.
2006-05-23 Andrew MacLeod <amacleod@redhat.com> 2006-05-23 Andrew MacLeod <amacleod@redhat.com>
PR c++/26757 PR c++/26757
......
...@@ -129,6 +129,11 @@ static int total_attempts, total_merges, total_extras, total_successes; ...@@ -129,6 +129,11 @@ static int total_attempts, total_merges, total_extras, total_successes;
static rtx replaced_rhs_insn; static rtx replaced_rhs_insn;
/* When REPLACED_RHS_INSN is nonnull, this is a copy of the new right
hand side. */
static rtx replaced_rhs_value;
/* Vector mapping INSN_UIDs to cuids. /* Vector mapping INSN_UIDs to cuids.
The cuids are like uids but increase monotonically always. The cuids are like uids but increase monotonically always.
Combine always uses cuids so that it can compare them. Combine always uses cuids so that it can compare them.
...@@ -928,6 +933,7 @@ combine_instructions (rtx f, unsigned int nregs) ...@@ -928,6 +933,7 @@ combine_instructions (rtx f, unsigned int nregs)
rtx orig = SET_SRC (set); rtx orig = SET_SRC (set);
SET_SRC (set) = note; SET_SRC (set) = note;
replaced_rhs_insn = temp; replaced_rhs_insn = temp;
replaced_rhs_value = copy_rtx (note);
next = try_combine (insn, temp, NULL_RTX, next = try_combine (insn, temp, NULL_RTX,
&new_direct_jump_p); &new_direct_jump_p);
replaced_rhs_insn = NULL; replaced_rhs_insn = NULL;
...@@ -12122,7 +12128,9 @@ distribute_notes (rtx notes, rtx from_insn, rtx i3, rtx i2, rtx elim_i2, ...@@ -12122,7 +12128,9 @@ distribute_notes (rtx notes, rtx from_insn, rtx i3, rtx i2, rtx elim_i2,
In both cases, we must search to see if we can find a previous In both cases, we must search to see if we can find a previous
use of A and put the death note there. */ use of A and put the death note there. */
if (from_insn && from_insn == replaced_rhs_insn) if (from_insn
&& from_insn == replaced_rhs_insn
&& !reg_overlap_mentioned_p (XEXP (note, 0), replaced_rhs_value))
tem = from_insn; tem = from_insn;
else else
{ {
......
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