OSDN Git Service

* config/mips/mips.c (mips_rtx_costs): In mips16 code, set the cost
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Jul 2004 07:35:58 +0000 (07:35 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Jul 2004 07:35:58 +0000 (07:35 +0000)
of 0...255 to 0 when inside a SET.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84804 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mips/mips.c

index ae09368..8507a92 100644 (file)
@@ -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>
index 679416c..7f72535 100644 (file)
@@ -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: