This removes the non-DT matching code. Committed.
Richard. 2014-06-23 Richard Biener <rguent...@suse.de> * genmatch.c (operand::gen_gimple_match): Remove. (predicate::gen_gimple_match): Likewise. (expr::gen_gimple_match): Likewise. (c_expr::gen_gimple_match): Likewise. (capture::gen_gimple_match): Likewise. (write_nary_simplifiers): Remove. Index: gcc/genmatch.c =================================================================== --- gcc/genmatch.c (revision 211891) +++ gcc/genmatch.c (working copy) @@ -204,7 +204,6 @@ struct operand { enum op_type { OP_PREDICATE, OP_EXPR, OP_CAPTURE, OP_C_EXPR }; operand (enum op_type type_) : type (type_) {} enum op_type type; - virtual void gen_gimple_match (FILE *f, const char *, const char * = NULL) = 0; virtual void gen_gimple_transform (FILE *f, const char *, const char *) = 0; }; @@ -212,7 +211,6 @@ struct predicate : public operand { predicate (const char *ident_) : operand (OP_PREDICATE), ident (ident_) {} const char *ident; - virtual void gen_gimple_match (FILE *f, const char *, const char *); virtual void gen_gimple_transform (FILE *, const char *, const char *) { gcc_unreachable (); } }; @@ -230,7 +228,6 @@ struct expr : public operand void append_op (operand *op) { ops.safe_push (op); } e_operation *operation; vec<operand *> ops; - virtual void gen_gimple_match (FILE *f, const char *, const char *); virtual void gen_gimple_transform (FILE *f, const char *, const char *); }; @@ -243,7 +240,6 @@ struct c_expr : public operand vec<cpp_token> code; unsigned nr_stmts; char *fname; - virtual void gen_gimple_match (FILE *, const char *, const char *) { gcc_unreachable (); } virtual void gen_gimple_transform (FILE *f, const char *, const char *); }; @@ -253,7 +249,6 @@ struct capture : public operand : operand (OP_CAPTURE), where (where_), what (what_) {} const char *where; operand *what; - virtual void gen_gimple_match (FILE *f, const char *, const char *); virtual void gen_gimple_transform (FILE *f, const char *, const char *); }; @@ -467,145 +462,6 @@ gen_gimple_match_fail (FILE *f, const ch } void -predicate::gen_gimple_match (FILE *f, const char *op, const char *label) -{ - fprintf (f, "if (!%s (%s)) ", ident, op); - gen_gimple_match_fail (f, label); -} - -void -expr::gen_gimple_match (FILE *f, const char *name, const char *label) -{ - if (operation->op->kind == id_base::CODE) - { - operator_id *op = static_cast <operator_id *> (operation->op); - /* The GIMPLE variant. */ - fprintf (f, "if (TREE_CODE (%s) == SSA_NAME)\n", name); - fprintf (f, " {\n"); - fprintf (f, "gimple def_stmt = SSA_NAME_DEF_STMT (%s);\n", name); - fprintf (f, "if (!is_gimple_assign (def_stmt)\n"); - if (op->code == NOP_EXPR - || op->code == CONVERT_EXPR) - fprintf (f, " || !CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def_stmt))) "); - else - fprintf (f, " || gimple_assign_rhs_code (def_stmt) != %s) ", op->id); - gen_gimple_match_fail (f, label); - if (op->code == REALPART_EXPR - || op->code == IMAGPART_EXPR - || op->code == VIEW_CONVERT_EXPR - || op->code == BIT_FIELD_REF) - { - fprintf (f, " tree rhs = gimple_assign_rhs1 (def_stmt);\n"); - for (unsigned i = 0; i < ops.length (); ++i) - { - fprintf (f, " {\n"); - fprintf (f, " tree op = TREE_OPERAND (rhs, %d);\n", i); - fprintf (f, " if (valueize && TREE_CODE (op) == SSA_NAME)\n"); - fprintf (f, " {\n"); - fprintf (f, " op = valueize (op);\n"); - fprintf (f, " if (!op) "); - gen_gimple_match_fail (f, label); - fprintf (f, " }\n"); - ops[i]->gen_gimple_match (f, "op", label); - fprintf (f, " }\n"); - } - } - else - { - for (unsigned i = 0; i < ops.length (); ++i) - { - fprintf (f, " {\n"); - fprintf (f, " tree op = gimple_assign_rhs%d (def_stmt);\n", i + 1); - fprintf (f, " if (valueize && TREE_CODE (op) == SSA_NAME)\n"); - fprintf (f, " {\n"); - fprintf (f, " op = valueize (op);\n"); - fprintf (f, " if (!op) "); - gen_gimple_match_fail (f, label); - fprintf (f, " }\n"); - ops[i]->gen_gimple_match (f, "op", label); - fprintf (f, " }\n"); - } - } - fprintf (f, " }\n"); - /* The GENERIC variant. */ - fprintf (f, "else if (TREE_CODE (%s) == %s)\n", name, op->id); - fprintf (f, " {\n"); - for (unsigned i = 0; i < ops.length (); ++i) - { - fprintf (f, " {\n"); - fprintf (f, " tree op_ = %s;\n", name); - fprintf (f, " tree op = TREE_OPERAND (op_, %d);\n", i); - fprintf (f, " if (valueize && TREE_CODE (op) == SSA_NAME)\n"); - fprintf (f, " {\n"); - fprintf (f, " op = valueize (op);\n"); - fprintf (f, " if (!op) "); - gen_gimple_match_fail (f, label); - fprintf (f, " }\n"); - ops[i]->gen_gimple_match (f, "op", label); - fprintf (f, " }\n"); - } - fprintf (f, " }\n"); - fprintf (f, "else "); - gen_gimple_match_fail (f, label); - } - else if (operation->op->kind == id_base::FN) - { - fn_id *op = static_cast <fn_id *> (operation->op); - /* The GIMPLE variant. */ - fprintf (f, "if (TREE_CODE (%s) == SSA_NAME)\n", name); - fprintf (f, " {\n"); - fprintf (f, "gimple def_stmt = SSA_NAME_DEF_STMT (%s);\n", name); - fprintf (f, "if (!gimple_call_builtin_p (def_stmt, %s)) ", op->id); - gen_gimple_match_fail (f, label); - for (unsigned i = 0; i < ops.length (); ++i) - { - fprintf (f, " {\n"); - fprintf (f, " tree op = gimple_call_arg (def_stmt, %d);\n", i); - fprintf (f, " if (valueize && TREE_CODE (op) == SSA_NAME)\n"); - fprintf (f, " {\n"); - fprintf (f, " op = valueize (op);\n"); - fprintf (f, " if (!op) "); - gen_gimple_match_fail (f, label); - fprintf (f, " }\n"); - ops[i]->gen_gimple_match (f, "op", label); - fprintf (f, " }\n"); - } - fprintf (f, " }\n"); - /* GENERIC handling for calls. */ - fprintf (f, "else if (TREE_CODE (%s) == CALL_EXPR\n" - " && TREE_CODE (CALL_EXPR_FN (%s)) == ADDR_EXPR\n" - " && TREE_CODE (TREE_OPERAND (CALL_EXPR_FN (%s), 0)) == FUNCTION_DECL\n" - " && DECL_BUILT_IN_CLASS (TREE_OPERAND (CALL_EXPR_FN (%s), 0)) == BUILT_IN_NORMAL\n" - " && DECL_FUNCTION_CODE (TREE_OPERAND (CALL_EXPR_FN (%s), 0)) == %s)\n", - name, name, name, name, name, op->id); - fprintf (f, " {\n"); - for (unsigned i = 0; i < ops.length (); ++i) - { - fprintf (f, " {\n"); - fprintf (f, " tree op = CALL_EXPR_ARG (%s, %d);\n", name, i); - fprintf (f, " if (valueize && TREE_CODE (op) == SSA_NAME)\n"); - fprintf (f, " {\n"); - fprintf (f, " op = valueize (op);\n"); - fprintf (f, " if (!op) "); - gen_gimple_match_fail (f, label); - fprintf (f, " }\n"); - ops[i]->gen_gimple_match (f, "op", label); - fprintf (f, " }\n"); - } - fprintf (f, " }\n"); - fprintf (f, "else "); - gen_gimple_match_fail (f, label); - } - /* ??? Specifically COND_EXPR could also match on CFG diamonds. - (cond@3 @0 @1 @2) is - if (@0) goto bb2; - bb3: - bb2: - @3 = PHI <@1(2), @2(3)> - */ -} - -void expr::gen_gimple_transform (FILE *f, const char *label, const char *dest) { fprintf (f, "{\n"); @@ -691,18 +547,6 @@ capture::gen_gimple_transform (FILE *f, fprintf (f, "%s = captures[%s];\n", dest, this->where); } -void -capture::gen_gimple_match (FILE *f, const char *op, const char *label) -{ - if (this->what) - this->what->gen_gimple_match (f, op, label); - fprintf (f, "if (!captures[%s])\n" - " captures[%s] = %s;\n" - "else if (captures[%s] != %s)\n ", - this->where, this->where, op, this->where, op); - gen_gimple_match_fail (f, label); -} - bool @@ -1090,7 +934,6 @@ dt_operand::gen_gimple_expr_expr (FILE * unsigned dt_operand::gen_gimple_expr (FILE *f, const char *opname) { - unsigned i; expr *e = static_cast<expr *> (op); fprintf (f, "if (TREE_CODE (%s) == SSA_NAME)\n", opname); @@ -1152,7 +995,6 @@ dt_operand::gen_generic_expr_fn (FILE *f unsigned dt_operand::gen_generic_expr (FILE *f, const char *opname) { - unsigned i; expr *e = static_cast<expr *> (op); (e->operation->op->kind == id_base::CODE) ? gen_generic_expr_expr (f, e, opname) : gen_generic_expr_fn (f, e, opname); return e->ops.length () + 1; @@ -1319,83 +1161,6 @@ decision_tree::gen_gimple (FILE *f) static void -write_nary_simplifiers (FILE *f, vec<simplify *>& simplifiers, unsigned n) -{ - unsigned label_cnt = 1; - - fprintf (f, "\nstatic bool\n" - "gimple_match_and_simplify (code_helper code, tree type"); - for (unsigned i = 0; i < n; ++i) - fprintf (f, ", tree op%d", i); - fprintf (f, ", code_helper *res_code, tree *res_ops, gimple_seq *seq, tree (*valueize)(tree))\n" - "{\n"); - for (unsigned i = 0; i < simplifiers.length (); ++i) - { - simplify *s = simplifiers[i]; - /* ??? This means we can't capture the outermost expression. */ - for (unsigned i = 0; i < s->matchers.length (); ++i) - { - operand *match = s->matchers[i]; - if (match->type != operand::OP_EXPR) - continue; - expr *e = static_cast <expr *> (match); - if (e->ops.length () != n) - continue; - - char fail_label[16]; - snprintf (fail_label, 16, "fail%d", label_cnt++); - output_line_directive (f, s->match_location); - fprintf (f, " if (code == %s)\n", e->operation->op->id); - fprintf (f, " {\n"); - fprintf (f, " tree captures[4] = {};\n"); - for (unsigned j = 0; j < n; ++j) - { - char op[4] = "op0"; - op[2] = '0' + j; - e->ops[j]->gen_gimple_match (f, op, fail_label); - } - if (s->ifexpr) - { - output_line_directive (f, s->ifexpr_location); - fprintf (f, " if (!("); - s->ifexpr->gen_gimple_transform (f, fail_label, NULL); - fprintf (f, ")) goto %s;\n", fail_label); - } - output_line_directive (f, s->result_location); - if (s->result->type == operand::OP_EXPR) - { - e = static_cast <expr *> (s->result); - fprintf (f, " *res_code = %s;\n", e->operation->op->id); - for (unsigned j = 0; j < e->ops.length (); ++j) - { - char dest[32]; - snprintf (dest, 32, " res_ops[%d]", j); - e->ops[j]->gen_gimple_transform (f, fail_label, dest); - } - /* Re-fold the toplevel result. It's basically an embedded - gimple_build w/o actually building the stmt. */ - fprintf (f, " gimple_resimplify%d (seq, res_code, type, " - "res_ops, valueize);\n", e->ops.length ()); - } - else if (s->result->type == operand::OP_CAPTURE - || s->result->type == operand::OP_C_EXPR) - { - s->result->gen_gimple_transform (f, fail_label, - " res_ops[0]"); - fprintf (f, " *res_code = TREE_CODE (res_ops[0]);\n"); - } - else - gcc_unreachable (); - fprintf (f, " return true;\n"); - fprintf (f, " }\n"); - fprintf (f, "%s:\n", fail_label); - } - } - fprintf (f, " return false;\n"); - fprintf (f, "}\n"); -} - -static void outline_c_exprs (FILE *f, struct operand *op) { if (op->type == operand::OP_C_EXPR) @@ -1476,12 +1241,6 @@ write_gimple (FILE *f, vec<simplify *>& /* Outline complex C expressions to helper functions. */ for (unsigned i = 0; i < simplifiers.length (); ++i) outline_c_exprs (stdout, simplifiers[i]->result); - -#if 0 - write_nary_simplifiers (f, simplifiers, 1); - write_nary_simplifiers (f, simplifiers, 2); - write_nary_simplifiers (f, simplifiers, 3); -#endif }