[Patch 5/7 mips] Deprecate *_BY_PIECES_P, move to hookized version
authorJames Greenhalgh <james.greenhalgh@arm.com>
Sat, 1 Nov 2014 10:14:08 +0000 (10:14 +0000)
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>
Sat, 1 Nov 2014 10:14:08 +0000 (10:14 +0000)
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
gcc/config/mips/mips.c
gcc/config/mips/mips.h

index f193459a08c1d274974811f61ee4bce7a8523a09..7e9ae04ab2027a05f18debcba8e7ea627113c276 100644 (file)
@@ -1,3 +1,13 @@
+2014-11-01  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       * 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  <james.greenhalgh@arm.com>
 
        * config/sh/sh.c (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): New.
index 3d9db9246c9d278c3fe1e4eb7bb7ad75a358f67c..ac7746c372ee26b20bfa591ba130308a2c2e71ec 100644 (file)
@@ -7172,12 +7172,17 @@ mips_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
   return true;
 }
 \f
-/* 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
index c7b998bf758ec4af372e76d32b1b9f06946c66be..bf19920d4540c145a54179a7adb34c2a8a6f1822 100644 (file)
@@ -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)
 \f
 /* Since the bits of the _init and _fini function is spread across
    many object files, each potentially with its own GP, we must assume