OSDN Git Service

* genoutput.c (validate_insn_operands): New.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Nov 2000 21:31:47 +0000 (21:31 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Nov 2000 21:31:47 +0000 (21:31 +0000)
        (gen_insn): Call it.

        * config/alpha/alpha.md (divmodsi_internal): Renumber operands.
        (divmoddi_internal): Likewise.
        * config/arm/arm.md (andsi3_compare0_scratch): Likewise.
        * config/i960/i960.md (branch patterns): Likewise.
        * config/ia64/ia64.md (tbit_and_0): Likewise.
        (tbit_and_1, tbit_or_0, tbit_or_1): Likewise.
        * config/m68k/m68k.md (zero_extract memory patterns): Likewise.
        * config/mips/mips.md (divmodsi4_internal): Likewise.
        (divmoddi4_internal): Likewise.
        * config/rs6000/rs6000.md (call patterns): Likewise.
        * config/sh/sh.md (movsi_y): Likewise.
        * config/sparc/sparc.md: Comment out if 0 v8p shift pattern.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37828 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/alpha/alpha.md
gcc/config/arm/arm.md
gcc/config/i960/i960.md
gcc/config/ia64/ia64.md
gcc/config/m68k/m68k.md
gcc/config/mips/mips.md
gcc/config/rs6000/rs6000.md
gcc/config/sh/sh.md
gcc/config/sparc/sparc.md
gcc/genoutput.c

index 9bae5dd..18b1d15 100644 (file)
@@ -1,5 +1,23 @@
 2000-11-28  Richard Henderson  <rth@redhat.com>
 
+       * genoutput.c (validate_insn_operands): New.
+       (gen_insn): Call it.
+
+       * config/alpha/alpha.md (divmodsi_internal): Renumber operands.
+       (divmoddi_internal): Likewise.
+       * config/arm/arm.md (andsi3_compare0_scratch): Likewise.
+       * config/i960/i960.md (branch patterns): Likewise.
+       * config/ia64/ia64.md (tbit_and_0): Likewise.
+       (tbit_and_1, tbit_or_0, tbit_or_1): Likewise.
+       * config/m68k/m68k.md (zero_extract memory patterns): Likewise.
+       * config/mips/mips.md (divmodsi4_internal): Likewise.
+       (divmoddi4_internal): Likewise.
+       * config/rs6000/rs6000.md (call patterns): Likewise.
+       * config/sh/sh.md (movsi_y): Likewise.
+       * config/sparc/sparc.md: Comment out if 0 v8p shift pattern.
+
+2000-11-28  Richard Henderson  <rth@redhat.com>
+
        * config.gcc: Kill residual pyramid support.
 
 2000-11-28  Neil Booth  <neilb@earthling.net>
index 028ce48..b50d267 100644 (file)
 ;; expanded by the assembler.
 (define_insn "*divmodsi_internal"
   [(set (reg:DI 27)
-       (sign_extend:DI (match_operator:SI 1 "divmod_operator"
+       (sign_extend:DI (match_operator:SI 0 "divmod_operator"
                        [(reg:DI 24) (reg:DI 25)])))
    (clobber (reg:DI 23))
    (clobber (reg:DI 28))]
   "!TARGET_OPEN_VMS"
-  "%E1 $24,$25,$27"
+  "%E0 $24,$25,$27"
   [(set_attr "type" "jsr")
    (set_attr "length" "8")])
 
 (define_insn "*divmoddi_internal"
   [(set (reg:DI 27)
-       (match_operator:DI 1 "divmod_operator"
+       (match_operator:DI 0 "divmod_operator"
                        [(reg:DI 24) (reg:DI 25)]))
    (clobber (reg:DI 23))
    (clobber (reg:DI 28))]
   "!TARGET_OPEN_VMS"
-  "%E1 $24,$25,$27"
+  "%E0 $24,$25,$27"
   [(set_attr "type" "jsr")
    (set_attr "length" "8")])
 \f
index 15c2cd9..dc99511 100644 (file)
         (and:SI (match_operand:SI 0 "s_register_operand" "r,r")
                 (match_operand:SI 1 "arm_not_operand" "rI,K"))
         (const_int 0)))
-   (clobber (match_scratch:SI 3 "=X,r"))]
+   (clobber (match_scratch:SI 2 "=X,r"))]
   "TARGET_ARM"
   "@
    tst%?\\t%0, %1
-   bic%?s\\t%3, %0, #%B1"
+   bic%?s\\t%2, %0, #%B1"
   [(set_attr "conds" "set")]
 )
 
index 600865b..5b42387 100644 (file)
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (ne (sign_extract:SI (match_operand:SI 1 "register_operand" "d")
+        (ne (sign_extract:SI (match_operand:SI 0 "register_operand" "d")
                              (const_int 1)
-                             (match_operand:SI 2 "arith_operand" "dI"))
+                             (match_operand:SI 1 "arith_operand" "dI"))
             (const_int 0))
-        (label_ref (match_operand 3 "" ""))
+        (label_ref (match_operand 2 "" ""))
         (pc)))]
   ""
-  "bbs%+       %2,%1,%l3"
+  "bbs%+       %1,%0,%l2"
   [(set_attr "type" "branch")])
 
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (eq (sign_extract:SI (match_operand:SI 1 "register_operand" "d")
+        (eq (sign_extract:SI (match_operand:SI 0 "register_operand" "d")
                              (const_int 1)
-                             (match_operand:SI 2 "arith_operand" "dI"))
+                             (match_operand:SI 1 "arith_operand" "dI"))
             (const_int 0))
-        (label_ref (match_operand 3 "" ""))
+        (label_ref (match_operand 2 "" ""))
         (pc)))]
   ""
-  "bbc%+       %2,%1,%l3"
+  "bbc%+       %1,%0,%l2"
   [(set_attr "type" "branch")])
 
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (ne (zero_extract:SI (match_operand:SI 1 "register_operand" "d")
+        (ne (zero_extract:SI (match_operand:SI 0 "register_operand" "d")
                              (const_int 1)
-                             (match_operand:SI 2 "arith_operand" "dI"))
+                             (match_operand:SI 1 "arith_operand" "dI"))
             (const_int 0))
-        (label_ref (match_operand 3 "" ""))
+        (label_ref (match_operand 2 "" ""))
         (pc)))]
   ""
-  "bbs%+       %2,%1,%l3"
+  "bbs%+       %1,%0,%l2"
   [(set_attr "type" "branch")])
 
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (eq (zero_extract:SI (match_operand:SI 1 "register_operand" "d")
+        (eq (zero_extract:SI (match_operand:SI 0 "register_operand" "d")
                              (const_int 1)
-                             (match_operand:SI 2 "arith_operand" "dI"))
+                             (match_operand:SI 1 "arith_operand" "dI"))
             (const_int 0))
-        (label_ref (match_operand 3 "" ""))
+        (label_ref (match_operand 2 "" ""))
         (pc)))]
   ""
-  "bbc%+       %2,%1,%l3"
+  "bbc%+       %1,%0,%l2"
   [(set_attr "type" "branch")])
 
 ;; ??? These will never match.  The LOG_LINKs necessary to make these match
index 614fd38..a79b879 100644 (file)
        (and:BI (ne:BI (and:DI (match_operand:DI 1 "gr_register_operand" "r")
                               (const_int 1))
                       (const_int 0))
-               (match_operand:BI 3 "register_operand" "0")))]
+               (match_operand:BI 2 "register_operand" "0")))]
   ""
   "tbit.nz.and.orcm %0, %I0 = %1, 0"
   [(set_attr "itanium_class" "tbit")])
        (and:BI (eq:BI (and:DI (match_operand:DI 1 "gr_register_operand" "r")
                               (const_int 1))
                       (const_int 0))
-               (match_operand:BI 3 "register_operand" "0")))]
+               (match_operand:BI 2 "register_operand" "0")))]
   ""
   "tbit.z.and.orcm %0, %I0 = %1, 0"
   [(set_attr "itanium_class" "tbit")])
        (ior:BI (ne:BI (and:DI (match_operand:DI 1 "gr_register_operand" "r")
                               (const_int 1))
                       (const_int 0))
-               (match_operand:BI 3 "register_operand" "0")))]
+               (match_operand:BI 2 "register_operand" "0")))]
   ""
   "tbit.nz.or.andcm %0, %I0 = %1, 0"
   [(set_attr "itanium_class" "tbit")])
        (ior:BI (eq:BI (and:DI (match_operand:DI 1 "gr_register_operand" "r")
                               (const_int 1))
                       (const_int 0))
-               (match_operand:BI 3 "register_operand" "0")))]
+               (match_operand:BI 2 "register_operand" "0")))]
   ""
   "tbit.z.or.andcm %0, %I0 = %1, 0"
   [(set_attr "itanium_class" "tbit")])
index 4be439c..75c5525 100644 (file)
 (define_insn ""
   [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+o")
                         (const_int 32)
-                        (match_operand:SI 2 "const_int_operand" "n"))
-       (match_operand:SI 3 "general_src_operand" "rmSi"))]
+                        (match_operand:SI 1 "const_int_operand" "n"))
+       (match_operand:SI 2 "general_src_operand" "rmSi"))]
   "TARGET_68020 && TARGET_BITFIELD
-   && (INTVAL (operands[2]) % 8) == 0
+   && (INTVAL (operands[1]) % 8) == 0
    && ! mode_dependent_address_p (XEXP (operands[0], 0))"
   "*
 {
   operands[0]
-    = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
+    = adj_offsettable_operand (operands[0], INTVAL (operands[1]) / 8);
 
-  return \"move%.l %3,%0\";
+  return \"move%.l %2,%0\";
 }")
 
 (define_insn ""
   [(set (match_operand:SI 0 "general_operand" "=rm")
        (zero_extract:SI (match_operand:QI 1 "memory_src_operand" "oS")
                         (const_int 32)
-                        (match_operand:SI 3 "const_int_operand" "n")))]
+                        (match_operand:SI 2 "const_int_operand" "n")))]
   "TARGET_68020 && TARGET_BITFIELD
-   && (INTVAL (operands[3]) % 8) == 0
+   && (INTVAL (operands[2]) % 8) == 0
    && ! mode_dependent_address_p (XEXP (operands[1], 0))"
   "*
 {
   operands[1]
-    = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
+    = adj_offsettable_operand (operands[1], INTVAL (operands[2]) / 8);
 
   return \"move%.l %1,%0\";
 }")
   [(set (match_operand:SI 0 "general_operand" "=rm")
        (sign_extract:SI (match_operand:QI 1 "memory_src_operand" "oS")
                         (const_int 32)
-                        (match_operand:SI 3 "const_int_operand" "n")))]
+                        (match_operand:SI 2 "const_int_operand" "n")))]
   "TARGET_68020 && TARGET_BITFIELD
-   && (INTVAL (operands[3]) % 8) == 0
+   && (INTVAL (operands[2]) % 8) == 0
    && ! mode_dependent_address_p (XEXP (operands[1], 0))"
   "*
 {
   operands[1]
-    = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
+    = adj_offsettable_operand (operands[1], INTVAL (operands[2]) / 8);
 
   return \"move%.l %1,%0\";
 }")
index 06d4c38..a37464e 100644 (file)
    (set (match_operand:SI 3 "register_operand" "=h")
        (mod:SI (match_dup 1)
                (match_dup 2)))
-   (clobber (match_scratch:SI 6 "=a"))]
+   (clobber (match_scratch:SI 4 "=a"))]
   "optimize"
   "div\\t$0,%1,%2"
   [(set_attr "type"    "idiv")
    (set (match_operand:DI 3 "register_operand" "=h")
        (mod:DI (match_dup 1)
                (match_dup 2)))
-   (clobber (match_scratch:DI 6 "=a"))]
+   (clobber (match_scratch:DI 4 "=a"))]
   "TARGET_64BIT && optimize"
   "ddiv\\t$0,%1,%2"
   [(set_attr "type"    "idiv")
    (set (match_operand:SI 3 "register_operand" "=h")
        (umod:SI (match_dup 1)
                 (match_dup 2)))
-   (clobber (match_scratch:SI 6 "=a"))]
+   (clobber (match_scratch:SI 4 "=a"))]
   "optimize"
   "divu\\t$0,%1,%2"
   [(set_attr "type"    "idiv")
    (set (match_operand:DI 3 "register_operand" "=h")
        (umod:DI (match_dup 1)
                 (match_dup 2)))
-   (clobber (match_scratch:DI 6 "=a"))]
+   (clobber (match_scratch:DI 4 "=a"))]
   "TARGET_64BIT && optimize"
   "ddivu\\t$0,%1,%2"
   [(set_attr "type"    "idiv")
index e725f43..54ecc5f 100644 (file)
@@ -9552,7 +9552,7 @@ operands[2] = GEN_INT (INTVAL (operands[1]) >> 32);
    (use (reg:SI 11))
    (set (reg:SI 2)
        (mem:SI (plus:SI (reg:SI 1) (const_int 20))))
-   (clobber (match_scratch:SI 3 "=l"))]
+   (clobber (match_scratch:SI 2 "=l"))]
   "TARGET_32BIT && DEFAULT_ABI == ABI_AIX"
   "b%T0l\;{l|lwz} 2,20(1)"
   [(set_attr "type" "jmpreg")
@@ -9577,7 +9577,7 @@ operands[2] = GEN_INT (INTVAL (operands[1]) >> 32);
    (use (reg:DI 11))
    (set (reg:DI 2)
        (mem:DI (plus:DI (reg:DI 1) (const_int 40))))
-   (clobber (match_scratch:SI 3 "=l"))]
+   (clobber (match_scratch:SI 2 "=l"))]
   "TARGET_64BIT && DEFAULT_ABI == ABI_AIX"
   "b%T0l\;ld 2,40(1)"
   [(set_attr "type" "jmpreg")
@@ -12568,7 +12568,7 @@ operands[2] = GEN_INT (INTVAL (operands[1]) >> 32);
   [(set (match_operand:CCEQ 0 "cc_reg_operand" "=y")
        (compare:CCEQ (match_operator:SI 2 
                                      "branch_positive_comparison_operator"
-                                     [(match_operand 3
+                                     [(match_operand 1
                                                      "cc_reg_operand" "y")
                                       (const_int 0)])
                      (const_int 0)))]
index f710604..de1f553 100644 (file)
 (define_insn "*movsi_y"
   [(set (match_operand:SI 0 "register_operand" "=y,y")
        (match_operand:SI 1 "immediate_operand" "Qi,I"))
-   (clobber (match_scratch:SI 3 "=&z,r"))]
+   (clobber (match_scratch:SI 2 "=&z,r"))]
   "TARGET_SH3E
    && (reload_in_progress || reload_completed)"
   "#"
index 21cf0a3..b15c39e 100644 (file)
 ;; Optimize (1LL<<x)-1
 ;; XXX this also needs to be fixed to handle equal subregs
 ;; XXX first before we could re-enable it.
-(define_insn ""
-  [(set (match_operand:DI 0 "register_operand" "=h")
-       (plus:DI (ashift:DI (const_int 1)
-                           (match_operand:SI 2 "arith_operand" "rI"))
-                (const_int -1)))]
-  "0 && TARGET_V8PLUS"
-  "*
-{
-  if (GET_CODE (operands[2]) == REG && REGNO (operands[2]) == REGNO (operands[0]))
-    return \"mov\\t1, %L0\;sllx\\t%L0, %2, %L0\;sub\\t%L0, 1, %L0\;srlx\\t%L0, 32, %H0\";
-  return \"mov\\t1, %H0\;sllx\\t%H0, %2, %L0\;sub\\t%L0, 1, %L0\;srlx\\t%L0, 32, %H0\";
-}"
-  [(set_attr "length" "4")])
+;(define_insn ""
+;  [(set (match_operand:DI 0 "register_operand" "=h")
+;      (plus:DI (ashift:DI (const_int 1)
+;                          (match_operand:SI 1 "arith_operand" "rI"))
+;               (const_int -1)))]
+;  "0 && TARGET_V8PLUS"
+;  "*
+;{
+;  if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) == REGNO (operands[0]))
+;    return \"mov\\t1, %L0\;sllx\\t%L0, %1, %L0\;sub\\t%L0, 1, %L0\;srlx\\t%L0, 32, %H0\";
+;  return \"mov\\t1, %H0\;sllx\\t%H0, %1, %L0\;sub\\t%L0, 1, %L0\;srlx\\t%L0, 32, %H0\";
+;}"
+;  [(set_attr "length" "4")])
 
 (define_insn "*cmp_cc_ashift_1"
   [(set (reg:CC_NOOV 100)
index 57a9028..a5674c9 100644 (file)
@@ -182,6 +182,7 @@ static int compare_operands PARAMS ((struct operand_data *,
 static void place_operands PARAMS ((struct data *));
 static void process_template PARAMS ((struct data *, const char *));
 static void validate_insn_alternatives PARAMS ((struct data *));
+static void validate_insn_operands PARAMS ((struct data *));
 static void gen_insn PARAMS ((rtx, int));
 static void gen_peephole PARAMS ((rtx, int));
 static void gen_expand PARAMS ((rtx, int));
@@ -737,6 +738,22 @@ validate_insn_alternatives (d)
   /* Record the insn's overall number of alternatives.  */
   d->n_alternatives = n;
 }
+
+/* Verify that there are no gaps in operand numbers for INSNs.  */
+
+static void
+validate_insn_operands (d)
+     struct data *d;
+{
+  int i;
+
+  for (i = 0; i < d->n_operands; ++i)
+    if (d->operand[i].seen == 0)
+      {
+       message_with_line (d->lineno, "missing operand %d", i);
+       have_error = 1;
+      }
+}
 \f
 /* Look at a define_insn just read.  Assign its code number.  Record
    on idata the template and the number of arguments.  If the insn has
@@ -774,6 +791,7 @@ gen_insn (insn, lineno)
   d->n_operands = max_opno + 1;
   d->n_dups = num_dups;
 
+  validate_insn_operands (d);
   validate_insn_alternatives (d);
   place_operands (d);
   process_template (d, XSTR (insn, 3));