aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-11-19 06:26:31 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-11-19 06:26:31 -0500
commit03af65c41e5e380c16816043be0b86433ea7842a (patch)
treefd9216f5846eeed5f3582e7bca639b19173db948 /gcc
parentab561e667b7da048887a49d6cd53e7817504d0a6 (diff)
downloadgcc-03af65c41e5e380c16816043be0b86433ea7842a.zip
gcc-03af65c41e5e380c16816043be0b86433ea7842a.tar.gz
gcc-03af65c41e5e380c16816043be0b86433ea7842a.tar.bz2
(sign_extend): Disable pattern with explicit SUBREG.
(cmov): Allow first operand of comparison to be zero, 2nd reg. From-SVN: r8524
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/alpha/alpha.md49
1 files changed, 27 insertions, 22 deletions
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index 611aeb4..459ca66 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -785,21 +785,24 @@
}"
[(set_attr "type" "iaddlog,shiftcm")])
-(define_insn ""
- [(set (match_operand:DI 0 "register_operand" "=r")
- (sign_extend:DI
- (subreg:SI (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
- (match_operand:DI 2 "const_int_operand" "P"))
- 0)))]
- "INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3"
- "*
-{
- if (operands[2] == const1_rtx)
- return \"addl %r1,%r1,%0\";
- else
- return \"s%P2addl %r1,0,%0\";
-}"
- [(set_attr "type" "iaddlog")])
+;; ??? The following pattern is made by combine, but earlier phases
+;; (specifically flow) can't handle it. This occurs in jump.c. Deal
+;; with this in a better way at some point.
+;;(define_insn ""
+;; [(set (match_operand:DI 0 "register_operand" "=r")
+;; (sign_extend:DI
+;; (subreg:SI (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
+;; (match_operand:DI 2 "const_int_operand" "P"))
+;; 0)))]
+;; "INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3"
+;; "*
+;;{
+;; if (operands[2] == const1_rtx)
+;; return \"addl %r1,%r1,%0\";
+;; else
+;; return \"s%P2addl %r1,0,%0\";
+;; }"
+;; [(set_attr "type" "iaddlog")])
(define_insn "lshrdi3"
[(set (match_operand:DI 0 "register_operand" "=r")
@@ -1302,17 +1305,19 @@
[(set_attr "type" "icmp")])
(define_insn ""
- [(set (match_operand:DI 0 "register_operand" "=r,r")
+ [(set (match_operand:DI 0 "register_operand" "=r,r,r,r")
(if_then_else:DI
(match_operator 2 "signed_comparison_operator"
- [(match_operand:DI 3 "reg_or_0_operand" "rJ,rJ")
- (const_int 0)])
- (match_operand:DI 1 "reg_or_8bit_operand" "rI,0")
- (match_operand:DI 4 "reg_or_8bit_operand" "0,rI")))]
- ""
+ [(match_operand:DI 3 "reg_or_0_operand" "rJ,rJ,J,J")
+ (match_operand:DI 4 "reg_or_0_operand" "J,J,rJ,rJ")])
+ (match_operand:DI 1 "reg_or_8bit_operand" "rI,0,rI,0")
+ (match_operand:DI 5 "reg_or_8bit_operand" "0,rI,0,rI")))]
+ "operands[3] == const0_rtx || operands[4] == const0_rtx"
"@
cmov%C2 %r3,%1,%0
- cmov%D2 %r3,%4,%0")
+ cmov%D2 %r3,%5,%0
+ cmov%c2 %r4,%1,%0
+ cmov%d2 %r4,%5,%0")
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r,r")