i386.md (wide AND insn to QImode splitter): Use explicit mode macros.
authorUros Bizjak <ubizjak@gmail.com>
Thu, 24 Nov 2016 21:48:13 +0000 (22:48 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 24 Nov 2016 21:48:13 +0000 (22:48 +0100)
* config/i386/i386.md (wide AND insn to QImode splitter): Use
explicit mode macros.
(wide OR insn to QImode splitter): Ditto.

From-SVN: r242852

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

index a20c48a..4244a98 100644 (file)
@@ -1,3 +1,9 @@
+2016-11-24  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.md (wide AND insn to QImode splitter): Use
+       explicit mode macros.
+       (wide OR insn to QImode splitter): Ditto.
+
 2016-11-24  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR rtl-optimization/77541
index 5f4cdeb..f80aa40 100644 (file)
 ;; of memory mismatch stalls.  We may want to do the splitting for optimizing
 ;; for size, but that can (should?) be handled by generic code instead.
 (define_split
-  [(set (match_operand 0 "QIreg_operand")
-       (and (match_operand 1 "register_operand")
-            (match_operand 2 "const_int_operand")))
+  [(set (match_operand:SWI248 0 "QIreg_operand")
+       (and:SWI248 (match_operand:SWI248 1 "register_operand")
+                   (match_operand:SWI248 2 "const_int_operand")))
    (clobber (reg:CC FLAGS_REG))]
    "reload_completed
     && (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
-    && !(~INTVAL (operands[2]) & ~(255 << 8))
-    && GET_MODE (operands[0]) != QImode"
+    && !(~INTVAL (operands[2]) & ~(255 << 8))"
   [(parallel [(set (zero_extract:SI (match_dup 0) (const_int 8) (const_int 8))
                   (and:SI (zero_extract:SI (match_dup 1)
                                            (const_int 8) (const_int 8))
 ;; Since AND can be encoded with sign extended immediate, this is only
 ;; profitable when 7th bit is not set.
 (define_split
-  [(set (match_operand 0 "any_QIreg_operand")
-       (and (match_operand 1 "general_operand")
-            (match_operand 2 "const_int_operand")))
+  [(set (match_operand:SWI248 0 "any_QIreg_operand")
+       (and:SWI248 (match_operand:SWI248 1 "general_operand")
+                   (match_operand:SWI248 2 "const_int_operand")))
    (clobber (reg:CC FLAGS_REG))]
    "reload_completed
     && (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
     && !(~INTVAL (operands[2]) & ~255)
-    && !(INTVAL (operands[2]) & 128)
-    && GET_MODE (operands[0]) != QImode"
+    && !(INTVAL (operands[2]) & 128)"
   [(parallel [(set (strict_low_part (match_dup 0))
                   (and:QI (match_dup 1)
                           (match_dup 2)))
    (set_attr "length_immediate" "0")
    (set_attr "mode" "QI")])
 
+;; Convert wide OR instructions with immediate operand to shorter QImode
+;; equivalents when possible.
+;; Don't do the splitting with memory operands, since it introduces risk
+;; of memory mismatch stalls.  We may want to do the splitting for optimizing
+;; for size, but that can (should?) be handled by generic code instead.
 (define_split
-  [(set (match_operand 0 "QIreg_operand")
-       (any_or (match_operand 1 "register_operand")
-               (match_operand 2 "const_int_operand")))
+  [(set (match_operand:SWI248 0 "QIreg_operand")
+       (any_or:SWI248 (match_operand:SWI248 1 "register_operand")
+                      (match_operand:SWI248 2 "const_int_operand")))
    (clobber (reg:CC FLAGS_REG))]
    "reload_completed
     && (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
-    && !(INTVAL (operands[2]) & ~(255 << 8))
-    && GET_MODE (operands[0]) != QImode"
+    && !(INTVAL (operands[2]) & ~(255 << 8))"
   [(parallel [(set (zero_extract:SI (match_dup 0) (const_int 8) (const_int 8))
                   (any_or:SI (zero_extract:SI (match_dup 1)
                                               (const_int 8) (const_int 8))
 ;; Since OR can be encoded with sign extended immediate, this is only
 ;; profitable when 7th bit is set.
 (define_split
-  [(set (match_operand 0 "any_QIreg_operand")
-       (any_or (match_operand 1 "general_operand")
-               (match_operand 2 "const_int_operand")))
+  [(set (match_operand:SWI248 0 "any_QIreg_operand")
+       (any_or:SWI248 (match_operand:SWI248 1 "general_operand")
+                      (match_operand:SWI248 2 "const_int_operand")))
    (clobber (reg:CC FLAGS_REG))]
    "reload_completed
     && (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
     && !(INTVAL (operands[2]) & ~255)
-    && (INTVAL (operands[2]) & 128)
-    && GET_MODE (operands[0]) != QImode"
+    && (INTVAL (operands[2]) & 128)"
   [(parallel [(set (strict_low_part (match_dup 0))
                   (any_or:QI (match_dup 1)
                              (match_dup 2)))