aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-03-01 07:29:39 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-03-01 07:29:39 -0500
commit5e2a751adc022f8afeffcb22182d79ff6e1d1cc2 (patch)
treeb274a5cd42bcde7747207b382abebd124d42a5bd
parent26915fa9bcd03bec9a39835b075a605309e1e9d6 (diff)
downloadgcc-5e2a751adc022f8afeffcb22182d79ff6e1d1cc2.zip
gcc-5e2a751adc022f8afeffcb22182d79ff6e1d1cc2.tar.gz
gcc-5e2a751adc022f8afeffcb22182d79ff6e1d1cc2.tar.bz2
Add three special-cases of CMP insns against zero.
From-SVN: r3573
-rw-r--r--gcc/config/alpha/alpha.md27
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index 849f404..a9c2586 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -1128,6 +1128,33 @@
"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)))]
+ ""
+ "cmple $31,%1,%0"
+ [(set_attr "type" "icmp")])
+
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r,r")
(if_then_else:DI