OSDN Git Service

Backport from mainline
[pf3gnuchains/gcc-fork.git] / gcc / genpreds.c
index e042427..de91349 100644 (file)
@@ -2,7 +2,7 @@
    - prototype declarations for operand predicates (tm-preds.h)
    - function definitions of operand predicates, if defined new-style
      (insn-preds.c)
    - prototype declarations for operand predicates (tm-preds.h)
    - function definitions of operand predicates, if defined new-style
      (insn-preds.c)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
 
 This file is part of GCC.
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -67,9 +67,8 @@ validate_exp (rtx exp, const char *name, int lineno)
          {
            if (!ISDIGIT (*p) && !ISLOWER (*p))
              {
          {
            if (!ISDIGIT (*p) && !ISLOWER (*p))
              {
-               message_with_line (lineno, "%s: invalid character in path "
-                                  "string '%s'", name, XSTR (exp, 1));
-               have_error = 1;
+               error_with_line (lineno, "%s: invalid character in path "
+                                "string '%s'", name, XSTR (exp, 1));
                return true;
              }
          }
                return true;
              }
          }
@@ -82,10 +81,9 @@ validate_exp (rtx exp, const char *name, int lineno)
       return false;
 
     default:
       return false;
 
     default:
-      message_with_line (lineno,
-                        "%s: cannot use '%s' in a predicate expression",
-                        name, GET_RTX_NAME (GET_CODE (exp)));
-      have_error = 1;
+      error_with_line (lineno,
+                      "%s: cannot use '%s' in a predicate expression",
+                      name, GET_RTX_NAME (GET_CODE (exp)));
       return true;
     }
 }
       return true;
     }
 }
