]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386.md (*movxf_internal): Disable CONST_DOUBLE optimization for CM_MEDIUM and CM_LAR...
authorUros Bizjak <ubizjak@gmail.com>
Mon, 16 May 2011 21:19:58 +0000 (23:19 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 16 May 2011 21:19:58 +0000 (23:19 +0200)
* config/i386/i386.md (*movxf_internal): Disable CONST_DOUBLE
optimization for CM_MEDIUM and CM_LARGE code models.  Fix usage
of standard_80387_constant_p.
(*movxf_internal_nointeger): Ditto.
(*movdf_internal): Remove dead code-size optimization.
(*movdf_internal_rex64): Fix usage of standard_80387_constant_p.
(*movdf_internal_nointeger): Ditto.
(*movsf_internal): Ditto.
(floating point move splitters): Ditto.
* config/i386/constraints.md (G): Ditto.
* config/i386/i386.c (ix86_preferred_reload_class): Ditto.

From-SVN: r173807

gcc/ChangeLog
gcc/config/i386/constraints.md
gcc/config/i386/i386.c
gcc/config/i386/i386.md

index 801e34ed4a95e0fe39aca3cff55fca56726730f8..c23602c954414d4bb3d3bd392b70a73ba2f4c170 100644 (file)
@@ -1,3 +1,17 @@
+2011-05-16  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.md (*movxf_internal): Disable CONST_DOUBLE
+       optimization for CM_MEDIUM and CM_LARGE code models.  Fix usage
+       of standard_80387_constant_p.
+       (*movxf_internal_nointeger): Ditto.
+       (*movdf_internal): Remove dead code-size optimization.
+       (*movdf_internal_rex64): Fix usage of standard_80387_constant_p.
+       (*movdf_internal_nointeger): Ditto.
+       (*movsf_internal): Ditto.
+       (floating point move splitters): Ditto.
+       * config/i386/constraints.md (G): Ditto.
+       * config/i386/i386.c (ix86_preferred_reload_class): Ditto.
+
 2011-05-11  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        Backport from mainline
index 89722bb92daacb860dad18f87a81d9ef1df80abb..4bc3ed64b026f7a15b5d847aa973468e11350da7 100644 (file)
 (define_constraint "G"
   "Standard 80387 floating point constant."
   (and (match_code "const_double")
-       (match_test "standard_80387_constant_p (op)")))
+       (match_test "standard_80387_constant_p (op) > 0")))
 
 ;; This can theoretically be any mode's CONST0_RTX.
 (define_constraint "C"
index ef35b3a0a8f8804cc196d5c268dc2b8a604ea64e..35e1ceeeddc59789144b9a864ccbddb6f3a0dfa7 100644 (file)
@@ -25071,7 +25071,7 @@ ix86_preferred_reload_class (rtx x, enum reg_class regclass)
         zero above.  We only want to wind up preferring 80387 registers if
         we plan on doing computation with them.  */
       if (TARGET_80387
-         && standard_80387_constant_p (x))
+         && standard_80387_constant_p (x) > 0)
        {
          /* Limit class to non-sse.  */
          if (regclass == FLOAT_SSE_REGS)
index 91e861192b864132cc2946762f714ce69fb415ed..1afa1e0da2ada0e5dcf529a9dea9cec71472bbb8 100644 (file)
    && (reload_in_progress || reload_completed
        || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
        || (!TARGET_SSE_MATH && optimize_function_for_size_p (cfun)
-          && standard_80387_constant_p (operands[1]))
+          && standard_80387_constant_p (operands[1]) > 0)
        || GET_CODE (operands[1]) != CONST_DOUBLE
        || memory_operand (operands[0], SFmode))"
 {
        || (!(TARGET_SSE2 && TARGET_SSE_MATH)
            && optimize_function_for_size_p (cfun)
            && !memory_operand (operands[0], DFmode)
-          && standard_80387_constant_p (operands[1]))
+          && standard_80387_constant_p (operands[1]) > 0)
        || GET_CODE (operands[1]) != CONST_DOUBLE
        || ((optimize_function_for_size_p (cfun)
-            || !TARGET_MEMORY_MISMATCH_STALL
-           || reload_in_progress || reload_completed)
+            || !TARGET_MEMORY_MISMATCH_STALL)
           && memory_operand (operands[0], DFmode)))"
 {
   switch (which_alternative)
        || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
        || (!(TARGET_SSE2 && TARGET_SSE_MATH)
            && optimize_function_for_size_p (cfun)
-          && standard_80387_constant_p (operands[1]))
+          && standard_80387_constant_p (operands[1]) > 0)
        || GET_CODE (operands[1]) != CONST_DOUBLE
        || memory_operand (operands[0], DFmode))"
 {
        || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
        || (!(TARGET_SSE2 && TARGET_SSE_MATH)
            && optimize_function_for_size_p (cfun)
-          && standard_80387_constant_p (operands[1]))
+          && standard_80387_constant_p (operands[1]) > 0)
        || GET_CODE (operands[1]) != CONST_DOUBLE
        || memory_operand (operands[0], DFmode))"
 {
   "optimize_function_for_size_p (cfun)
    && !(MEM_P (operands[0]) && MEM_P (operands[1]))
    && (reload_in_progress || reload_completed
-       || standard_80387_constant_p (operands[1])
+       || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
+       || standard_80387_constant_p (operands[1]) > 0
        || GET_CODE (operands[1]) != CONST_DOUBLE
        || memory_operand (operands[0], XFmode))"
 {
   "optimize_function_for_speed_p (cfun)
    && !(MEM_P (operands[0]) && MEM_P (operands[1]))
    && (reload_in_progress || reload_completed
+       || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
        || GET_CODE (operands[1]) != CONST_DOUBLE
        || memory_operand (operands[0], XFmode))"
 {
     }
   else if (FP_REG_P (r))
     {
-      if (!standard_80387_constant_p (c))
+      if (standard_80387_constant_p (c) < 1)
        FAIL;
     }
   else if (MMX_REG_P (r))
     }
   else if (FP_REG_P (r))
     {
-      if (!standard_80387_constant_p (c))
+      if (standard_80387_constant_p (c) < 1)
        FAIL;
     }
   else if (MMX_REG_P (r))