aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatoly Sokolov <aesok@post.ru>2011-01-23 00:38:39 +0300
committerAnatoly Sokolov <aesok@gcc.gnu.org>2011-01-23 00:38:39 +0300
commitccaed3ba91952bdc19aecce21d49714c5599ad2d (patch)
tree8ebd82278ec3c8096f03eb5571e4d018863a0cdf
parent0cecee061e9f6a049703683969b9933f0c8fb07c (diff)
downloadgcc-ccaed3ba91952bdc19aecce21d49714c5599ad2d.zip
gcc-ccaed3ba91952bdc19aecce21d49714c5599ad2d.tar.gz
gcc-ccaed3ba91952bdc19aecce21d49714c5599ad2d.tar.bz2
s390.h (REGISTER_MOVE_COST, [...]): Remove.
* config/s390/s390.h (REGISTER_MOVE_COST, MEMORY_MOVE_COST): Remove. * config/s390/s390.c (s390_register_move_cost, s390_memory_move_cost): New. (TARGET_REGISTER_MOVE_COST, TARGET_MEMORY_MOVE_COST): Define. From-SVN: r169135
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/s390/s390.c29
-rw-r--r--gcc/config/s390/s390.h12
3 files changed, 36 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index df4658b..8e15282 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2011-01-22 Anatoly Sokolov <aesok@post.ru>
+
+ * config/s390/s390.h (REGISTER_MOVE_COST, MEMORY_MOVE_COST): Remove.
+ * config/s390/s390.c (s390_register_move_cost,
+ s390_memory_move_cost): New.
+ (TARGET_REGISTER_MOVE_COST, TARGET_MEMORY_MOVE_COST): Define.
+
2011-01-22 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
PR middle-end/47401
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index efbf035..4bc7362 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -2426,6 +2426,31 @@ s390_float_const_zero_p (rtx value)
&& value == CONST0_RTX (GET_MODE (value)));
}
+/* Implement TARGET_REGISTER_MOVE_COST. */
+
+static int
+s390_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
+ reg_class_t from, reg_class_t to)
+{
+/* On s390, copy between fprs and gprs is expensive. */
+ if ((reg_classes_intersect_p (from, GENERAL_REGS)
+ && reg_classes_intersect_p (to, FP_REGS))
+ || (reg_classes_intersect_p (from, FP_REGS)
+ && reg_classes_intersect_p (to, GENERAL_REGS)))
+ return 10;
+
+ return 1;
+}
+
+/* Implement TARGET_MEMORY_MOVE_COST. */
+
+static int
+s390_memory_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
+ reg_class_t rclass ATTRIBUTE_UNUSED,
+ bool in ATTRIBUTE_UNUSED)
+{
+ return 1;
+}
/* Compute a (partial) cost for rtx X. Return true if the complete
cost has been computed, and false if subexpressions should be
@@ -10640,6 +10665,10 @@ s390_loop_unroll_adjust (unsigned nunroll, struct loop *loop)
#define TARGET_RTX_COSTS s390_rtx_costs
#undef TARGET_ADDRESS_COST
#define TARGET_ADDRESS_COST s390_address_cost
+#undef TARGET_REGISTER_MOVE_COST
+#define TARGET_REGISTER_MOVE_COST s390_register_move_cost
+#undef TARGET_MEMORY_MOVE_COST
+#define TARGET_MEMORY_MOVE_COST s390_memory_move_cost
#undef TARGET_MACHINE_DEPENDENT_REORG
#define TARGET_MACHINE_DEPENDENT_REORG s390_reorg
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index ed0a2aa..824864f 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -780,18 +780,6 @@ do { \
/* Relative costs of operations. */
-/* On s390, copy between fprs and gprs is expensive. */
-#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
- (( ( reg_classes_intersect_p ((CLASS1), GENERAL_REGS) \
- && reg_classes_intersect_p ((CLASS2), FP_REGS)) \
- || ( reg_classes_intersect_p ((CLASS1), FP_REGS) \
- && reg_classes_intersect_p ((CLASS2), GENERAL_REGS))) ? 10 : 1)
-
-/* A C expression for the cost of moving data of mode M between a
- register and memory. A value of 2 is the default; this cost is
- relative to those in `REGISTER_MOVE_COST'. */
-#define MEMORY_MOVE_COST(M, C, I) 1
-
/* A C expression for the cost of a branch instruction. A value of 1
is the default; other values are interpreted relative to that. */
#define BRANCH_COST(speed_p, predictable_p) 1