From patchwork Thu Jan 5 18:51:27 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [BFIN] Hookize PREFERRED_RELOAD_CLASS Date: Thu, 05 Jan 2012 08:51:27 -0000 From: Anatoly Sokolov X-Patchwork-Id: 134533 Message-Id: <4F05F12F.6000007@post.ru> To: gcc-patches Cc: bernds@codesourcery.com, jie@codesourcery.com Hi. This patch removes obsolete PREFERRED_RELOAD_CLASS macro from the BFIN back end in the GCC and introduces equivalent TARGET_PREFERRED_RELOAD_CLASS target hook. Compiled. Untested. OK to install? * config/bfin/bfin.h (PREFERRED_RELOAD_CLASS): Remove. * config/bfin/bfin.c (TARGET_PREFERRED_RELOAD_CLASS): Define. (bfin_preferred_reload_class): New function. Index: gcc/config/bfin/bfin.c =================================================================== --- gcc/config/bfin/bfin.c (revision 182912) +++ gcc/config/bfin/bfin.c (working copy) @@ -2648,6 +2648,19 @@ split_load_immediate (rtx operands[]) return 0; } +/* Worker function for TARGET_PREFERRED_RELOAD_CLASS. */ + +static reg_class_t +bfin_preferred_reload_class (rtx x, reg_class_t rclass) +{ + if (GET_CODE (x) == POST_INC + || GET_CODE (x) == POST_DEC + || GET_CODE (x) == PRE_DEC) + return PREGS; + + return rclass; +} + /* Return true if the legitimate memory address for a memory operand of mode MODE. Return false if not. */ @@ -5771,6 +5784,9 @@ bfin_conditional_register_usage (void) #undef TARGET_RETURN_IN_MEMORY #define TARGET_RETURN_IN_MEMORY bfin_return_in_memory +#undef TARGET_PREFERRED_RELOAD_CLASS +#define TARGET_PREFERRED_RELOAD_CLASS bfin_preferred_reload_class + #undef TARGET_LEGITIMATE_ADDRESS_P #define TARGET_LEGITIMATE_ADDRESS_P bfin_legitimate_address_p Index: gcc/config/bfin/bfin.h =================================================================== --- gcc/config/bfin/bfin.h (revision 182912) +++ gcc/config/bfin/bfin.h (working copy) @@ -707,16 +707,6 @@ enum reg_class && GET_MODE_SIZE (MODE1) <= UNITS_PER_WORD \ && GET_MODE_SIZE (MODE2) <= UNITS_PER_WORD)) -/* `PREFERRED_RELOAD_CLASS (X, CLASS)' - A C expression that places additional restrictions on the register - class to use when it is necessary to copy value X into a register - in class CLASS. The value is a register class; perhaps CLASS, or - perhaps another, smaller class. */ -#define PREFERRED_RELOAD_CLASS(X, CLASS) \ - (GET_CODE (X) == POST_INC \ - || GET_CODE (X) == POST_DEC \ - || GET_CODE (X) == PRE_DEC ? PREGS : (CLASS)) - /* Function Calling Conventions. */ /* The type of the current function; normal functions are of type