diff options
author | Richard Sandiford <richard@codesourcery.com> | 2006-05-23 15:07:00 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2006-05-23 15:07:00 +0000 |
commit | e5d7a5205e0d8d6483fa3deee424267624c683bb (patch) | |
tree | e5040e7b04299a22aa81437cd876a584dc2c2e3c /gcc/combine.c | |
parent | f004ab022e2d651c3838e04a8c23243f71041964 (diff) | |
download | gcc-e5d7a5205e0d8d6483fa3deee424267624c683bb.tar.gz |
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
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 10 |
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 { |