Replace q_regs_operand with QIreg_operand in QI ext patterns.
authorH.J. Lu <hongjiu.lu@intel.com>
Wed, 25 May 2011 16:19:36 +0000 (16:19 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Wed, 25 May 2011 16:19:36 +0000 (09:19 -0700)
2011-05-25  H.J. Lu  <hongjiu.lu@intel.com>

PR target/49142
* config/i386/i386.md (*movqi_extv_1_rex64): Remove
"register_operand" check and replace q_regs_operand with
QIreg_operand in "type" calculation.
(*movqi_extv_1): Likewise.
(*movqi_extzv_2_rex64): Likewise.
(*movqi_extzv_2): Likewise.

* config/i386/predicates.md (QIreg_operand): New.

From-SVN: r174211

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

index a22c5d5357528af0aee8768c4538a14676495e78..620acbb117bf886bdbaae8f791358f150bd5f0fa 100644 (file)
@@ -1,3 +1,15 @@
+2011-05-25  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/49142
+       * config/i386/i386.md (*movqi_extv_1_rex64): Remove
+       "register_operand" check and replace q_regs_operand with
+       QIreg_operand in "type" calculation.
+       (*movqi_extv_1): Likewise.
+       (*movqi_extzv_2_rex64): Likewise.
+       (*movqi_extzv_2): Likewise.
+
+       * config/i386/predicates.md (QIreg_operand): New.
+
 2011-05-25  Richard Guenther  <rguenther@suse.de>
 
        * tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Fix
index 801573c1e980801b634cb31e2f8b13bfc5e453bc..1cdbe7e430b29c366ce929bdfbf221def6258948 100644 (file)
     }
 }
   [(set (attr "type")
-     (if_then_else (and (match_operand:QI 0 "register_operand" "")
-                       (ior (not (match_operand:QI 0 "q_regs_operand" ""))
-                            (ne (symbol_ref "TARGET_MOVX")
-                                (const_int 0))))
+     (if_then_else (ior (not (match_operand:QI 0 "QIreg_operand" ""))
+                       (ne (symbol_ref "TARGET_MOVX")
+                           (const_int 0)))
        (const_string "imovx")
        (const_string "imov")))
    (set (attr "mode")
     }
 }
   [(set (attr "type")
-     (if_then_else (and (match_operand:QI 0 "register_operand" "")
-                       (ior (not (match_operand:QI 0 "q_regs_operand" ""))
-                            (ne (symbol_ref "TARGET_MOVX")
-                                (const_int 0))))
+     (if_then_else (ior (not (match_operand:QI 0 "QIreg_operand" ""))
+                       (ne (symbol_ref "TARGET_MOVX")
+                           (const_int 0)))
        (const_string "imovx")
        (const_string "imov")))
    (set (attr "mode")
     }
 }
   [(set (attr "type")
-     (if_then_else (ior (not (match_operand:QI 0 "q_regs_operand" ""))
+     (if_then_else (ior (not (match_operand:QI 0 "QIreg_operand" ""))
                        (ne (symbol_ref "TARGET_MOVX")
                            (const_int 0)))
        (const_string "imovx")
     }
 }
   [(set (attr "type")
-     (if_then_else (and (match_operand:QI 0 "register_operand" "")
-                       (ior (not (match_operand:QI 0 "q_regs_operand" ""))
-                            (ne (symbol_ref "TARGET_MOVX")
-                                (const_int 0))))
+     (if_then_else (ior (not (match_operand:QI 0 "QIreg_operand" ""))
+                       (ne (symbol_ref "TARGET_MOVX")
+                           (const_int 0)))
        (const_string "imovx")
        (const_string "imov")))
    (set (attr "mode")
index 8a89f70c33378015105b2b75bc462de56223d336..1471f5a22820cc9a545553e2481b93a988f1c8be 100644 (file)
   (and (match_code "reg")
        (match_test "REGNO (op) == FLAGS_REG")))
 
+;; Return true if op is one of QImode registers: %[abcd][hl].
+(define_predicate "QIreg_operand"
+  (match_test "QI_REG_P (op)"))
+
 ;; Return true if op is a QImode register operand other than
 ;; %[abcd][hl].
 (define_predicate "ext_QIreg_operand"