on the outermost level.

Committed.

Richard.

2014-08-19  Richard Biener  <rguent...@suse.de>

        * genmatch.c (decision_tree::gen_gimple): Use a switch statement
        for the outermost level.
        * gimple-match.h (code_helper::get_rep): New method.

Index: gcc/genmatch.c
===================================================================
--- gcc/genmatch.c      (revision 214147)
+++ gcc/genmatch.c      (working copy)
@@ -1869,7 +1869,8 @@ decision_tree::gen_gimple (FILE *f)
       fprintf (f, ")\n");
       fprintf (f, "{\n");
 
-      bool first = true;
+      fprintf (f, "switch (code.get_rep())\n"
+              "{\n");
       for (unsigned i = 0; i < root->kids.length (); i++)
        {
          dt_operand *dop = static_cast<dt_operand *>(root->kids[i]);
@@ -1877,15 +1878,20 @@ decision_tree::gen_gimple (FILE *f)
          if (e->ops.length () != n)
            continue;
 
-         if (!first)
-           fprintf (f, "else ");
-         fprintf (f, "if (code == %s)\n", e->operation->op->id);
+         if (*e->operation->op == CONVERT_EXPR
+             || *e->operation->op == NOP_EXPR)
+           fprintf (f, "CASE_CONVERT:\n");
+         else
+           fprintf (f, "case %s%s:\n",
+                    is_a <fn_id *> (e->operation->op) ? "-" : "",
+                    e->operation->op->id);
          fprintf (f, "{\n");
          dop->gen_gimple_kids (f); 
+         fprintf (f, "  break;\n");
          fprintf (f, "}\n");
-
-         first = false;
        }
+      fprintf (f, "default:;\n"
+              "}\n");
 
       fprintf (f, "return false;\n");
       fprintf (f, "}\n");
Index: gcc/gimple-match.h
===================================================================
--- gcc/gimple-match.h  (revision 214097)
+++ gcc/gimple-match.h  (working copy)
@@ -35,6 +35,7 @@ public:
   operator built_in_function () const { return (built_in_function) -rep; }
   bool is_tree_code () const { return rep > 0; }
   bool is_fn_code () const { return rep < 0; }
+  int get_rep () const { return rep; }
 private:
   int rep;
 };

Reply via email to