aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-09-18 17:47:46 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1996-09-18 17:47:46 -0400
commit86ff8230320d59988f7bb1fb8269bf067610c2f5 (patch)
treeaf19521c275926246148f9c2182173f3a6fdf310 /gcc
parentc3741733dbd0155d869ebfc9ead24a0d885fe27c (diff)
downloadgcc-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.md38
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))