diff options
author | Roger Sayle <roger@eyesopen.com> | 2004-07-12 13:42:28 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2004-07-12 13:42:28 +0000 |
commit | 938bf7475d34bb808144dff4ea0903026bd70b28 (patch) | |
tree | d4c960f66772cc6c6427b9e8562f72d90febd435 /gcc | |
parent | 62e39334a08066c17ead2da37ccb9209b2cc8e14 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 12 |
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; |