diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2008-11-01 22:16:09 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@gcc.gnu.org> | 2008-11-01 22:16:09 +0000 |
commit | aa05ad86531fc0170449521eb1dc8a43cfad7d46 (patch) | |
tree | 9fb36e6da797fdbdac8da8892b3c2ee0a3206343 /gcc | |
parent | 7ea6fdf55ed1bb2986e26f6a627d1d04b36491d7 (diff) | |
download | gcc-aa05ad86531fc0170449521eb1dc8a43cfad7d46.zip gcc-aa05ad86531fc0170449521eb1dc8a43cfad7d46.tar.gz gcc-aa05ad86531fc0170449521eb1dc8a43cfad7d46.tar.bz2 |
re PR target/37939 (CRIS port: no addi insn)
PR target/37939
* config/cris/cris.c (cris_rtx_costs) <MULT>: Return 0 for an ADDI
operand.
From-SVN: r141524
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/cris/cris.c | 15 |
2 files changed, 21 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b811061..9e558d3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-11-01 Hans-Peter Nilsson <hp@axis.com> + + PR target/37939 + * config/cris/cris.c (cris_rtx_costs) <MULT>: Return 0 for an ADDI + operand. + 2008-11-01 Richard Guenther <rguenther@suse.de> PR middle-end/37976 diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index 1d0a34b..88d8999 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -1796,6 +1796,21 @@ cris_rtx_costs (rtx x, int code, int outer_code, int *total, return true; case MULT: + /* If we have one arm of an ADDI, make sure it gets the cost of + one insn, i.e. zero cost for this operand, and just the cost + of the PLUS, as the insn is created by combine from a PLUS + and an ASHIFT, and the MULT cost below would make the + combined value be larger than the separate insns. The insn + validity is checked elsewhere by combine. + + FIXME: this case is a stop-gap for 4.3 and 4.4, this whole + function should be rewritten. */ + if (outer_code == PLUS && BIAP_INDEX_P (x)) + { + *total = 0; + return true; + } + /* Identify values that are no powers of two. Powers of 2 are taken care of already and those values should not be changed. */ if (!CONST_INT_P (XEXP (x, 1)) |