aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/mips/mips.c14
2 files changed, 19 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ae09368..8507a92 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2004-07-16 Richard Sandiford <rsandifo@redhat.com>
+ * config/mips/mips.c (mips_rtx_costs): In mips16 code, set the cost
+ of 0...255 to 0 when inside a SET.
+
+2004-07-16 Richard Sandiford <rsandifo@redhat.com>
+
* config/mips/mips.md: Remove mips16 define_peepholes.
2004-07-16 Daniel Berlin <dberlin@dberlin.org>
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 679416c..7f72535 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -2192,6 +2192,20 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total)
return true;
}
+ /* Constants in the range 0...255 can be loaded with an unextended
+ instruction. They are therefore as cheap as a register move.
+
+ Given the choice between "li R1,0...255" and "move R1,R2"
+ (where R2 is a known constant), it is usually better to use "li",
+ since we do not want to unnessarily extend the lifetime of R2. */
+ if (outer_code == SET
+ && INTVAL (x) >= 0
+ && INTVAL (x) < 256)
+ {
+ *total = 0;
+ return true;
+ }
+
/* Otherwise fall through to the handling below. */
case CONST: