diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-07-16 10:45:57 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-07-16 10:45:57 +0000 |
commit | 440e164f63d80757948a5671faa8223c7b956214 (patch) | |
tree | f842ac2d1b52fa476ef5bdf787923b58a01f8127 /gcc | |
parent | b3ab8d9cf483802a46f37644d8914680bf230b80 (diff) | |
download | ppe42-gcc-440e164f63d80757948a5671faa8223c7b956214.tar.gz ppe42-gcc-440e164f63d80757948a5671faa8223c7b956214.zip |
PR target/36827
* config/m32c/m32c.c (BIG_FB_ADJ): Move definition earlier.
(m32c_legitimate_address_p): Handle "++rii" addresses created by
m32c_legitimize_reload_address.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@137875 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/m32c/m32c.c | 15 |
2 files changed, 20 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6788fb08e0..15e82057f17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-07-16 Joseph Myers <joseph@codesourcery.com> + + PR target/36827 + * config/m32c/m32c.c (BIG_FB_ADJ): Move definition earlier. + (m32c_legitimate_address_p): Handle "++rii" addresses created by + m32c_legitimize_reload_address. + 2007-07-16 Rafael Avila de Espindola <espindola@google.com> * c-decl.c (merge_decls): Keep DECL_SOURCE_LOCATION and diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index b0733dd8364..ef6ba16b5a9 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -1778,6 +1778,8 @@ 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 @@ -1895,6 +1897,17 @@ 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; } @@ -1942,8 +1955,6 @@ 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 |