From a10ce561035bc1e1ca234dcb233f6bcdb32bfbc0 Mon Sep 17 00:00:00 2001 From: James Greenhalgh Date: Sat, 1 Nov 2014 10:14:08 +0000 Subject: [PATCH] [Patch 5/7 mips] Deprecate *_BY_PIECES_P, move to hookized version gcc/ * config/mips/mips.h (MOVE_BY_PIECES_P): Remove. (STORE_BY_PIECES_P): Likewise. * config/mips/mips.c (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): New. (mips_move_by_pieces_p): Rename to... (mips_use_by_pieces_infrastructure_p): ...this, use new hook parameters, use the default hook implementation as a fall-back. From-SVN: r217002 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/mips/mips.c | 24 ++++++++++++++++-------- gcc/config/mips/mips.h | 6 ------ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f193459a08c..7e9ae04ab20 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2014-11-01 James Greenhalgh + + * config/mips/mips.h (MOVE_BY_PIECES_P): Remove. + (STORE_BY_PIECES_P): Likewise. + * config/mips/mips.c (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): New. + (mips_move_by_pieces_p): Rename to... + (mips_use_by_pieces_infrastructure_p): ...this, use new hook + parameters, use the default hook implementation as a + fall-back. + 2014-11-01 James Greenhalgh * config/sh/sh.c (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): New. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 3d9db9246c9..ac7746c372e 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -7172,12 +7172,17 @@ mips_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED) return true; } -/* Implement MOVE_BY_PIECES_P. */ +/* Implement TARGET_USE_MOVE_BY_PIECES_INFRASTRUCTURE_P. */ bool -mips_move_by_pieces_p (unsigned HOST_WIDE_INT size, unsigned int align) +mips_use_by_pieces_infrastructure_p (unsigned int size, + unsigned int align, + enum by_pieces_operation op, + bool speed_p) { - if (HAVE_movmemsi) + if (op == STORE_BY_PIECES) + return mips_store_by_pieces_p (size, align); + if (op == MOVE_BY_PIECES && HAVE_movmemsi) { /* movmemsi is meant to generate code that is at least as good as move_by_pieces. However, movmemsi effectively uses a by-pieces @@ -7194,13 +7199,12 @@ mips_move_by_pieces_p (unsigned HOST_WIDE_INT size, unsigned int align) return size < UNITS_PER_WORD; return size <= MIPS_MAX_MOVE_BYTES_STRAIGHT; } - /* The default value. If this becomes a target hook, we should - call the default definition instead. */ - return (move_by_pieces_ninsns (size, align, MOVE_MAX_PIECES + 1) - < (unsigned int) MOVE_RATIO (optimize_insn_for_speed_p ())); + + return default_use_by_pieces_infrastructure_p (size, align, op, speed_p); } -/* Implement STORE_BY_PIECES_P. */ +/* Implement a handler for STORE_BY_PIECES operations + for TARGET_USE_MOVE_BY_PIECES_INFRASTRUCTURE_P. */ bool mips_store_by_pieces_p (unsigned HOST_WIDE_INT size, unsigned int align) @@ -19119,6 +19123,10 @@ mips_lra_p (void) #undef TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS #define TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS true +#undef TARGET_USE_BY_PIECES_INFRASTRUCTURE_P +#define TARGET_USE_BY_PIECES_INFRASTRUCTURE_P \ + mips_use_by_pieces_infrastructure_p + #undef TARGET_SPILL_CLASS #define TARGET_SPILL_CLASS mips_spill_class #undef TARGET_LRA_P diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index c7b998bf758..bf19920d454 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -2872,9 +2872,6 @@ while (0) ? MIPS_MAX_MOVE_BYTES_STRAIGHT / MOVE_MAX \ : MIPS_CALL_RATIO / 2) -#define MOVE_BY_PIECES_P(SIZE, ALIGN) \ - mips_move_by_pieces_p (SIZE, ALIGN) - /* For CLEAR_RATIO, when optimizing for size, give a better estimate of the length of a memset call, but use the default otherwise. */ @@ -2887,9 +2884,6 @@ while (0) #define SET_RATIO(speed) \ ((speed) ? 15 : MIPS_CALL_RATIO - 2) - -#define STORE_BY_PIECES_P(SIZE, ALIGN) \ - mips_store_by_pieces_p (SIZE, ALIGN) /* Since the bits of the _init and _fini function is spread across many object files, each potentially with its own GP, we must assume