diff options
author | Anatoly Sokolov <aesok@post.ru> | 2010-12-21 11:05:57 +0300 |
---|---|---|
committer | Anatoly Sokolov <aesok@gcc.gnu.org> | 2010-12-21 11:05:57 +0300 |
commit | 486b10aa89499699906fecc6630fbdc7b26996b2 (patch) | |
tree | b82c8d7ae00e3099afdc6e82d16bc8f52c680928 | |
parent | 5ae2ca96ad36d168af9e4dcb23d76fa5be1662fe (diff) | |
download | gcc-486b10aa89499699906fecc6630fbdc7b26996b2.zip gcc-486b10aa89499699906fecc6630fbdc7b26996b2.tar.gz gcc-486b10aa89499699906fecc6630fbdc7b26996b2.tar.bz2 |
sh.h (PREFERRED_RELOAD_CLASS): Remove.
* config/sh/sh.h (PREFERRED_RELOAD_CLASS): Remove.
* config/sh/sh-protos.h (secondary_reload_info, sh_secondary_reload):
Remove forward declaration.
* config/sh/sh.c (sh_preferred_reload_class): New function.
(sh_secondary_reload): Make static.
(TARGET_PREFERRED_RELOAD_CLASS): Define.
From-SVN: r168104
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/sh/sh-protos.h | 4 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 26 | ||||
-rw-r--r-- | gcc/config/sh/sh.h | 13 |
4 files changed, 34 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c12643f..b70ef95 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-12-21 Anatoly Sokolov <aesok@post.ru> + + * config/sh/sh.h (PREFERRED_RELOAD_CLASS): Remove. + * config/sh/sh-protos.h (secondary_reload_info, sh_secondary_reload): + Remove forward declaration. + * config/sh/sh.c (sh_preferred_reload_class): New function. + (sh_secondary_reload): Make static. + (TARGET_PREFERRED_RELOAD_CLASS): Define. + 2010-12-20 Joseph Myers <joseph@codesourcery.com> * config/alpha/linux.h (OPTION_GLIBC): Define differently if diff --git a/gcc/config/sh/sh-protos.h b/gcc/config/sh/sh-protos.h index 5a2fd2e..d29147c 100644 --- a/gcc/config/sh/sh-protos.h +++ b/gcc/config/sh/sh-protos.h @@ -165,10 +165,6 @@ extern int shmedia_cleanup_truncate (rtx *, void *); extern int sh_contains_memref_p (rtx); extern int sh_loads_bankedreg_p (rtx); extern rtx shmedia_prepare_call_address (rtx fnaddr, int is_sibcall); -struct secondary_reload_info; -extern reg_class_t sh_secondary_reload (bool, rtx, reg_class_t, - enum machine_mode, - struct secondary_reload_info *); extern int sh2a_get_function_vector_number (rtx); extern int sh2a_is_function_vector_call (rtx); extern void sh_fix_range (const char *); diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 2fdf03a..67c7c44 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -253,6 +253,10 @@ static bool sh_rtx_costs (rtx, int, int, int *, bool); static int sh_address_cost (rtx, bool); static int sh_pr_n_sets (void); static rtx sh_allocate_initial_value (rtx); +static reg_class_t sh_preferred_reload_class (rtx, reg_class_t); +static reg_class_t sh_secondary_reload (bool, rtx, reg_class_t, + enum machine_mode, + struct secondary_reload_info *); static bool sh_legitimate_address_p (enum machine_mode, rtx, bool); static rtx sh_legitimize_address (rtx, rtx, enum machine_mode); static rtx sh_delegitimize_address (rtx); @@ -591,6 +595,9 @@ static const struct default_options sh_option_optimization_table[] = #undef TARGET_SECONDARY_RELOAD #define TARGET_SECONDARY_RELOAD sh_secondary_reload +#undef TARGET_PREFERRED_RELOAD_CLASS +#define TARGET_PREFERRED_RELOAD_CLASS sh_preferred_reload_class + #undef TARGET_CONDITIONAL_REGISTER_USAGE #define TARGET_CONDITIONAL_REGISTER_USAGE sh_conditional_register_usage @@ -12426,7 +12433,24 @@ shmedia_prepare_call_address (rtx fnaddr, int is_sibcall) return fnaddr; } -reg_class_t +/* Implement TARGET_PREFERRED_RELOAD_CLASS. */ + +static reg_class_t +sh_preferred_reload_class (rtx x, reg_class_t rclass) +{ + if (rclass == NO_REGS + && TARGET_SHMEDIA + && (CONST_DOUBLE_P (x) + || GET_CODE (x) == SYMBOL_REF + || PIC_ADDR_P (x))) + return GENERAL_REGS; + + return rclass; +} + +/* Implement TARGET_SECONDARY_RELOAD. */ + +static reg_class_t sh_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i, enum machine_mode mode, secondary_reload_info *sri) { diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index c07ff08..861b665 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -1213,19 +1213,6 @@ extern enum reg_class regno_reg_class[FIRST_PSEUDO_REGISTER]; #define CONST_OK_FOR_K08(VALUE) (((HOST_WIDE_INT)(VALUE))>= 0 \ && ((HOST_WIDE_INT)(VALUE)) <= 255) -/* Given an rtx X being reloaded into a reg required to be - in class CLASS, return the class of reg to actually use. - In general this is just CLASS; but on some machines - in some cases it is preferable to use a more restrictive class. */ - -#define PREFERRED_RELOAD_CLASS(X, CLASS) \ - ((CLASS) == NO_REGS && TARGET_SHMEDIA \ - && (GET_CODE (X) == CONST_DOUBLE \ - || GET_CODE (X) == SYMBOL_REF \ - || PIC_ADDR_P (X)) \ - ? GENERAL_REGS \ - : (CLASS)) \ - #if 0 #define SECONDARY_INOUT_RELOAD_CLASS(CLASS,MODE,X,ELSE) \ ((((REGCLASS_HAS_FP_REG (CLASS) \ |