diff options
author | Kaz Kojima <kkojima@gcc.gnu.org> | 2014-12-19 04:47:18 +0000 |
---|---|---|
committer | Kaz Kojima <kkojima@gcc.gnu.org> | 2014-12-19 04:47:18 +0000 |
commit | 106a52b7bff18807dedbfc54e48db07d375e7eac (patch) | |
tree | e32b6978997b2ab87c56e6b930228d8776fc7237 | |
parent | 14133a4d8ab6d9ccd7e7e2e827f4451180a7e17a (diff) | |
download | gcc-106a52b7bff18807dedbfc54e48db07d375e7eac.zip gcc-106a52b7bff18807dedbfc54e48db07d375e7eac.tar.gz gcc-106a52b7bff18807dedbfc54e48db07d375e7eac.tar.bz2 |
* [SH] Add -mlra option.
From-SVN: r218888
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 14 | ||||
-rw-r--r-- | gcc/config/sh/sh.opt | 3 |
3 files changed, 24 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b22e5aa..fd92d52 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2014-12-19 Kaz Kojima <kkojima@gcc.gnu.org> + * config/sh/sh.c (sh_lra_p): New function. + (TARGET_LRA_P): Define. + (sh_legitimize_reload_address): Return false if sh_lra_p is true. + * config/sh/sh.opt (mlra): New option. + +2014-12-19 Kaz Kojima <kkojima@gcc.gnu.org> + * lra-constraints.c (process_address_1): Try if target can split displacement with targetm.legitimize_address_displacement. * target.def (legitimize_address_displacement): New hook. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 815f4d9..e586f48 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -222,6 +222,7 @@ static int sh_mode_after (int, int, rtx_insn *); static int sh_mode_entry (int); static int sh_mode_exit (int); static int sh_mode_priority (int entity, int n); +static bool sh_lra_p (void); static rtx mark_constant_pool_use (rtx); static tree sh_handle_interrupt_handler_attribute (tree *, tree, tree, @@ -620,6 +621,9 @@ static const struct attribute_spec sh_attribute_table[] = #undef TARGET_ENCODE_SECTION_INFO #define TARGET_ENCODE_SECTION_INFO sh_encode_section_info +#undef TARGET_LRA_P +#define TARGET_LRA_P sh_lra_p + #undef TARGET_SECONDARY_RELOAD #define TARGET_SECONDARY_RELOAD sh_secondary_reload @@ -10484,6 +10488,9 @@ sh_legitimize_reload_address (rtx *p, machine_mode mode, int opnum, enum reload_type type = (enum reload_type) itype; const int mode_sz = GET_MODE_SIZE (mode); + if (sh_lra_p ()) + return false; + if (! ALLOW_INDEXED_ADDRESS && GET_CODE (*p) == PLUS && REG_P (XEXP (*p, 0)) && REG_P (XEXP (*p, 1))) @@ -13774,6 +13781,13 @@ sh_mode_priority (int entity ATTRIBUTE_UNUSED, int n) return ((TARGET_FPU_SINGLE != 0) ^ (n) ? FP_MODE_SINGLE : FP_MODE_DOUBLE); } +/* Return true if we use LRA instead of reload pass. */ +static bool +sh_lra_p (void) +{ + return sh_lra_flag; +} + /* Implement TARGET_USE_BY_PIECES_INFRASTRUCTURE_P. */ static bool diff --git a/gcc/config/sh/sh.opt b/gcc/config/sh/sh.opt index bb6d395..375bb88 100644 --- a/gcc/config/sh/sh.opt +++ b/gcc/config/sh/sh.opt @@ -360,3 +360,6 @@ mfsrra Target Var(TARGET_FSRRA) Enable the use of the fsrra instruction +mlra +Target Report Var(sh_lra_flag) Init(0) Save +Use LRA instead of reload (transitional) |