@@ -95,35 +93,7 @@ validate_exp (rtx exp, const char *name, int lineno)
 static void
 process_define_predicate (rtx defn, int lineno)
 {
 static void
 process_define_predicate (rtx defn, int lineno)
 {
-  struct pred_data *pred;
-  const char *p;
-
-  if (!ISALPHA (XSTR (defn, 0)[0]) && XSTR (defn, 0)[0] != '_')
-    goto bad_name;
-  for (p = XSTR (defn, 0) + 1; *p; p++)
-    if (!ISALNUM (*p) && *p != '_')
-      goto bad_name;
-
-  if (validate_exp (XEXP (defn, 1), XSTR (defn, 0), lineno))
-    return;
-
-  pred = XCNEW (struct pred_data);
-  pred->name = XSTR (defn, 0);
-  pred->exp = XEXP (defn, 1);
-  pred->c_block = XSTR (defn, 2);
-
-  if (GET_CODE (defn) == DEFINE_SPECIAL_PREDICATE)
-    pred->special = true;
-
-  add_predicate (pred);
-  return;
-
- bad_name:
-  message_with_line (lineno,
-                    "%s: predicate name must be a valid C function name",
-                    XSTR (defn, 0));
-  have_error = 1;
-  return;
+  validate_exp (XEXP (defn, 1), XSTR (defn, 0), lineno);
 }
 
 /* Given a predicate, if it has an embedded C block, write the block
 }
 
 /* Given a predicate, if it has an embedded C block, write the block
@@ -765,12 +735,11 @@ add_constraint (const char *name, const char *regclass,
   if (!ISALPHA (name[0]) && name[0] != '_')
     {
       if (name[1] == '\0')
   if (!ISALPHA (name[0]) && name[0] != '_')
     {
       if (name[1] == '\0')
-       message_with_line (lineno, "constraint name '%s' is not "
-                          "a letter or underscore", name);
+       error_with_line (lineno, "constraint name '%s' is not "
+                        "a letter or underscore", name);
       else
       else
-       message_with_line (lineno, "constraint name '%s' does not begin "
-                          "with a letter or underscore", name);
-      have_error = 1;
+       error_with_line (lineno, "constraint name '%s' does not begin "
+                        "with a letter or underscore", name);
       return;
     }
   for (p = name; *p; p++)
       return;
     }
   for (p = name; *p; p++)
@@ -780,11 +749,10 @@ add_constraint (const char *name, const char *regclass,
          need_mangled_name = true;
        else
          {
          need_mangled_name = true;
        else
          {
-           message_with_line (lineno,
-                              "constraint name '%s' must be composed of "
-                              "letters, digits, underscores, and "
-                              "angle brackets", name);
-           have_error = 1;
+           error_with_line (lineno,
+                            "constraint name '%s' must be composed of "
+                            "letters, digits, underscores, and "
+                            "angle brackets", name);
            return;
          }
       }
            return;
          }
       }
@@ -792,13 +760,12 @@ add_constraint (const char *name, const char *regclass,
   if (strchr (generic_constraint_letters, name[0]))
     {
       if (name[1] == '\0')
   if (strchr (generic_constraint_letters, name[0]))
     {
       if (name[1] == '\0')
-       message_with_line (lineno, "constraint letter '%s' cannot be "
-                          "redefined by the machine description", name);
+       error_with_line (lineno, "constraint letter '%s' cannot be "
+                        "redefined by the machine description", name);
       else
       else
-       message_with_line (lineno, "constraint name '%s' cannot be defined by "
-                          "the machine description, as it begins with '%c'",
-                          name, name[0]);
-      have_error = 1;
+       error_with_line (lineno, "constraint name '%s' cannot be defined by "
+                        "the machine description, as it begins with '%c'",
+                        name, name[0]);
       return;
     }
 
       return;
     }
 
@@ -817,25 +784,22 @@ add_constraint (const char *name, const char *regclass,
 
       if (!strcmp ((*iter)->name, name))
        {
 
       if (!strcmp ((*iter)->name, name))
        {
-         message_with_line (lineno, "redefinition of constraint '%s'", name);
+         error_with_line (lineno, "redefinition of constraint '%s'", name);
          message_with_line ((*iter)->lineno, "previous definition is here");
          message_with_line ((*iter)->lineno, "previous definition is here");
-         have_error = 1;
          return;
        }
       else if (!strncmp ((*iter)->name, name, (*iter)->namelen))
        {
          return;
        }
       else if (!strncmp ((*iter)->name, name, (*iter)->namelen))
        {
-         message_with_line (lineno, "defining constraint '%s' here", name);
+         error_with_line (lineno, "defining constraint '%s' here", name);
          message_with_line ((*iter)->lineno, "renders constraint '%s' "
                             "(defined here) a prefix", (*iter)->name);
          message_with_line ((*iter)->lineno, "renders constraint '%s' "
                             "(defined here) a prefix", (*iter)->name);
-         have_error = 1;
          return;
        }
       else if (!strncmp ((*iter)->name, name, namelen))
        {
          return;
        }
       else if (!strncmp ((*iter)->name, name, namelen))
        {
-         message_with_line (lineno, "constraint '%s' is a prefix", name);
+         error_with_line (lineno, "constraint '%s' is a prefix", name);
          message_with_line ((*iter)->lineno, "of constraint '%s' "
                             "(defined here)", (*iter)->name);
          message_with_line ((*iter)->lineno, "of constraint '%s' "
                             "(defined here)", (*iter)->name);
-         have_error = 1;
          return;
        }
     }
          return;
        }
     }
@@ -856,43 +820,36 @@ add_constraint (const char *name, const char *regclass,
                     GET_RTX_NAME (appropriate_code)))
        {
          if (name[1] == '\0')
                     GET_RTX_NAME (appropriate_code)))
        {
          if (name[1] == '\0')
-           message_with_line (lineno, "constraint letter '%c' is reserved "
-                              "for %s constraints",
-                              name[0], GET_RTX_NAME (appropriate_code));
+           error_with_line (lineno, "constraint letter '%c' is reserved "
+                            "for %s constraints",
+                            name[0], GET_RTX_NAME (appropriate_code));
          else
          else
-           message_with_line (lineno, "constraint names beginning with '%c' "
-                              "(%s) are reserved for %s constraints",
-                              name[0], name,
-                              GET_RTX_NAME (appropriate_code));
-
-         have_error = 1;
+           error_with_line (lineno, "constraint names beginning with '%c' "
+                            "(%s) are reserved for %s constraints",
+                            name[0], name, GET_RTX_NAME (appropriate_code));
          return;
        }
 
       if (is_memory)
        {
          if (name[1] == '\0')
          return;
        }
 
       if (is_memory)
        {
          if (name[1] == '\0')
-           message_with_line (lineno, "constraint letter '%c' cannot be a "
-                              "memory constraint", name[0]);
+           error_with_line (lineno, "constraint letter '%c' cannot be a "
+                            "memory constraint", name[0]);
          else
          else
-           message_with_line (lineno, "constraint name '%s' begins with '%c', "
-                              "and therefore cannot be a memory constraint",
-                              name, name[0]);
-
-         have_error = 1;
+           error_with_line (lineno, "constraint name '%s' begins with '%c', "
+                            "and therefore cannot be a memory constraint",
+                            name, name[0]);
          return;
        }
       else if (is_address)
        {
          if (name[1] == '\0')
          return;
        }
       else if (is_address)
        {
          if (name[1] == '\0')
-           message_with_line (lineno, "constraint letter '%c' cannot be a "
-                              "memory constraint", name[0]);
+           error_with_line (lineno, "constraint letter '%c' cannot be a "
+                            "memory constraint", name[0]);
          else
          else
-           message_with_line (lineno, "constraint name '%s' begins with '%c', "
-                              "and therefore cannot be a memory constraint",
-                              name, name[0]);
-
-         have_error = 1;
+           error_with_line (lineno, "constraint name '%s' begins with '%c', "
+                            "and therefore cannot be a memory constraint",
+                            name, name[0]);
          return;
        }
     }
          return;
        }
     }
@@ -1353,7 +1310,7 @@ write_insn_preds_c (void)
 #include \"flags.h\"\n\
 #include \"hard-reg-set.h\"\n\
 #include \"resource.h\"\n\
 #include \"flags.h\"\n\
 #include \"hard-reg-set.h\"\n\
 #include \"resource.h\"\n\
-#include \"toplev.h\"\n\
+#include \"diagnostic-core.h\"\n\
 #include \"reload.h\"\n\
 #include \"regs.h\"\n\
 #include \"tm-constrs.h\"\n");
 #include \"reload.h\"\n\
 #include \"regs.h\"\n\
 #include \"tm-constrs.h\"\n");
@@ -1409,7 +1366,7 @@ main (int argc, char **argv)
   progname = argv[0];
   if (argc <= 1)
     fatal ("no input file name");
   progname = argv[0];
   if (argc <= 1)
     fatal ("no input file name");
-  if (init_md_reader_args_cb (argc, argv, parse_option) != SUCCESS_EXIT_CODE)
+  if (!init_rtx_reader_args_cb (argc, argv, parse_option))
     return FATAL_EXIT_CODE;
 
   while ((defn = read_md_rtx (&pattern_lineno, &next_insn_code)) != 0)
     return FATAL_EXIT_CODE;
 
   while ((defn = read_md_rtx (&pattern_lineno, &next_insn_code)) != 0)