+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>
PR c++/26757
so modified, or null if none. */
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;
\f
/* Vector mapping INSN_UIDs to cuids.
The cuids are like uids but increase monotonically always.
rtx orig = SET_SRC (set);
SET_SRC (set) = note;
replaced_rhs_insn = temp;
+ replaced_rhs_value = copy_rtx (note);
next = try_combine (insn, temp, NULL_RTX,
&new_direct_jump_p);
replaced_rhs_insn = NULL;
In both cases, we must search to see if we can find a previous
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;
else
{