mips.c (mips_rtx_costs): In mips16 code, set the cost of 0...255 to 0 when inside...
authorRichard Sandiford <rsandifo@redhat.com>
Fri, 16 Jul 2004 07:35:58 +0000 (07:35 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 16 Jul 2004 07:35:58 +0000 (07:35 +0000)
* config/mips/mips.c (mips_rtx_costs): In mips16 code, set the cost
of 0...255 to 0 when inside a SET.

From-SVN: r84804

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

index ae093686d96e1db9362257e50550eeaf2a6824fb..8507a920cd81b5ff5200d88ca33982d8568e7f2d 100644 (file)
@@ -1,3 +1,8 @@
+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.
index 679416c121f83b32d708f4ade86989be5f6ab022..7f72535f2cf43bb09ac30d7ba6ec33240b29f15f 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: