From: Zhenqiang Chen Date: Mon, 22 Sep 2014 02:54:45 +0000 (+0000) Subject: arm.c: #include "tm-constrs.h" X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=aecd88f78f4f88cc5f1365ec18b57e8e0cda638d;p=gcc.git arm.c: #include "tm-constrs.h" 2014-09-22 Zhenqiang Chen * config/arm/arm.c: #include "tm-constrs.h" (thumb1_size_rtx_costs): Adjust rtx costs. From-SVN: r215444 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 649b7e44088..0471bba2330 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-09-22 Zhenqiang Chen + + * config/arm/arm.c: #include "tm-constrs.h" + (thumb1_size_rtx_costs): Adjust rtx costs. + 2014-09-22 Hans-Peter Nilsson * configure.ac (target_header_dir): Move block defining diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index a289052408e..93b989d334f 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -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. */