arm.c: #include "tm-constrs.h"
authorZhenqiang Chen <zhenqiang.chen@arm.com>
Mon, 22 Sep 2014 02:54:45 +0000 (02:54 +0000)
committerZhenqiang Chen <zqchen@gcc.gnu.org>
Mon, 22 Sep 2014 02:54:45 +0000 (02:54 +0000)
2014-09-22  Zhenqiang Chen  <zhenqiang.chen@arm.com>

* config/arm/arm.c: #include "tm-constrs.h"
(thumb1_size_rtx_costs): Adjust rtx costs.

From-SVN: r215444

gcc/ChangeLog
gcc/config/arm/arm.c

index 649b7e440884116ea56f17d77217aa72fec4bb20..0471bba233090e41ce1f299a158e6b15b4c882b2 100644 (file)
@@ -1,3 +1,8 @@
+2014-09-22  Zhenqiang Chen  <zhenqiang.chen@arm.com>
+
+       * config/arm/arm.c: #include "tm-constrs.h"
+       (thumb1_size_rtx_costs): Adjust rtx costs.
+
 2014-09-22  Hans-Peter Nilsson  <hp@axis.com>
 
        * configure.ac (target_header_dir): Move block defining
index a289052408e117e4bcc5b78e1263c7d67bc90cf9..93b989d334f9b14d692786626cad2000c4e91248 100644 (file)
@@ -62,6 +62,7 @@
 #include "dumpfile.h"
 #include "gimple-expr.h"
 #include "builtins.h"
+#include "tm-constrs.h"
 
 /* Forward definitions of types.  */
 typedef struct minipool_node    Mnode;
@@ -8927,9 +8928,11 @@ thumb1_size_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer)
       /* A SET doesn't have a mode, so let's look at the SET_DEST to get
         the mode.  */
       words = ARM_NUM_INTS (GET_MODE_SIZE (GET_MODE (SET_DEST (x))));
-      return (COSTS_N_INSNS (words)
-              + 4 * ((MEM_P (SET_SRC (x)))
-                     + MEM_P (SET_DEST (x))));
+      return COSTS_N_INSNS (words)
+            + COSTS_N_INSNS (1) * (satisfies_constraint_J (SET_SRC (x))
+                                   || satisfies_constraint_K (SET_SRC (x))
+                                      /* thumb1_movdi_insn.  */
+                                   || ((words > 1) && MEM_P (SET_SRC (x))));
 
     case CONST_INT:
       if (outer == SET)
@@ -8982,16 +8985,14 @@ thumb1_size_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer)
     case AND:
     case XOR:
     case IOR:
-      /* XXX guess.  */
-      return 8;
+      return COSTS_N_INSNS (1);
 
     case MEM:
-      /* XXX another guess.  */
-      /* Memory costs quite a lot for the first word, but subsequent words
-         load at the equivalent of a single insn each.  */
-      return (10 + 4 * ((GET_MODE_SIZE (mode) - 1) / UNITS_PER_WORD)
+      return (COSTS_N_INSNS (1)
+             + COSTS_N_INSNS (1)
+               * ((GET_MODE_SIZE (mode) - 1) / UNITS_PER_WORD)
               + ((GET_CODE (x) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x))
-                 ? 4 : 0));
+                 ? COSTS_N_INSNS (1) : 0));
 
     case IF_THEN_ELSE:
       /* XXX a guess.  */