]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386.md (ctz<mode>2): Emit rep;bsf only for TARGET_GENERIC, when not optimizing for...
authorUros Bizjak <ubizjak@gmail.com>
Mon, 7 May 2012 14:38:41 +0000 (16:38 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 7 May 2012 14:38:41 +0000 (16:38 +0200)
* config/i386/i386.md (ctz<mode>2): Emit rep;bsf
only for TARGET_GENERIC, when not optimizing for size.
(*ffs<mode>_1): Ditto.

From-SVN: r187247

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

index 47ede162d5c57df8b311ca119a3f25c745c5cfdb..133719b3387b8cadb8c5672d5ab4fb31f0885146 100644 (file)
@@ -1,3 +1,9 @@
+2012-05-07  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.md (ctz<mode>2): Emit rep;bsf
+       only for TARGET_GENERIC, when not optimizing for size.
+       (*ffs<mode>_1): Ditto.
+
 2012-05-07  Steven Bosscher  <steven@gcc.gnu.org>
 
        * tree-cfg.c (verify_gimple_switch): Tighten checks.
index b78054fd5498ed54ad3801321b978ccf07da27c5..80f1ec483cf99fdbe4bd2451e795e06a60d87757 100644 (file)
        (ctz:SWI48 (match_dup 1)))]
   ""
 {
-  if (optimize_function_for_size_p (cfun))
-    return "bsf{<imodesuffix>}\t{%1, %0|%0, %1}";
-  else if (TARGET_BMI)
+  if (TARGET_BMI)
     return "tzcnt{<imodesuffix>}\t{%1, %0|%0, %1}";
-  else 
+  else if (optimize_function_for_size_p (cfun))
+    ;
+  else if (TARGET_GENERIC)
     /* tzcnt expands to rep;bsf and we can use it even if !TARGET_BMI.  */
     return "rep; bsf{<imodesuffix>}\t{%1, %0|%0, %1}";
+
+  return "bsf{<imodesuffix>}\t{%1, %0|%0, %1}";
 }
   [(set_attr "type" "alu1")
    (set_attr "prefix_0f" "1")
    (set (attr "prefix_rep")
      (if_then_else
-       (match_test "optimize_function_for_size_p (cfun)")
-       (const_string "0")
-       (const_string "1")))
+       (ior (match_test "TARGET_BMI")
+           (and (not (match_test "optimize_function_for_size_p (cfun)"))
+                (match_test "TARGET_GENERIC")))
+       (const_string "1")
+       (const_string "0")))
    (set_attr "mode" "<MODE>")])
 
 (define_insn "ctz<mode>2"
    (clobber (reg:CC FLAGS_REG))]
   ""
 {
-  if (optimize_function_for_size_p (cfun))
-    return "bsf{<imodesuffix>}\t{%1, %0|%0, %1}";
-  else if (TARGET_BMI)
+  if (TARGET_BMI)
     return "tzcnt{<imodesuffix>}\t{%1, %0|%0, %1}";
-  else 
+  else if (optimize_function_for_size_p (cfun))
+    ;
+  else if (TARGET_GENERIC)
     /* tzcnt expands to rep;bsf and we can use it even if !TARGET_BMI.  */
     return "rep; bsf{<imodesuffix>}\t{%1, %0|%0, %1}";
+
+  return "bsf{<imodesuffix>}\t{%1, %0|%0, %1}";
 }
   [(set_attr "type" "alu1")
    (set_attr "prefix_0f" "1")
    (set (attr "prefix_rep")
      (if_then_else
-       (match_test "optimize_function_for_size_p (cfun)")
-       (const_string "0")
-       (const_string "1")))
+       (ior (match_test "TARGET_BMI")
+           (and (not (match_test "optimize_function_for_size_p (cfun)"))
+                (match_test "TARGET_GENERIC")))
+       (const_string "1")
+       (const_string "0")))
    (set_attr "mode" "<MODE>")])
 
 (define_expand "clz<mode>2"