i86: tighten predicates
authorH. Peter Anvin <hpa@zytor.com>
Tue, 14 Aug 2007 06:56:23 +0000 (23:56 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Wed, 15 Aug 2007 03:10:38 +0000 (20:10 -0700)
Tighten predicates to avoid unnecessary reloads

gcc/config/i86/i86.md

index 0c676fb..f67d6e7 100644 (file)
@@ -87,7 +87,7 @@
 
 
 (define_expand "movhi"
-  [(set (match_operand:HI 0 "general_operand" "")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "")
        (match_operand:HI 1 "general_operand" ""))]
   ""
   "
 
 (define_insn "addqi3"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=r,=rm")
-       (plus:QI (match_operand:QI 1 "general_operand" "0,0")
+       (plus:QI (match_operand:QI 1 "nonimmediate_operand" "0,0")
                 (match_operand:QI 2 "general_operand" "rm,ri")))]
   ""
 {
 
 (define_insn "addsi3"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,=rm")
-       (plus:SI (match_operand:SI 1 "general_operand" "0,0")
+       (plus:SI (match_operand:SI 1 "nonimmediate_operand" "0,0")
                 (match_operand:SI 2 "general_operand" "rm,ri")))]
   ""
 {
 
 (define_insn "subhi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,=rm")
-       (minus:HI (match_operand:HI 1 "general_operand" "0,0")
+       (minus:HI (match_operand:HI 1 "nonimmediate_operand" "0,0")
                  (match_operand:HI 2 "general_operand" "rm,ri")))]
   ""
   "sub %0,%2"
 
 (define_insn "mulhi3"
   [(set (match_operand:HI 0 "register_operand"     "=r,r,r,r")
-    (mult:HI (match_operand:HI 1 "register_operand" "0,0,r,m")
-      (match_operand:HI 2 "nonimmediate_operand"    "r,m,i,i")))]
+    (mult:HI (match_operand:HI 1 "nonimmediate_operand" "0,0,r,m")
+      (match_operand:HI 2 "general_operand"    "r,m,i,i")))]
   ""
   "@
    imul        %0,%2
 
 (define_insn "mulsi3"
   [(set (match_operand:SI 0 "register_operand"     "=r,r,r,r")
-    (mult:SI (match_operand:SI 1 "register_operand" "0,0,r,m")
-      (match_operand:SI 2 "nonimmediate_operand"    "r,m,i,i")))]
+    (mult:SI (match_operand:SI 1 "nonimmediate_operand" "0,0,r,m")
+      (match_operand:SI 2 "general_operand"    "r,m,i,i")))]
   ""
   "@
    imul        %0,%2
 
 (define_insn "neghi2"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
-       (not:HI (match_operand:HI 1 "general_operand" "0")))]
+       (not:HI (match_operand:HI 1 "nonimmediate_operand" "0")))]
   ""
   "neg %0"
   )
 
 (define_insn "one_cmplhi2"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
-       (neg:HI (match_operand:HI 1 "general_operand" "0")))]
+       (neg:HI (match_operand:HI 1 "nonimmediate_operand" "0")))]
   ""
   "not %0"
   )
 
 (define_insn "andhi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,rm")
-       (and:HI (match_operand:HI 1 "general_operand" "0,0")
+       (and:HI (match_operand:HI 1 "nonimmediate_operand" "0,0")
                 (match_operand:HI 2 "general_operand" "rm,ri")))]
   ""
   "and %0,%2"
 
 (define_insn "iorhi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,rm")
-       (ior:HI (match_operand:HI 1 "general_operand" "0,0")
+       (ior:HI (match_operand:HI 1 "nonimmediate_operand" "0,0")
                 (match_operand:HI 2 "general_operand" "rm,ri")))]
   ""
   "or  %0,%2"
 
 (define_insn "xorhi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,rm")
-       (xor:HI (match_operand:HI 1 "general_operand" "0,0")
+       (xor:HI (match_operand:HI 1 "nonimmediate_operand" "0,0")
                 (match_operand:HI 2 "general_operand" "rm,ri")))]
   ""
   "xor %0,%2"
 
 (define_insn "ashlhi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,rm")
-       (ashift:HI (match_operand:HI 1 "general_operand" "0,0")
-                  (match_operand:QI 2 "general_operand" "I,c")))]
+       (ashift:HI (match_operand:HI 1 "nonimmediate_operand" "0,0")
+                  (match_operand:QI 2 "nonmemory_operand" "I,c")))]
   ""
-  "sal %0,%2"
+  "shl %0,%2"
   )
 
 (define_insn "cmphi"