aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2008-07-19 11:14:13 +0000
committerJoseph Myers <joseph@codesourcery.com>2008-07-19 11:14:13 +0000
commit475f9b087b4cac291749ee2875537852c69e9f0f (patch)
tree3ea13d8ae72f15d919974c9c7f445f4112ff2f24
parent49966de99150bd4ed9c06bcbe2fb6f52fd5d180b (diff)
PR target/36780
PR target/36827 * reload.c (find_reloads_subreg_address): Only reload address if reloaded == 0, not for reloaded != 1. Revert: 2008-07-16 Joseph Myers <joseph@codesourcery.com> * config/m32c/m32c.c (BIG_FB_ADJ): Move definition earlier. (m32c_legitimate_address_p): Handle "++rii" addresses created by m32c_legitimize_reload_address. 2008-07-15 Kaz Kojima <kkojima@gcc.gnu.org> * config/sh/sh.h (GO_IF_LEGITIMATE_ADDRESS): Allow (plus (plus (reg) (const_int)) (const_int)) when reload_in_progress. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@137976 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog17
-rw-r--r--gcc/config/m32c/m32c.c15
-rw-r--r--gcc/config/sh/sh.h13
-rw-r--r--gcc/reload.c2
4 files changed, 20 insertions, 27 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d552bab2b82..4464f1190e7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,20 @@
+2008-07-19 Joseph Myers <joseph@codesourcery.com>
+
+ PR target/36780
+ PR target/36827
+ * reload.c (find_reloads_subreg_address): Only reload address if
+ reloaded == 0, not for reloaded != 1.
+
+ Revert:
+ 2008-07-16 Joseph Myers <joseph@codesourcery.com>
+ * config/m32c/m32c.c (BIG_FB_ADJ): Move definition earlier.
+ (m32c_legitimate_address_p): Handle "++rii" addresses created by
+ m32c_legitimize_reload_address.
+
+ 2008-07-15 Kaz Kojima <kkojima@gcc.gnu.org>
+ * config/sh/sh.h (GO_IF_LEGITIMATE_ADDRESS): Allow
+ (plus (plus (reg) (const_int)) (const_int)) when reload_in_progress.
+
2008-07-19 Olivier Hainque <hainque@adacore.com>
* dwarf2out.c (add_subscript_info): New explicit COLLAPSE_P
diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c
index ef6ba16b5a9..b0733dd8364 100644
--- a/gcc/config/m32c/m32c.c
+++ b/gcc/config/m32c/m32c.c
@@ -1778,8 +1778,6 @@ m32c_init_libfuncs (void)
/* Addressing Modes */
-#define BIG_FB_ADJ 0
-
/* Used by GO_IF_LEGITIMATE_ADDRESS. The r8c/m32c family supports a
wide range of non-orthogonal addressing modes, including the
ability to double-indirect on *some* of them. Not all insns
@@ -1897,17 +1895,6 @@ m32c_legitimate_address_p (enum machine_mode mode, rtx x, int strict)
return 0;
}
}
- if (RTX_IS ("++rii"))
- {
- rtx reg = patternr[2];
- HOST_WIDE_INT offs = INTVAL (patternr[3]);
-
- /* Avoid reloads for addresses generated by
- m32c_legitimize_reload_address being generated by
- find_reloads_subreg_address. */
- if (REGNO (reg) == FB_REGNO && offs == -BIG_FB_ADJ)
- return 1;
- }
return 0;
}
@@ -1955,6 +1942,8 @@ m32c_reg_ok_for_base_p (rtx x, int strict)
frame, so the third case seems best. Note that we subtract the
zero, but detect that in the addhi3 pattern. */
+#define BIG_FB_ADJ 0
+
/* Implements LEGITIMIZE_ADDRESS. The only address we really have to
worry about is frame base offsets, as $fb has a limited
displacement range. We deal with this by attempting to reload $fb
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index f8b798d327c..5204847abc5 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -2501,19 +2501,6 @@ struct sh_args {
goto LABEL; \
} \
} \
- /* FIXME: This is a temporary hack which should be removed. \
- When reload in progress, find_reloads_subreg_address tries to \
- make a new reload for some types of address. Unfortunately it \
- generates wrong code on SH. See PR36780. The following is to \
- avoid this issue. */ \
- if (!TARGET_SHMEDIA && reload_in_progress \
- && GET_CODE (X) == PLUS \
- && (GET_MODE_SIZE (MODE) == 4 || GET_MODE_SIZE (MODE) == 8) \
- && GET_CODE (XEXP ((X), 0)) == PLUS \
- && GET_CODE (XEXP (XEXP ((X), 0), 1)) == CONST_INT \
- && BASE_REGISTER_RTX_P (XEXP (XEXP ((X), 0), 0)) \
- && GET_CODE (XEXP ((X), 1)) == CONST_INT) \
- goto LABEL; \
}
/* Try machine-dependent ways of modifying an illegitimate address
diff --git a/gcc/reload.c b/gcc/reload.c
index a391c457191..a6ea4ff4e5a 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -6103,7 +6103,7 @@ find_reloads_subreg_address (rtx x, int force_replace, int opnum,
doesn't find any, then we may have just converted a
valid address into an invalid one. Check for that
here. */
- if (reloaded != 1
+ if (reloaded == 0
&& !strict_memory_address_p (GET_MODE (tem),
XEXP (tem, 0)))
push_reload (XEXP (tem, 0), NULL_RTX, &XEXP (tem, 0), (rtx*) 0,