+2009-10-08 Alexandre Oliva <aoliva@redhat.com>
+
+ PR debug/41353
+ * regmove.c (regmove_backward_pass): Replace src with dst in the
+ debug insn, and check for dst before rather than after.
+
2009-10-08 Janis Johnson <janis187@us.ibm.com>
* config/rs6000/rs6000.c (rs6000_delegitimize_address): Remove.
break;
}
- /* We can't make this change if SRC is read or
+ /* We can't make this change if DST is mentioned at
+ all in P, since we are going to change its value.
+ We can't make this change if SRC is read or
partially written in P, since we are going to
- eliminate SRC. We can't make this change
- if DST is mentioned at all in P,
- since we are going to change its value. */
- if (reg_overlap_mentioned_p (src, PATTERN (p)))
+ eliminate SRC. However, if it's a debug insn, we
+ can't refrain from making the change, for this
+ would cause codegen differences, so instead we
+ invalidate debug expressions that reference DST,
+ and adjust references to SRC in them so that they
+ become references to DST. */
+ if (reg_mentioned_p (dst, PATTERN (p)))
{
if (DEBUG_INSN_P (p))
- validate_replace_rtx_group (dst, src, insn);
+ validate_change (p, &INSN_VAR_LOCATION_LOC (p),
+ gen_rtx_UNKNOWN_VAR_LOC (), 1);
else
break;
}
- if (reg_mentioned_p (dst, PATTERN (p)))
+ if (reg_overlap_mentioned_p (src, PATTERN (p)))
{
if (DEBUG_INSN_P (p))
- validate_change (p, &INSN_VAR_LOCATION_LOC (p),
- gen_rtx_UNKNOWN_VAR_LOC (), 1);
+ validate_replace_rtx_group (src, dst, p);
else
break;
}