This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[Patch 3/7 arc] Deprecate *_BY_PIECES_P, move to hookized version
- From: James Greenhalgh <james dot greenhalgh at arm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: joern dot rennecke at embecosm dot com
- Date: Fri, 31 Oct 2014 15:10:04 +0000
- Subject: [Patch 3/7 arc] Deprecate *_BY_PIECES_P, move to hookized version
- Authentication-results: sourceware.org; auth=none
- References: <1414768100-27840-1-git-send-email-james dot greenhalgh at arm dot com>
Hi,
This patch moves arc to TARGET_USE_BY_PIECES_INFRASTRUCTURE_P.
While I am there, arc defines a macro CAN_MOVE_BY_PIECES, which is
unused, so clean that up too.
arc only implements MOVE_BY_PIECES_P, wiring it to false. Mirror that
behaviour, and use the default hook for other by_pieces operations.
I tried building a compiler but no amount of fiddling with target
strings got me to a sensible result, so this patch is completely
untested.
If one of the arc maintainers could give it a spin that would be
helpful.
OK?
Thanks,
James
---
2014-10-31 James Greenhalgh <james.greenhalgh@arm.com>
* config/arc/arc.c (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): New.
(arc_use_by_pieces_infrastructure_p): Likewise.
* confir/arc/arc.h (MOVE_BY_PIECES_P): Delete.
(CAN_MOVE_BY_PIECES): Likewise.
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
index d04be01..c5b8b80 100644
--- a/gcc/config/arc/arc.c
+++ b/gcc/config/arc/arc.c
@@ -415,6 +415,11 @@ static void output_short_suffix (FILE *file);
static bool arc_frame_pointer_required (void);
+static bool arc_use_by_pieces_infrastructure_p (unsigned int,
+ unsigned int,
+ enum by_pieces_operation op,
+ bool);
+
/* Implements target hook vector_mode_supported_p. */
static bool
@@ -530,6 +535,10 @@ static void arc_finalize_pic (void);
#undef TARGET_DELEGITIMIZE_ADDRESS
#define TARGET_DELEGITIMIZE_ADDRESS arc_delegitimize_address
+#undef TARGET_USE_BY_PIECES_INFRASTRUCTURE_P
+#define TARGET_USE_BY_PIECES_INFRASTRUCTURE_P \
+ arc_use_by_pieces_infrastructure_p
+
/* Usually, we will be able to scale anchor offsets.
When this fails, we want LEGITIMIZE_ADDRESS to kick in. */
#undef TARGET_MIN_ANCHOR_OFFSET
@@ -9383,6 +9392,21 @@ arc_legitimize_reload_address (rtx *p, machine_mode mode, int opnum,
return false;
}
+/* Implement TARGET_USE_BY_PIECES_INFRASTRUCTURE_P. */
+
+static bool
+arc_use_by_pieces_infrastructure_p (unsigned int size,
+ unsigned int align,
+ enum by_pieces_operation op,
+ bool speed_p)
+{
+ /* Let the movmem expander handle small block moves. */
+ if (op == MOVE_BY_PIECES_P)
+ return false;
+
+ return default_use_by_pieces_infrastructure_p (size, align, op, speed_p);
+}
+
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-arc.h"
diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h
index d40f5c3..2d27787 100644
--- a/gcc/config/arc/arc.h
+++ b/gcc/config/arc/arc.h
@@ -1553,12 +1553,6 @@ extern int arc_return_address_regs[4];
in one reasonably fast instruction. */
#define MOVE_MAX 4
-/* Let the movmem expander handle small block moves. */
-#define MOVE_BY_PIECES_P(LEN, ALIGN) 0
-#define CAN_MOVE_BY_PIECES(SIZE, ALIGN) \
- (move_by_pieces_ninsns (SIZE, ALIGN, MOVE_MAX_PIECES + 1) \
- < (unsigned int) MOVE_RATIO (!optimize_size))
-
/* Undo the effects of the movmem pattern presence on STORE_BY_PIECES_P . */
#define MOVE_RATIO(SPEED) ((SPEED) ? 15 : 3)