+2002-04-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/6279
+ * expr.c (store_expr): Don't copy if DECL_RTL (exp) == target.
+
+ * expr.c (safe_from_p): Cleanup: use DECL_RTL_IF_SET.
+
2002-04-15 Richard Henderson <rth@redhat.com>
* config/mips/abi64.h (SUBTARGET_CONDITIONAL_REGISTER_USAGE): Set
|| (temp != target && (side_effects_p (temp)
|| side_effects_p (target))))
&& TREE_CODE (exp) != ERROR_MARK
- && ! dont_store_target)
+ && ! dont_store_target
+ /* If store_expr stores a DECL whose DECL_RTL(exp) == TARGET,
+ but TARGET is not valid memory reference, TEMP will differ
+ from TARGET although it is really the same location. */
+ && (TREE_CODE_CLASS (TREE_CODE (exp)) != 'd'
+ || target != DECL_RTL_IF_SET (exp)))
{
target = protect_from_queue (target, 1);
if (GET_MODE (temp) != GET_MODE (target)
switch (TREE_CODE_CLASS (TREE_CODE (exp)))
{
case 'd':
- exp_rtl = DECL_RTL_SET_P (exp) ? DECL_RTL (exp) : NULL_RTX;
+ exp_rtl = DECL_RTL_IF_SET (exp);
break;
case 'c':