aboutsummaryrefslogtreecommitdiff
path: root/contrib/gcc/reload.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/reload.c')
-rw-r--r--contrib/gcc/reload.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/contrib/gcc/reload.c b/contrib/gcc/reload.c
index 08a393f5f23a..262e80e71b27 100644
--- a/contrib/gcc/reload.c
+++ b/contrib/gcc/reload.c
@@ -1180,7 +1180,7 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
/* If IN appears in OUT, we can't share any input-only reload for IN. */
if (in != 0 && out != 0 && MEM_P (out)
- && (REG_P (in) || MEM_P (in))
+ && (REG_P (in) || MEM_P (in) || GET_CODE (in) == PLUS)
&& reg_overlap_mentioned_for_reload_p (in, XEXP (out, 0)))
dont_share = 1;
@@ -6540,7 +6540,8 @@ reg_overlap_mentioned_for_reload_p (rtx x, rtx in)
if (REG_P (in))
return 0;
else if (GET_CODE (in) == PLUS)
- return (reg_overlap_mentioned_for_reload_p (x, XEXP (in, 0))
+ return (rtx_equal_p (x, in)
+ || reg_overlap_mentioned_for_reload_p (x, XEXP (in, 0))
|| reg_overlap_mentioned_for_reload_p (x, XEXP (in, 1)));
else return (reg_overlap_mentioned_for_reload_p (XEXP (x, 0), in)
|| reg_overlap_mentioned_for_reload_p (XEXP (x, 1), in));