diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-09-18 17:47:46 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-09-18 17:47:46 -0400 |
commit | 86ff8230320d59988f7bb1fb8269bf067610c2f5 (patch) | |
tree | af19521c275926246148f9c2182173f3a6fdf310 /gcc | |
parent | c3741733dbd0155d869ebfc9ead24a0d885fe27c (diff) | |
download | gcc-86ff8230320d59988f7bb1fb8269bf067610c2f5.zip gcc-86ff8230320d59988f7bb1fb8269bf067610c2f5.tar.gz gcc-86ff8230320d59988f7bb1fb8269bf067610c2f5.tar.bz2 |
Add pattern for b%c with swapped comparisons with 0.
Delete three unnamed cmp insns that are strict subsets of new insn.
From-SVN: r12741
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/alpha/alpha.md | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index 873a726..5ece607 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -1654,31 +1654,13 @@ "cmp%C1 %r2,%3,%0" [(set_attr "type" "icmp")]) -;; There are three important special-case that don't fit the above pattern -;; but which we want to handle here. - -(define_insn "" - [(set (match_operand:DI 0 "register_operand" "=r") - (ne:DI (match_operand:DI 1 "register_operand" "r") - (const_int 0)))] - "" - "cmpult $31,%1,%0" - [(set_attr "type" "icmp")]) - -(define_insn "" - [(set (match_operand:DI 0 "register_operand" "=r") - (gt:DI (match_operand:DI 1 "register_operand" "r") - (const_int 0)))] - "" - "cmplt $31,%1,%0" - [(set_attr "type" "icmp")]) - (define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") - (ge:DI (match_operand:DI 1 "register_operand" "r") - (const_int 0)))] + (match_operator:DI 1 "alpha_swapped_comparison_operator" + [(match_operand:DI 2 "reg_or_8bit_operand" "rI") + (match_operand:DI 3 "reg_or_0_operand" "rJ")]))] "" - "cmple $31,%1,%0" + "cmp%c1 $r3,%2,%0" [(set_attr "type" "icmp")]) ;; This pattern exists so conditional moves of SImode values are handled. @@ -2004,6 +1986,18 @@ (define_insn "" [(set (pc) (if_then_else + (match_operator 1 "signed_comparison_operator" + [(const_int 0) + (match_operand:DI 2 "register_operand" "r")]) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "b%c1 %2,%0" + [(set_attr "type" "ibr")]) + +(define_insn "" + [(set (pc) + (if_then_else (ne (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (const_int 1) (const_int 0)) |