diff mbox

[match-and-simplify] Use a switch (code) for the GIMPLE code gen

Message ID alpine.LSU.2.11.1408191547270.20733@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Biener Aug. 19, 2014, 1:48 p.m. UTC
on the outermost level.

Committed.

Richard.

2014-08-19  Richard Biener  <rguenther@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.
diff mbox

Patch

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;
 };