summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2006-05-23 15:07:00 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2006-05-23 15:07:00 +0000
commit98c26c78e0a6e9bdff5de9581458a5cc1e7a6a98 (patch)
treee5040e7b04299a22aa81437cd876a584dc2c2e3c /gcc/combine.c
parent987392e58f9c44cc58fce54de611f9a514c3f0dd (diff)
downloadgcc-98c26c78e0a6e9bdff5de9581458a5cc1e7a6a98.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114019 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 4d71b6d31b6..727e625ae2c 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -128,6 +128,11 @@ static int total_attempts, total_merges, total_extras, total_successes;
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;
/* Vector mapping INSN_UIDs to cuids.
The cuids are like uids but increase monotonically always.
@@ -928,6 +933,7 @@ combine_instructions (rtx f, unsigned int nregs)
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;
@@ -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
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
{