This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Followup reload patch (PR 36827)
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 18 Jul 2008 20:11:45 +0000 (UTC)
- Subject: Followup reload patch (PR 36827)
This patch addresses the problems with my reload patch
<http://gcc.gnu.org/ml/gcc-patches/2008-07/msg00240.html> by disabling
the generation of address reloads from find_reloads_subreg_address
when find_reloads_address returns -1; that is, when
LEGITIMIZE_RELOAD_ADDRESS, as called by find_reloads_address, jumps to
the label win. The problem cases for both SH and m32c involved
LEGITIMIZE_RELOAD_ADDRESS creating addresses that do not appear valid,
but also creating the necessary reloads for them.
Bootstrapped with no regressions on i686-pc-linux-gnu (trunk), and
confirmed in PR 36827 to work for SH and m32c. OK to commit to trunk,
and to 4.3 branch subject to bootstrap with no regressions passing
there as well?
2008-07-18 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.
Index: reload.c
===================================================================
--- reload.c (revision 137944)
+++ reload.c (working copy)
@@ -6103,7 +6103,7 @@
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,
Index: config/m32c/m32c.c
===================================================================
--- config/m32c/m32c.c (revision 137944)
+++ config/m32c/m32c.c (working copy)
@@ -1778,8 +1778,6 @@
/* 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 @@
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 @@
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
Index: config/sh/sh.h
===================================================================
--- config/sh/sh.h (revision 137944)
+++ config/sh/sh.h (working copy)
@@ -2501,19 +2501,6 @@
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
--
Joseph S. Myers
joseph@codesourcery.com