aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2012-08-26 19:19:31 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2012-08-26 19:19:31 +0000
commit1209ab5ed6540a37f5b0afe0c494c5771ba515ab (patch)
tree2aeb0fe5f8218124ea3971295e298cf86d3caada
parent3f5685dc35e4fea18c19eb5c32337c3020f323fe (diff)
downloadgcc-1209ab5ed6540a37f5b0afe0c494c5771ba515ab.zip
gcc-1209ab5ed6540a37f5b0afe0c494c5771ba515ab.tar.gz
gcc-1209ab5ed6540a37f5b0afe0c494c5771ba515ab.tar.bz2
mips.c (mips_rtx_costs): Add costs for CINS.
gcc/ * config/mips/mips.c (mips_rtx_costs): Add costs for CINS. From-SVN: r190699
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/mips/mips.c12
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 98aafc6..ae2bb1b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2012-08-26 Richard Sandiford <rdsandiford@googlemail.com>
+ * config/mips/mips.c (mips_rtx_costs): Add costs for CINS.
+
+2012-08-26 Richard Sandiford <rdsandiford@googlemail.com>
+
* config/mips/mips.c (mips_rtx_costs): Add missing COSTS_N_INSNS
to the size cost of multiplication.
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index b8210de..1f0c9ae 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -3677,6 +3677,18 @@ mips_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED,
+ set_src_cost (XEXP (x, 0), speed));
return true;
}
+ if (ISA_HAS_CINS && CONST_INT_P (XEXP (x, 1)))
+ {
+ rtx op = XEXP (x, 0);
+ if (GET_CODE (op) == ASHIFT
+ && CONST_INT_P (XEXP (op, 1))
+ && mask_low_and_shift_p (mode, XEXP (x, 1), XEXP (op, 1), 32))
+ {
+ *total = COSTS_N_INSNS (1) + set_src_cost (XEXP (op, 0), speed);
+ return true;
+ }
+ }
+
/* Fall through. */
case IOR: