aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2004-07-12 13:42:28 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2004-07-12 13:42:28 +0000
commit938bf7475d34bb808144dff4ea0903026bd70b28 (patch)
treed4c960f66772cc6c6427b9e8562f72d90febd435 /gcc
parent62e39334a08066c17ead2da37ccb9209b2cc8e14 (diff)
downloadgcc-938bf7475d34bb808144dff4ea0903026bd70b28.zip
gcc-938bf7475d34bb808144dff4ea0903026bd70b28.tar.gz
gcc-938bf7475d34bb808144dff4ea0903026bd70b28.tar.bz2
rs6000.c (rs6000_rtx_costs): Indicate that the rs6000 doesn't have shift-and-add or shift-and-sub...
* config/rs6000/rs6000.c (rs6000_rtx_costs): Indicate that the rs6000 doesn't have shift-and-add or shift-and-sub instructions by returning the cost of a multiplication plus an addition. From-SVN: r84556
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c12
2 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1cac842..e3d670d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-07-12 Roger Sayle <roger@eyesopen.com>
+
+ * config/rs6000/rs6000.c (rs6000_rtx_costs): Indicate that the
+ rs6000 doesn't have shift-and-add or shift-and-sub instructions
+ by returning the cost of a multiplication plus an addition.
+
2004-07-12 Paolo Bonzini <bonzini@gnu.org>
PR tree-optimization/14107
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 713a09b..0722ed7 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -16535,6 +16535,12 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED,
: rs6000_cost->fp;
else if (mode == SFmode)
*total = rs6000_cost->fp;
+ else if (GET_CODE (XEXP (x, 0)) == MULT)
+ {
+ /* The rs6000 doesn't have shift-and-add instructions. */
+ rs6000_rtx_costs (XEXP (x, 0), MULT, PLUS, total);
+ *total += COSTS_N_INSNS (1);
+ }
else
*total = ((GET_CODE (XEXP (x, 1)) == CONST_INT
&& ((unsigned HOST_WIDE_INT) (INTVAL (XEXP (x, 1))
@@ -16551,6 +16557,12 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED,
: rs6000_cost->fp;
else if (mode == SFmode)
*total = rs6000_cost->fp;
+ else if (GET_CODE (XEXP (x, 0)) == MULT)
+ {
+ /* The rs6000 doesn't have shift-and-sub instructions. */
+ rs6000_rtx_costs (XEXP (x, 0), MULT, MINUS, total);
+ *total += COSTS_N_INSNS (1);
+ }
else
*total = COSTS_N_INSNS (1);
return true;