i386.c (ix86_rtx_costs): Use IS_STACK_MODE when calculating cost of standard 80387...
authorUros Bizjak <ubizjak@gmail.com>
Fri, 20 May 2016 17:44:29 +0000 (19:44 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Fri, 20 May 2016 17:44:29 +0000 (19:44 +0200)
* gcc/config/i386/i386.c (ix86_rtx_costs) <case CONST_DOUBLE>:
Use IS_STACK_MODE when calculating cost of standard 80387 constants.
Fallthru to CONST_VECTOR case to calculate cost of standard SSE
constants.
<case CONST_WIDE_INT>: Calculate cost of (MEM (SYMBOL_REF)).
(ix86_legitimate_constant_p): Use CASE_CONST_SCALAR_INT
and CASE_CONST_ANY.

From-SVN: r236524

gcc/ChangeLog
gcc/config/i386/i386.c

index 69d61eefc9d51681ae09f89c31e9ad355bbc2094..07dceaabe928cc14151cca61ef882b17f5af86de 100644 (file)
@@ -1,3 +1,13 @@
+2016-05-20  Uros Bizjak  <ubizjak@gmail.com>
+
+       * gcc/config/i386/i386.c (ix86_rtx_costs) <case CONST_DOUBLE>:
+       Use IS_STACK_MODE when calculating cost of standard 80387 constants.
+       Fallthru to CONST_VECTOR case to calculate cost of standard SSE
+       constants.
+       <case CONST_WIDE_INT>: Calculate cost of (MEM (SYMBOL_REF)).
+       (ix86_legitimate_constant_p): Use CASE_CONST_SCALAR_INT
+       and CASE_CONST_ANY.
+
 2016-05-20  Cesar Philippidis  <cesar@codesourcery.com>
 
        * config/nvptx/nvptx.md (sincossf3): New pattern.
index af434ecd57e88aba44af0463696d9c84ecebdf70..54483168fed979e8297e8ccfbe2a7e8e4743f6ab 100644 (file)
@@ -14867,8 +14867,7 @@ ix86_legitimate_constant_p (machine_mode mode, rtx x)
 #endif
       break;
 
-    case CONST_INT:
-    case CONST_WIDE_INT:
+    CASE_CONST_SCALAR_INT:
       switch (mode)
        {
        case TImode:
@@ -14903,18 +14902,16 @@ ix86_legitimate_constant_p (machine_mode mode, rtx x)
 static bool
 ix86_cannot_force_const_mem (machine_mode mode, rtx x)
 {
-  /* We can always put integral constants and vectors in memory.  */
+  /* We can put any immediate constant in memory.  */
   switch (GET_CODE (x))
     {
-    case CONST_INT:
-    case CONST_WIDE_INT:
-    case CONST_DOUBLE:
-    case CONST_VECTOR:
+    CASE_CONST_ANY:
       return false;
 
     default:
       break;
     }
+
   return !ix86_legitimate_constant_p (mode, x);
 }
 
@@ -44076,43 +44073,43 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno,
        *total = 0;
       return true;
 
-    case CONST_WIDE_INT:
-      *total = 0;
-      return true;
-
     case CONST_DOUBLE:
-      switch (standard_80387_constant_p (x))
+      if (TARGET_80387 && IS_STACK_MODE (mode))
+       switch (standard_80387_constant_p (x))
+         {
+         case -1:
+         case 0:
+           break;
+         case 1: /* 0.0 */
+           *total = 1;
+           return true;
+         default: /* Other constants */
+           *total = 2;
+           return true;
+         }
+      /* FALLTHRU */
+
+    case CONST_VECTOR:
+      switch (standard_sse_constant_p (x, mode))
        {
-       case 1: /* 0.0 */
-         *total = 1;
-         return true;
-       default: /* Other constants */
-         *total = 2;
-         return true;
        case 0:
-       case -1:
          break;
+       case 1:  /* 0: xor eliminates false dependency */
+         *total = 0;
+         return true;
+       default: /* -1: cmp contains false dependency */
+         *total = 1;
+         return true;
        }
-      if (SSE_FLOAT_MODE_P (mode))
-       {
-       case CONST_VECTOR:
-         switch (standard_sse_constant_p (x, mode))
-           {
-           case 0:
-             break;
-           case 1:  /* 0: xor eliminates false dependency */
-             *total = 0;
-             return true;
-           default: /* -1: cmp contains false dependency */
-             *total = 1;
-             return true;
-           }
-       }
+      /* FALLTHRU */
+
+    case CONST_WIDE_INT:
       /* Fall back to (MEM (SYMBOL_REF)), since that's where
         it'll probably end up.  Add a penalty for size.  */
       *total = (COSTS_N_INSNS (1)
-               + (flag_pic != 0 && !TARGET_64BIT)
-               + (mode == SFmode ? 0 : mode == DFmode ? 1 : 2));
+               + (!TARGET_64BIT && flag_pic)
+               + (GET_MODE_SIZE (mode) <= 4
+                  ? 0 : GET_MODE_SIZE (mode) <= 8 ? 1 : 2));
       return true;
 
     case ZERO_EXTEND: