Hello! We can use ext_QIreg_operands instead. These predicates automatically include mode checks with VOIDmode override.
Also, clean predicates.md a bit while there. 2011-04-26 Uros Bizjak <ubiz...@gmail.com> * config/i386/predicates.md (ext_QIreg_operand): Remove extra mode check. (ext_QIreg_nomode_operands): Remove. * config/i386/i386.md (*anddi_1): Use ext_QIreg_operand. (*andsi_1): Ditto. (*andhi_1): Ditto. Tested on x86_64-pc-linux-gnu {,-m32}, committed to mainline SVN. Uros.
Index: predicates.md =================================================================== --- predicates.md (revision 172954) +++ predicates.md (working copy) @@ -86,16 +86,9 @@ ;; %[abcd][hl]. (define_predicate "ext_QIreg_operand" (and (match_code "reg") - (match_test "TARGET_64BIT - && GET_MODE (op) == QImode - && REGNO (op) > BX_REG"))) + (match_test "TARGET_64BIT") + (match_test "REGNO (op) > BX_REG"))) -;; Similarly, but don't check mode of the operand. -(define_predicate "ext_QIreg_nomode_operand" - (and (match_code "reg") - (match_test "TARGET_64BIT - && REGNO (op) > BX_REG"))) - ;; Return true if op is not xmm0 register. (define_predicate "reg_not_xmm0_operand" (match_operand 0 "register_operand") @@ -391,7 +384,8 @@ ;; Return true if OP is nonmemory operand acceptable by movabs patterns. (define_predicate "x86_64_movabs_operand" - (if_then_else (match_test "!TARGET_64BIT || !flag_pic") + (if_then_else (not (and (match_test "TARGET_64BIT") + (match_test "flag_pic"))) (match_operand 0 "nonmemory_operand") (ior (match_operand 0 "register_operand") (and (match_operand 0 "const_double_operand") @@ -483,7 +477,7 @@ ;; scripts means that we can't be sure of that in general, so assume ;; that @GOTOFF is never valid on VxWorks. (define_predicate "gotoff_operand" - (and (match_test "!TARGET_VXWORKS_RTP") + (and (not (match_test "TARGET_VXWORKS_RTP")) (match_operand 0 "local_symbolic_operand"))) ;; Test for various thread-local symbols. @@ -611,7 +605,8 @@ ;; Match 0 or 1. (define_predicate "const_0_to_1_operand" (and (match_code "const_int") - (match_test "op == const0_rtx || op == const1_rtx"))) + (ior (match_test "op == const0_rtx") + (match_test "op == const1_rtx")))) ;; Match 0 to 3. (define_predicate "const_0_to_3_operand" @@ -696,7 +691,8 @@ ;; Match exactly one bit in 2-bit mask. (define_predicate "const_pow2_1_to_2_operand" (and (match_code "const_int") - (match_test "INTVAL (op) == 1 || INTVAL (op) == 2"))) + (ior (match_test "op == const1_rtx") + (match_test "op == const2_rtx")))) ;; Match exactly one bit in 4-bit mask. (define_predicate "const_pow2_1_to_8_operand" @@ -737,7 +733,8 @@ (define_predicate "reg_or_pm1_operand" (ior (match_operand 0 "register_operand") (and (match_code "const_int") - (match_test "op == const1_rtx || op == constm1_rtx")))) + (ior (match_test "op == const1_rtx") + (match_test "op == constm1_rtx"))))) ;; True if OP is acceptable as operand of DImode shift expander. (define_predicate "shiftdi_operand" @@ -984,8 +981,8 @@ (define_predicate "sse_comparison_operator" (ior (match_code "eq,ne,lt,le,unordered,unge,ungt,ordered") - (and (match_code "ge,gt,uneq,unle,unlt,ltgt") - (match_test "TARGET_AVX")))) + (and (match_test "TARGET_AVX") + (match_code "ge,gt,uneq,unle,unlt,ltgt")))) (define_predicate "ix86_comparison_int_operator" (match_code "ne,eq,ge,gt,le,lt")) Index: i386.md =================================================================== --- i386.md (revision 172954) +++ i386.md (working copy) @@ -7932,7 +7932,7 @@ (if_then_else (and (eq_attr "type" "imovx") (and (ne (symbol_ref "INTVAL (operands[2]) == 0xff") (const_int 0)) - (match_operand 1 "ext_QIreg_nomode_operand" ""))) + (match_operand 1 "ext_QIreg_operand" ""))) (const_string "1") (const_string "*"))) (set_attr "mode" "SI,DI,DI,SI")]) @@ -7976,7 +7976,7 @@ (if_then_else (and (eq_attr "type" "imovx") (and (ne (symbol_ref "INTVAL (operands[2]) == 0xff") (const_int 0)) - (match_operand 1 "ext_QIreg_nomode_operand" ""))) + (match_operand 1 "ext_QIreg_operand" ""))) (const_string "1") (const_string "*"))) (set_attr "length_immediate" "*,*,0") @@ -8019,7 +8019,7 @@ (set (attr "prefix_rex") (if_then_else (and (eq_attr "type" "imovx") - (match_operand 1 "ext_QIreg_nomode_operand" "")) + (match_operand 1 "ext_QIreg_operand" "")) (const_string "1") (const_string "*"))) (set_attr "mode" "HI,HI,SI")])