bfin.md (cmpsi, [...]): Use reg_or_const_int_operand for second comparison operand.
authorBernd Schmidt <bernd.schmidt@analog.com>
Mon, 11 Jul 2005 16:15:45 +0000 (16:15 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Mon, 11 Jul 2005 16:15:45 +0000 (16:15 +0000)
* config/bfin/bfin.md (cmpsi, compare_eq, compare_ne, compare_lt,
compare_le, compare_leu, compare_ltu): Use reg_or_const_int_operand
for second comparison operand.
* config/bfin/predicates.md (reg_or_const_int_operand): New.

From-SVN: r101881

gcc/ChangeLog
gcc/config/bfin/bfin.md
gcc/config/bfin/predicates.md

index b5147ab56ba8742a4153cd1c285c95968ee4703e..e1b5b633fd168e1f0465bcd099dae1446f73a733 100644 (file)
@@ -1,5 +1,10 @@
 2005-07-11  Bernd Schmidt  <bernd.schmidt@analog.com>
 
+       * config/bfin/bfin.md (cmpsi, compare_eq, compare_ne, compare_lt,
+       compare_le, compare_leu, compare_ltu): Use reg_or_const_int_operand
+       for second comparison operand.
+       * config/bfin/predicates.md (reg_or_const_int_operand): New.
+
        * config/bfin/bfin.md (define_attr "type"): Add "sync".
        (define_insn_reservation "alu"): Likewise.
        (csync, ssync): Now of type sync.
index be430c8c6bab6d9d4b4549b08dbf71871f9ad827..207bdd8ee7f43954541e55c3ddd8e36a7d59e99d 100644 (file)
 
 (define_expand "cmpsi"
  [(set (cc0) (compare (match_operand:SI 0 "register_operand" "")
-                      (match_operand:SI 1 "nonmemory_operand" "")))]
+                      (match_operand:SI 1 "reg_or_const_int_operand" "")))]
  ""
 {
   bfin_compare_op0 = operands[0];
 (define_insn "compare_eq"
   [(set (match_operand:BI 0 "cc_operand" "=C,C")
         (eq:BI (match_operand:SI 1 "register_operand" "d,a")
-               (match_operand:SI 2 "nonmemory_operand" "dKs3,aKs3")))]
+               (match_operand:SI 2 "reg_or_const_int_operand" "dKs3,aKs3")))]
   ""
   "cc =%1==%2;"
   [(set_attr "type" "compare")])
 (define_insn "compare_ne"
   [(set (match_operand:BI 0 "cc_operand" "=C,C")
         (ne:BI (match_operand:SI 1 "register_operand" "d,a")
-               (match_operand:SI 2 "nonmemory_operand" "dKs3,aKs3")))]
+               (match_operand:SI 2 "reg_or_const_int_operand" "dKs3,aKs3")))]
   "0"
   "cc =%1!=%2;"
   [(set_attr "type" "compare")])
 (define_insn "compare_lt"
   [(set (match_operand:BI 0 "cc_operand" "=C,C")
         (lt:BI (match_operand:SI 1 "register_operand" "d,a")
-               (match_operand:SI 2 "nonmemory_operand" "dKs3,aKs3")))]
+               (match_operand:SI 2 "reg_or_const_int_operand" "dKs3,aKs3")))]
   ""
   "cc =%1<%2;"
   [(set_attr "type" "compare")])
 (define_insn "compare_le"
   [(set (match_operand:BI 0 "cc_operand" "=C,C")
         (le:BI (match_operand:SI 1 "register_operand" "d,a")
-               (match_operand:SI 2 "nonmemory_operand" "dKs3,aKs3")))]
+               (match_operand:SI 2 "reg_or_const_int_operand" "dKs3,aKs3")))]
   ""
   "cc =%1<=%2;"
   [(set_attr "type" "compare")])
 (define_insn "compare_leu"
   [(set (match_operand:BI 0 "cc_operand" "=C,C")
         (leu:BI (match_operand:SI 1 "register_operand" "d,a")
-                (match_operand:SI 2 "nonmemory_operand" "dKu3,aKu3")))]
+                (match_operand:SI 2 "reg_or_const_int_operand" "dKu3,aKu3")))]
   ""
   "cc =%1<=%2 (iu);"
   [(set_attr "type" "compare")])
 (define_insn "compare_ltu"
   [(set (match_operand:BI 0 "cc_operand" "=C,C")
         (ltu:BI (match_operand:SI 1 "register_operand" "d,a")
-                (match_operand:SI 2 "nonmemory_operand" "dKu3,aKu3")))]
+                (match_operand:SI 2 "reg_or_const_int_operand" "dKu3,aKu3")))]
   ""
   "cc =%1<%2 (iu);"
   [(set_attr "type" "compare")])
index 139bc7383659dd8d2dd2674a21fbbcf73c9318e2..7abd129d9f3bbd3123b3821d39b439e5bcd5fdc5 100644 (file)
        (and (match_code "const_int")
            (match_test "log2constp (INTVAL (op))"))))
 
+;; Return nonzero if OP is a register or an integer constant.
+(define_predicate "reg_or_const_int_operand"
+  (ior (match_operand 0 "register_operand")
+       (match_code "const_int")))
+
 ;; Like register_operand, but make sure that hard regs have a valid mode.
 (define_predicate "valid_reg_operand"
   (match_operand 0 "register_operand")