rtl.h (read_rtx): Change prototype.
authorRichard Sandiford <rsandifo@redhat.com>
Fri, 27 Aug 2004 10:12:51 +0000 (10:12 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 27 Aug 2004 10:12:51 +0000 (10:12 +0000)
* rtl.h (read_rtx): Change prototype.
* read-rtl.c (read_rtx): Provide the caller with both an rtx and a
line number.  Return true on success.
* gensupport.c (process_include, init_md_reader_args_cb): Adjust
callers accordingly.

From-SVN: r86657

gcc/ChangeLog
gcc/gensupport.c
gcc/read-rtl.c
gcc/rtl.h

index 84af91f9e9e3d7d98a39926ba6acd474c49f3fa0..62936b89e3591139d855a892b38f566abf49a6ac 100644 (file)
@@ -1,3 +1,11 @@
+2004-08-26  Richard Sandiford  <rsandifo@redhat.com>
+
+       * rtl.h (read_rtx): Change prototype.
+       * read-rtl.c (read_rtx): Provide the caller with both an rtx and a
+       line number.  Return true on success.
+       * gensupport.c (process_include, init_md_reader_args_cb): Adjust
+       callers accordingly.
+
 2004-08-26  Richard Henderson  <rth@redhat.com>
 
        * c-typeck.c (build_offsetof): Remove.
index 618e1a271a5840657eec27eb8a54f40886f310e2..8767068f223616b240568b97247514bbf3f68c8e 100644 (file)
@@ -246,20 +246,8 @@ process_include (rtx desc, int lineno)
   read_rtx_lineno = 1;
 
   /* Read the entire file.  */
-  while (1)
-    {
-      rtx desc;
-      int c;
-
-      c = read_skip_spaces (input_file);
-      if (c == EOF)
-       break;
-
-      ungetc (c, input_file);
-      lineno = read_rtx_lineno;
-      desc = read_rtx (input_file);
-      process_rtx (desc, lineno);
-    }
+  while (read_rtx (input_file, &desc, &lineno))
+    process_rtx (desc, lineno);
 
   /* Do not free pathname.  It is attached to the various rtx queue
      elements.  */
@@ -911,9 +899,10 @@ int
 init_md_reader_args_cb (int argc, char **argv, bool (*parse_opt)(const char *))
 {
   FILE *input_file;
-  int i;
+  int i, lineno;
   size_t ix;
   char *lastsl;
+  rtx desc;
 
   for (i = 1; i < argc; i++)
     {
@@ -991,19 +980,8 @@ init_md_reader_args_cb (int argc, char **argv, bool (*parse_opt)(const char *))
   sequence_num = 0;
 
   /* Read the entire file.  */
-  while (1)
-    {
-      rtx desc;
-      int lineno;
-      int c = read_skip_spaces (input_file);
-      if (c == EOF)
-        break;
-
-      ungetc (c, input_file);
-      lineno = read_rtx_lineno;
-      desc = read_rtx (input_file);
-      process_rtx (desc, lineno);
-    }
+  while (read_rtx (input_file, &desc, &lineno))
+    process_rtx (desc, lineno);
   fclose (input_file);
 
   /* Process define_cond_exec patterns.  */
index fe0c7a4044ae56efe466cd5f24b44c6a61b67353..db0b3d7d3fb66ebdf4bfee03dac5111bff3928fe 100644 (file)
@@ -1066,16 +1066,20 @@ check_code_macro (struct mapping *macro, FILE *infile)
   bellwether_codes[macro->index] = bellwether;
 }
 
-/* Read an rtx in printed representation from INFILE
-   and return an actual rtx in core constructed accordingly.
+/* Read an rtx in printed representation from INFILE and store its
+   core representation in *X.  Also store the line number of the
+   opening '(' in *LINENO.  Return true on success or false if the
+   end of file has been reached.
+
    read_rtx is not used in the compiler proper, but rather in
    the utilities gen*.c that construct C code from machine descriptions.  */
 
-rtx
-read_rtx (FILE *infile)
+bool
+read_rtx (FILE *infile, rtx *x, int *lineno)
 {
   static rtx queue_head, queue_next;
-  rtx return_rtx;
+  static int queue_lineno;
+  int c;
 
   /* Do one-time initialization.  */
   if (queue_head == 0)
@@ -1087,8 +1091,13 @@ read_rtx (FILE *infile)
 
   if (queue_next == 0)
     {
-      queue_next = queue_head;
+      c = read_skip_spaces (infile);
+      if (c == EOF)
+       return false;
+      ungetc (c, infile);
 
+      queue_next = queue_head;
+      queue_lineno = read_rtx_lineno;
       XEXP (queue_next, 0) = read_rtx_1 (infile);
       XEXP (queue_next, 1) = 0;
 
@@ -1096,10 +1105,11 @@ read_rtx (FILE *infile)
       htab_traverse (codes.macros, apply_macro_traverse, queue_next);
     }
 
-  return_rtx = XEXP (queue_next, 0);
+  *x = XEXP (queue_next, 0);
+  *lineno = queue_lineno;
   queue_next = XEXP (queue_next, 1);
 
-  return return_rtx;
+  return true;
 }
 
 /* Subroutine of read_rtx that reads one construct from INFILE but
index 99cb3cf7aa99860cc47a0d46e5d89cc49997f79b..f8095192ec9f9ffe7963d02989716f86bc0955b5 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2147,7 +2147,7 @@ struct md_constant { char *name, *value; };
 
 /* In read-rtl.c */
 extern int read_skip_spaces (FILE *);
-extern rtx read_rtx (FILE *);
+extern bool read_rtx (FILE *, rtx *, int *);
 extern const char *read_rtx_filename;
 extern int read_rtx_lineno;