i386.md (*movdf_internal_rex64): Remove MODE_TI handling.
authorUros Bizjak <uros@gcc.gnu.org>
Sun, 5 Jun 2011 21:15:26 +0000 (23:15 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Sun, 5 Jun 2011 21:15:26 +0000 (23:15 +0200)
* config/i386/i386.md (*movdf_internal_rex64) <case 8,9,10>:
Remove MODE_TI handling.  Remove SSE1 handling in attribute "mode"
calculation.
(*movdf_internal_rex64) <case 6,7,8>: Remove MODE_TI handling.
Simplify MODE_V1DF and MODE_V2SF handling.
(*movsf_internal): Remove x constraint from alternative 7 of operand 1.
Simplify MODE_SF handling.

From-SVN: r174664

gcc/ChangeLog
gcc/config/i386/i386.md

index 3082d711c8ca4943c54a742a57129add79c0b3da..c1f2a35529bb6f4e2df53edd5400f4b5b88f49ca 100644 (file)
@@ -1,3 +1,13 @@
+2011-06-05  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.md (*movdf_internal_rex64) <case 8,9,10>:
+       Remove MODE_TI handling.  Remove SSE1 handling in attribute "mode"
+       calculation.
+       (*movdf_internal_rex64) <case 6,7,8>: Remove MODE_TI handling.
+       Simplify MODE_V1DF and MODE_V2SF handling.
+       (*movsf_internal): Remove x constraint from alternative 7 of operand 1.
+       Simplify MODE_SF handling.
+
 2011-06-04  Jan Hubicka  <jh@suse.cz>
 
        PR tree-optimization/48893
 
        * config/arm/arm-cores.def (strongarm, strongarm110, strongarm1100)
        (strongarm1110): Use strongarm tuning.
-       * config/arm/arm-protos.h (tune_params): Add max_insns_skipped
-       field.
+       * config/arm/arm-protos.h (tune_params): Add max_insns_skipped field.
        * config/arm/arm.c (arm_strongarm_tune): New.
        (arm_slowmul_tune, arm_fastmul_tune, arm_xscale_tune, arm_9e_tune)
        (arm_v6t2_tune, arm_cortex_tune, arm_cortex_a5_tune)
index 9702473eb1a68f0bd30681d8a5a8f11189c1aaf4..58de87b17521a58f4f9ba048ea701647d37efc78 100644 (file)
     case 10:
       switch (get_attr_mode (insn))
        {
-       case MODE_TI:
-         if (!TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL)
-           return "%vmovdqa\t{%1, %0|%0, %1}";
        case MODE_V2DF:
          if (!TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL)
            return "%vmovapd\t{%1, %0|%0, %1}";
        case MODE_DF:
          if (TARGET_AVX && REG_P (operands[0]) && REG_P (operands[1]))
            return "vmovsd\t{%1, %0, %0|%0, %0, %1}";
-         else
-           return "%vmovsd\t{%1, %0|%0, %1}";
+         return "%vmovsd\t{%1, %0|%0, %1}";
        case MODE_V1DF:
          return "%vmovlpd\t{%1, %d0|%d0, %1}";
        case MODE_V2SF:
               (eq_attr "alternative" "3,4,5,6,11,12")
                 (const_string "DI")
 
-              /* For SSE1, we have many fewer alternatives.  */
-              (eq (symbol_ref "TARGET_SSE2") (const_int 0))
-                (cond [(eq_attr "alternative" "7,8")
-                         (const_string "V4SF")
-                      ]
-                  (const_string "V2SF"))
-
               /* xorps is one byte shorter.  */
               (eq_attr "alternative" "7")
                 (cond [(ne (symbol_ref "optimize_function_for_size_p (cfun)")
     case 8:
       switch (get_attr_mode (insn))
        {
-       case MODE_TI:
-         if (!TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL)
-           return "%vmovdqa\t{%1, %0|%0, %1}";
        case MODE_V2DF:
          if (!TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL)
            return "%vmovapd\t{%1, %0|%0, %1}";
        case MODE_DF:
          if (TARGET_AVX && REG_P (operands[0]) && REG_P (operands[1]))
            return "vmovsd\t{%1, %0, %0|%0, %0, %1}";
-         else
-           return "%vmovsd\t{%1, %0|%0, %1}";
+         return "%vmovsd\t{%1, %0|%0, %1}";
        case MODE_V1DF:
-         if (TARGET_AVX && REG_P (operands[0]))
-           return "vmovlpd\t{%1, %0, %0|%0, %0, %1}";
-         else
-           return "%vmovlpd\t{%1, %0|%0, %1}";
+         return "%vmovlpd\t{%1, %d0|%d0, %1}";
        case MODE_V2SF:
-         if (TARGET_AVX && REG_P (operands[0]))
-           return "vmovlps\t{%1, %0, %0|%0, %0, %1}";
-         else
-           return "%vmovlps\t{%1, %0|%0, %1}";
+         return "%vmovlps\t{%1, %d0|%d0, %1}";
        default:
          gcc_unreachable ();
        }
 
               /* For SSE1, we have many fewer alternatives.  */
               (eq (symbol_ref "TARGET_SSE2") (const_int 0))
-                (cond [(eq_attr "alternative" "5,6")
-                         (const_string "V4SF")
-                      ]
+                (if_then_else
+                  (eq_attr "alternative" "5,6")
+                  (const_string "V4SF")
                   (const_string "V2SF"))
 
               /* xorps is one byte shorter.  */
 
 (define_insn "*movsf_internal"
   [(set (match_operand:SF 0 "nonimmediate_operand"
-         "=f,m,f,?r ,?m,x,x,x ,m,!*y,!m,!*y,?Yi,?r,!*Ym,!r")
+         "=f,m,f,?r ,?m,x,x,x,m,!*y,!m,!*y,?Yi,?r,!*Ym,!r")
        (match_operand:SF 1 "general_operand"
-         "fm,f,G,rmF,Fr,C,x,xm,x,m  ,*y,*y ,r  ,Yi,r   ,*Ym"))]
+         "fm,f,G,rmF,Fr,C,x,m,x,m  ,*y,*y ,r  ,Yi,r   ,*Ym"))]
   "!(MEM_P (operands[0]) && MEM_P (operands[1]))
    && (!can_create_pseudo_p ()
        || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
     case 6:
       if (get_attr_mode (insn) == MODE_V4SF)
        return "%vmovaps\t{%1, %0|%0, %1}";
-      else
-       return "%vmovss\t{%1, %d0|%d0, %1}";
+
     case 7:
-      if (TARGET_AVX && REG_P (operands[1]))
-       return "vmovss\t{%1, %0, %0|%0, %0, %1}";
-      else
-       return "%vmovss\t{%1, %0|%0, %1}";
     case 8:
+      if (TARGET_AVX && REG_P (operands[0]) && REG_P (operands[1]))
+       return "vmovss\t{%1, %0, %0|%0, %0, %1}";
       return "%vmovss\t{%1, %0|%0, %1}";
 
-    case 9: case 10: case 14: case 15:
+    case 9:
+    case 10:
+    case 14:
+    case 15:
       return "movd\t{%1, %0|%0, %1}";
 
     case 11:
       return "movq\t{%1, %0|%0, %1}";
 
-    case 12: case 13:
+    case 12:
+    case 13:
       return "%vmovd\t{%1, %0|%0, %1}";
 
     default: