]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
(insn_name_ptr): Define for debugging.
authorRichard Kenner <kenner@gcc.gnu.org>
Mon, 6 Sep 1993 18:42:55 +0000 (14:42 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 6 Sep 1993 18:42:55 +0000 (14:42 -0400)
(walk_rtx, case MATCH_OP_DUP): Expand recog_dup_loc using XEXP not XVECEXP.

From-SVN: r5269

gcc/genextract.c

index 97ce57dee42b5e306ef0cc099e9d7f59cc9f2f1f..3234d4effe4721477ebff906b476d7d1ebd4ea15 100644 (file)
@@ -1,5 +1,5 @@
 /* Generate code from machine description to extract operands from insn as rtl.
-   Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc.
+   Copyright (C) 1987, 1991, 1992, 1993 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -33,6 +33,9 @@ struct obstack *rtl_obstack = &obstack;
 extern void free ();
 extern rtx read_rtx ();
 
+/* Names for patterns.  Need to allow linking with print-rtl.  */
+char **insn_name_ptr;
+
 /* This structure contains all the information needed to describe one
    set of extractions methods.  Each method may be used by more than 
    one pattern if the operands are in the same place.
@@ -216,13 +219,28 @@ walk_rtx (x, path)
       break;
 
     case MATCH_DUP:
-    case MATCH_OP_DUP:
     case MATCH_PAR_DUP:
       duplocs[dup_count] = copystr (path);
       dupnums[dup_count] = XINT (x, 0);
       dup_count++;
       break;
 
+    case MATCH_OP_DUP:
+      duplocs[dup_count] = copystr (path);
+      dupnums[dup_count] = XINT (x, 0);
+      dup_count++;
+      
+      newpath = (char *) alloca (depth + 2);
+      strcpy (newpath, path);
+      newpath[depth + 1] = 0;
+      
+      for (i = XVECLEN (x, 1) - 1; i >= 0; i--)
+        {
+         newpath[depth] = '0' + i;
+         walk_rtx (XVECEXP (x, 1, i), newpath);
+        }
+      return;
+      
     case MATCH_OPERATOR:
       oplocs[XINT (x, 0)] = copystr (path);
       op_count = MAX (op_count, XINT (x, 0) + 1);