On Thu, Jul 9, 2015 at 2:20 PM, Michael Matz <m...@suse.de> wrote:
> Hi,
>
> while looking at gimple-match.c I got a minor stroke, so this patch makes
> genmatch generated (mostly) properly indented code.  Sure, it could be
> done post-fact by an editor or something when one looks at the file, but
> all other generators also try to generate good looking code.  No
> functional changes to the emitted code.
>
> Regstrapping on x86_64-linux in progress.  Okay if that passes?

Ok.

Thanks,
Richard.

>
> Ciao,
> Michael.
>
>         * genmatch.c (fprintf_indent): New function.
>         (operand::gen_transform): Add indent parameter.
>         (expr::gen_transform, c_expr::gen_transform,
>         capture::gen_transform): Ditto and use fprintf_indent.
>         (dt_node::gen, dt_node::gen_kids, dt_node::gen_kids_1): Ditto.
>         (dt_operand::gen, dt_operand::gen_predicate,
>         dt_operand::gen_match_op, dt_operand::gen_gimple_expr,
>         dt_operand::gen_generic_expr, dt_simplify::gen): Ditto.
>         (decision_tree::gen_gimple): Adjust calls and indent generated
>         code.
>         (decision_tree::gen_generic): Ditto.
>         (write_predicate): Ditto.
>
> Index: gcc/genmatch.c
> ===================================================================
> --- gcc.orig/genmatch.c 2015-07-08 16:50:04.000000000 +0200
> +++ gcc/genmatch.c      2015-07-09 14:05:44.000000000 +0200
> @@ -126,6 +126,21 @@ warning_at (const cpp_token *tk, const c
>    va_end (ap);
>  }
>
> +/* Like fprintf, but print INDENT spaces at the beginning.  */
> +
> +static void
> +#if GCC_VERSION >= 4001
> +__attribute__((format (printf, 3, 4)))
> +#endif
> +fprintf_indent (FILE *f, unsigned int indent, const char *format, ...)
> +{
> +  va_list ap;
> +  va_start (ap, format);
> +  fprintf (f, "%*s", indent, "");
> +  vfprintf (f, format, ap);
> +  va_end (ap);
> +}
> +
>  static void
>  output_line_directive (FILE *f, source_location location,
>                        bool dumpfile = false)
> @@ -468,7 +483,7 @@ 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_transform (FILE *, const char *, bool, int,
> +  virtual void gen_transform (FILE *, int, const char *, bool, int,
>                               const char *, capture_info *,
>                               dt_operand ** = 0,
>                               bool = true)
> @@ -503,7 +518,7 @@ struct expr : public operand
>    bool is_commutative;
>    /* Whether the expression is expected to be in GENERIC form.  */
>    bool is_generic;
> -  virtual void gen_transform (FILE *f, const char *, bool, int,
> +  virtual void gen_transform (FILE *f, int, const char *, bool, int,
>                               const char *, capture_info *,
>                               dt_operand ** = 0, bool = true);
>  };
> @@ -534,7 +549,7 @@ struct c_expr : public operand
>    unsigned nr_stmts;
>    /* The identifier replacement vector.  */
>    vec<id_tab> ids;
> -  virtual void gen_transform (FILE *f, const char *, bool, int,
> +  virtual void gen_transform (FILE *f, int, const char *, bool, int,
>                               const char *, capture_info *,
>                               dt_operand ** = 0, bool = true);
>  };
> @@ -549,7 +564,7 @@ struct capture : public operand
>    unsigned where;
>    /* The captured value.  */
>    operand *what;
> -  virtual void gen_transform (FILE *f, const char *, bool, int,
> +  virtual void gen_transform (FILE *f, int, const char *, bool, int,
>                               const char *, capture_info *,
>                               dt_operand ** = 0, bool = true);
>  };
> @@ -1156,10 +1171,10 @@ struct dt_node
>    dt_node *append_match_op (dt_operand *, dt_node *parent = 0, unsigned pos 
> = 0);
>    dt_node *append_simplify (simplify *, unsigned, dt_operand **);
>
> -  virtual void gen (FILE *, bool) {}
> +  virtual void gen (FILE *, int, bool) {}
>
> -  void gen_kids (FILE *, bool);
> -  void gen_kids_1 (FILE *, bool,
> +  void gen_kids (FILE *, int, bool);
> +  void gen_kids_1 (FILE *, int, bool,
>                    vec<dt_operand *>, vec<dt_operand *>, vec<dt_operand *>,
>                    vec<dt_operand *>, vec<dt_operand *>, vec<dt_node *>);
>  };
> @@ -1178,12 +1193,12 @@ struct dt_operand : public dt_node
>        : dt_node (type), op (op_), match_dop (match_dop_),
>        parent (parent_), pos (pos_) {}
>
> -  void gen (FILE *, bool);
> -  unsigned gen_predicate (FILE *, const char *, bool);
> -  unsigned gen_match_op (FILE *, const char *);
> +  void gen (FILE *, int, bool);
> +  unsigned gen_predicate (FILE *, int, const char *, bool);
> +  unsigned gen_match_op (FILE *, int, const char *);
>
> -  unsigned gen_gimple_expr (FILE *);
> -  unsigned gen_generic_expr (FILE *, const char *);
> +  unsigned gen_gimple_expr (FILE *, int);
> +  unsigned gen_generic_expr (FILE *, int, const char *);
>
>    char *get_name (char *);
>    void gen_opname (char *, unsigned);
> @@ -1201,7 +1216,7 @@ struct dt_simplify : public dt_node
>         : dt_node (DT_SIMPLIFY), s (s_), pattern_no (pattern_no_),
>           indexes (indexes_)  {}
>
> -  void gen (FILE *f, bool);
> +  void gen (FILE *f, int, bool);
>  };
>
>  template<>
> @@ -1726,8 +1741,8 @@ get_operand_type (id_base *op, const cha
>  /* Generate transform code for an expression.  */
>
>  void
> -expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
> -                    const char *in_type, capture_info *cinfo,
> +expr::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
> +                    int depth, const char *in_type, capture_info *cinfo,
>                      dt_operand **indexes, bool)
>  {
>    bool conversion_p = is_conversion (operation);
> @@ -1771,18 +1786,20 @@ expr::gen_transform (FILE *f, const char
>    if (!type)
>      fatal ("two conversions in a row");
>
> -  fprintf (f, "{\n");
> -  fprintf (f, "  tree ops%d[%u], res;\n", depth, ops.length ());
> +  fprintf_indent (f, indent, "{\n");
> +  indent += 2;
> +  fprintf_indent (f, indent, "tree ops%d[%u], res;\n", depth, ops.length ());
>    char op0type[64];
>    snprintf (op0type, 64, "TREE_TYPE (ops%d[0])", depth);
>    for (unsigned i = 0; i < ops.length (); ++i)
>      {
>        char dest[32];
> -      snprintf (dest, 32, "  ops%d[%u]", depth, i);
> +      snprintf (dest, 32, "ops%d[%u]", depth, i);
>        const char *optype
>         = get_operand_type (operation, in_type, expr_type,
>                             i == 0 ? NULL : op0type);
> -      ops[i]->gen_transform (f, dest, gimple, depth + 1, optype, cinfo, 
> indexes,
> +      ops[i]->gen_transform (f, indent, dest, gimple, depth + 1, optype,
> +                            cinfo, indexes,
>                              ((!(*operation == COND_EXPR)
>                                && !(*operation == VEC_COND_EXPR))
>                               || i != 0));
> @@ -1797,45 +1814,67 @@ expr::gen_transform (FILE *f, const char
>    if (gimple)
>      {
>        if (*operation == CONVERT_EXPR)
> -       fprintf (f, "  if (%s != TREE_TYPE (ops%d[0])\n"
> -           "      && !useless_type_conversion_p (%s, TREE_TYPE 
> (ops%d[0])))\n"
> -           "  {\n", type, depth, type, depth);
> +       {
> +         fprintf_indent (f, indent,
> +                         "if (%s != TREE_TYPE (ops%d[0])\n",
> +                         type, depth);
> +         fprintf_indent (f, indent,
> +                         "    && !useless_type_conversion_p (%s, TREE_TYPE 
> (ops%d[0])))\n",
> +                         type, depth);
> +         fprintf_indent (f, indent + 2, "{\n");
> +         indent += 4;
> +       }
>        /* ???  Building a stmt can fail for various reasons here, seq being
>           NULL or the stmt referencing SSA names occuring in abnormal PHIs.
>          So if we fail here we should continue matching other patterns.  */
> -      fprintf (f, "  code_helper tem_code = %s;\n"
> -              "  tree tem_ops[3] = { ", opr);
> +      fprintf_indent (f, indent, "code_helper tem_code = %s;\n", opr);
> +      fprintf_indent (f, indent, "tree tem_ops[3] = { ");
>        for (unsigned i = 0; i < ops.length (); ++i)
>         fprintf (f, "ops%d[%u]%s", depth, i,
>                  i == ops.length () - 1 ? " };\n" : ", ");
> -      fprintf (f, "  gimple_resimplify%d (seq, &tem_code, %s, tem_ops, 
> valueize);\n",
> -              ops.length (), type);
> -      fprintf (f, "  res = maybe_push_res_to_seq (tem_code, %s, tem_ops, 
> seq);\n"
> -              "  if (!res) return false;\n", type);
> +      fprintf_indent (f, indent,
> +                     "gimple_resimplify%d (seq, &tem_code, %s, tem_ops, 
> valueize);\n",
> +                     ops.length (), type);
> +      fprintf_indent (f, indent,
> +                     "res = maybe_push_res_to_seq (tem_code, %s, tem_ops, 
> seq);\n",
> +                     type);
> +      fprintf_indent (f, indent,
> +                     "if (!res) return false;\n");
>        if (*operation == CONVERT_EXPR)
> -        fprintf (f, "  }\n"
> -                "  else\n"
> -                "    res = ops%d[0];\n", depth);
> +       {
> +         indent -= 4;
> +         fprintf_indent (f, indent, "  }\n");
> +         fprintf_indent (f, indent, "else\n");
> +         fprintf_indent (f, indent, "  res = ops%d[0];\n", depth);
> +       }
>      }
>    else
>      {
>        if (*operation == CONVERT_EXPR)
> -       fprintf (f, "  if (TREE_TYPE (ops%d[0]) != %s)\n", depth, type);
> +       {
> +         fprintf_indent (f, indent, "if (TREE_TYPE (ops%d[0]) != %s)\n",
> +                         depth, type);
> +         indent += 2;
> +       }
>        if (operation->kind == id_base::CODE)
> -       fprintf (f, "  res = fold_build%d_loc (loc, %s, %s",
> -                ops.length(), opr, type);
> +       fprintf_indent (f, indent, "res = fold_build%d_loc (loc, %s, %s",
> +                       ops.length(), opr, type);
>        else
> -       fprintf (f, "  res = build_call_expr_loc (loc, "
> -                "builtin_decl_implicit (%s), %d", opr, ops.length());
> +       fprintf_indent (f, indent, "res = build_call_expr_loc (loc, "
> +                       "builtin_decl_implicit (%s), %d", opr, ops.length());
>        for (unsigned i = 0; i < ops.length (); ++i)
>         fprintf (f, ", ops%d[%u]", depth, i);
>        fprintf (f, ");\n");
>        if (*operation == CONVERT_EXPR)
> -       fprintf (f, "  else\n"
> -                "    res = ops%d[0];\n", depth);
> +       {
> +         indent -= 2;
> +         fprintf_indent (f, indent, "else\n");
> +         fprintf_indent (f, indent, "  res = ops%d[0];\n", depth);
> +       }
>      }
> -  fprintf (f, "%s = res;\n", dest);
> -  fprintf (f, "}\n");
> +  fprintf_indent (f, indent, "%s = res;\n", dest);
> +  indent -= 2;
> +  fprintf_indent (f, indent, "}\n");
>  }
>
>  /* Generate code for a c_expr which is either the expression inside
> @@ -1843,12 +1882,12 @@ expr::gen_transform (FILE *f, const char
>     result to be stored to DEST.  */
>
>  void
> -c_expr::gen_transform (FILE *f, const char *dest,
> +c_expr::gen_transform (FILE *f, int indent, const char *dest,
>                        bool, int, const char *, capture_info *,
>                        dt_operand **, bool)
>  {
>    if (dest && nr_stmts == 1)
> -    fprintf (f, "%s = ", dest);
> +    fprintf_indent (f, indent, "%s = ", dest);
>
>    unsigned stmt_nr = 1;
>    for (unsigned i = 0; i < code.length (); ++i)
> @@ -1902,10 +1941,9 @@ c_expr::gen_transform (FILE *f, const ch
>        if (token->type == CPP_SEMICOLON)
>         {
>           stmt_nr++;
> +         fputc ('\n', f);
>           if (dest && stmt_nr == nr_stmts)
> -           fprintf (f, "\n %s = ", dest);
> -         else
> -           fputc ('\n', f);
> +           fprintf_indent (f, indent, "%s = ", dest);
>         }
>      }
>  }
> @@ -1913,8 +1951,8 @@ c_expr::gen_transform (FILE *f, const ch
>  /* Generate transform code for a capture.  */
>
>  void
> -capture::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
> -                       const char *in_type, capture_info *cinfo,
> +capture::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
> +                       int depth, const char *in_type, capture_info *cinfo,
>                         dt_operand **indexes, bool expand_compares)
>  {
>    if (what && is_a<expr *> (what))
> @@ -1923,11 +1961,12 @@ capture::gen_transform (FILE *f, const c
>         {
>           char buf[20];
>           sprintf (buf, "captures[%u]", where);
> -         what->gen_transform (f, buf, gimple, depth, in_type, cinfo, NULL);
> +         what->gen_transform (f, indent, buf, gimple, depth, in_type,
> +                              cinfo, NULL);
>         }
>      }
>
> -  fprintf (f, "%s = captures[%u];\n", dest, where);
> +  fprintf_indent (f, indent, "%s = captures[%u];\n", dest, where);
>
>    /* ???  Stupid tcc_comparison GENERIC trees in COND_EXPRs.  Deal
>       with substituting a capture of that.
> @@ -1935,13 +1974,16 @@ capture::gen_transform (FILE *f, const c
>       to match.  */
>    if (gimple && expand_compares
>        && cinfo->info[where].cond_expr_cond_p)
> -    fprintf (f, "if (COMPARISON_CLASS_P (%s))\n"
> -            "  {\n"
> -            "    if (!seq) return false;\n"
> -            "    %s = gimple_build (seq, TREE_CODE (%s),"
> -            " TREE_TYPE (%s), TREE_OPERAND (%s, 0),"
> -            " TREE_OPERAND (%s, 1));\n"
> -            "  }\n", dest, dest, dest, dest, dest, dest);
> +    {
> +      fprintf_indent (f, indent, "if (COMPARISON_CLASS_P (%s))\n", dest);
> +      fprintf_indent (f, indent, "  {\n");
> +      fprintf_indent (f, indent, "    if (!seq) return false;\n");
> +      fprintf_indent (f, indent, "    %s = gimple_build (seq, TREE_CODE 
> (%s),"
> +                                " TREE_TYPE (%s), TREE_OPERAND (%s, 0),"
> +                                " TREE_OPERAND (%s, 1));\n",
> +                                dest, dest, dest, dest, dest);
> +      fprintf_indent (f, indent, "  }\n");
> +    }
>  }
>
>  /* Return the name of the operand representing the decision tree node.
> @@ -1976,7 +2018,7 @@ dt_operand::gen_opname (char *name, unsi
>     a predicate.  */
>
>  unsigned
> -dt_operand::gen_predicate (FILE *f, const char *opname, bool gimple)
> +dt_operand::gen_predicate (FILE *f, int indent, const char *opname, bool 
> gimple)
>  {
>    predicate *p = as_a <predicate *> (op);
>
> @@ -1985,13 +2027,14 @@ dt_operand::gen_predicate (FILE *f, cons
>        /* If this is a predicate generated from a pattern mangle its
>          name and pass on the valueize hook.  */
>        if (gimple)
> -       fprintf (f, "if (gimple_%s (%s, valueize))\n", p->p->id, opname);
> +       fprintf_indent (f, indent, "if (gimple_%s (%s, valueize))\n",
> +                       p->p->id, opname);
>        else
> -       fprintf (f, "if (tree_%s (%s))\n", p->p->id, opname);
> +       fprintf_indent (f, indent, "if (tree_%s (%s))\n", p->p->id, opname);
>      }
>    else
> -    fprintf (f, "if (%s (%s))\n", p->p->id, opname);
> -  fprintf (f, "{\n");
> +    fprintf_indent (f, indent, "if (%s (%s))\n", p->p->id, opname);
> +  fprintf_indent (f, indent + 2, "{\n");
>    return 1;
>  }
>
> @@ -1999,20 +2042,20 @@ dt_operand::gen_predicate (FILE *f, cons
>     a capture-match.  */
>
>  unsigned
> -dt_operand::gen_match_op (FILE *f, const char *opname)
> +dt_operand::gen_match_op (FILE *f, int indent, const char *opname)
>  {
>    char match_opname[20];
>    match_dop->get_name (match_opname);
> -  fprintf (f, "if (%s == %s || operand_equal_p (%s, %s, 0))\n",
> -          opname, match_opname, opname, match_opname);
> -  fprintf (f, "{\n");
> +  fprintf_indent (f, indent, "if (%s == %s || operand_equal_p (%s, %s, 
> 0))\n",
> +                 opname, match_opname, opname, match_opname);
> +  fprintf_indent (f, indent + 2, "{\n");
>    return 1;
>  }
>
>  /* Generate GIMPLE matching code for the decision tree operand.  */
>
>  unsigned
> -dt_operand::gen_gimple_expr (FILE *f)
> +dt_operand::gen_gimple_expr (FILE *f, int indent)
>  {
>    expr *e = static_cast<expr *> (op);
>    id_base *id = e->operation;
> @@ -2032,25 +2075,37 @@ dt_operand::gen_gimple_expr (FILE *f)
>               /* ???  If this is a memory operation we can't (and should not)
>                  match this.  The only sensible operand types are
>                  SSA names and invariants.  */
> -             fprintf (f, "tree %s = TREE_OPERAND (gimple_assign_rhs1 
> (def_stmt), %i);\n",
> -                      child_opname, i);
> -             fprintf (f, "if ((TREE_CODE (%s) == SSA_NAME\n"
> -                      "|| is_gimple_min_invariant (%s))\n"
> -                      "&& (%s = do_valueize (valueize, %s)))\n"
> -                      "{\n", child_opname, child_opname, child_opname,
> -                      child_opname);
> +             fprintf_indent (f, indent,
> +                             "tree %s = TREE_OPERAND (gimple_assign_rhs1 
> (def_stmt), %i);\n",
> +                             child_opname, i);
> +             fprintf_indent (f, indent,
> +                             "if ((TREE_CODE (%s) == SSA_NAME\n",
> +                             child_opname);
> +             fprintf_indent (f, indent,
> +                             "     || is_gimple_min_invariant (%s))\n",
> +                             child_opname);
> +             fprintf_indent (f, indent,
> +                             "    && (%s = do_valueize (valueize, %s)))\n",
> +                             child_opname, child_opname);
> +             fprintf_indent (f, indent,
> +                             "  {\n");
> +             indent += 4;
>               continue;
>             }
>           else
> -           fprintf (f, "tree %s = gimple_assign_rhs%u (def_stmt);\n",
> -                    child_opname, i + 1);
> +           fprintf_indent (f, indent,
> +                           "tree %s = gimple_assign_rhs%u (def_stmt);\n",
> +                           child_opname, i + 1);
>         }
>        else
> -       fprintf (f, "tree %s = gimple_call_arg (def_stmt, %u);\n",
> -                child_opname, i);
> -      fprintf (f, "if ((%s = do_valueize (valueize, %s)))\n",
> -              child_opname, child_opname);
> -      fprintf (f, "{\n");
> +       fprintf_indent (f, indent,
> +                       "tree %s = gimple_call_arg (def_stmt, %u);\n",
> +                       child_opname, i);
> +      fprintf_indent (f, indent,
> +                     "if ((%s = do_valueize (valueize, %s)))\n",
> +                     child_opname, child_opname);
> +      fprintf_indent (f, indent, "  {\n");
> +      indent += 4;
>      }
>    /* While the toplevel operands are canonicalized by the caller
>       after valueizing operands of sub-expressions we have to
> @@ -2066,9 +2121,12 @@ dt_operand::gen_gimple_expr (FILE *f)
>           char child_opname0[20], child_opname1[20];
>           gen_opname (child_opname0, 0);
>           gen_opname (child_opname1, 1);
> -         fprintf (f, "if (tree_swap_operands_p (%s, %s, false))\n"
> -                  "  std::swap (%s, %s);\n", child_opname0, child_opname1,
> -                  child_opname0, child_opname1);
> +         fprintf_indent (f, indent,
> +                         "if (tree_swap_operands_p (%s, %s, false))\n",
> +                         child_opname0, child_opname1);
> +         fprintf_indent (f, indent,
> +                         "  std::swap (%s, %s);\n",
> +                         child_opname0, child_opname1);
>         }
>      }
>
> @@ -2078,7 +2136,7 @@ dt_operand::gen_gimple_expr (FILE *f)
>  /* Generate GENERIC matching code for the decision tree operand.  */
>
>  unsigned
> -dt_operand::gen_generic_expr (FILE *f, const char *opname)
> +dt_operand::gen_generic_expr (FILE *f, int indent, const char *opname)
>  {
>    expr *e = static_cast<expr *> (op);
>    unsigned n_ops = e->ops.length ();
> @@ -2089,11 +2147,11 @@ dt_operand::gen_generic_expr (FILE *f, c
>        gen_opname (child_opname, i);
>
>        if (e->operation->kind == id_base::CODE)
> -       fprintf (f, "tree %s = TREE_OPERAND (%s, %u);\n",
> -                child_opname, opname, i);
> +       fprintf_indent (f, indent, "tree %s = TREE_OPERAND (%s, %u);\n",
> +                       child_opname, opname, i);
>        else
> -       fprintf (f, "tree %s = CALL_EXPR_ARG (%s, %u);\n",
> -                child_opname, opname, i);
> +       fprintf_indent (f, indent, "tree %s = CALL_EXPR_ARG (%s, %u);\n",
> +                       child_opname, opname, i);
>      }
>
>    return 0;
> @@ -2102,7 +2160,7 @@ dt_operand::gen_generic_expr (FILE *f, c
>  /* Generate matching code for the children of the decision tree node.  */
>
>  void
> -dt_node::gen_kids (FILE *f, bool gimple)
> +dt_node::gen_kids (FILE *f, int indent, bool gimple)
>  {
>    auto_vec<dt_operand *> gimple_exprs;
>    auto_vec<dt_operand *> generic_exprs;
> @@ -2150,10 +2208,10 @@ dt_node::gen_kids (FILE *f, bool gimple)
>         {
>           /* A DT_TRUE operand serves as a barrier - generate code now
>              for what we have collected sofar.  */
> -         gen_kids_1 (f, gimple, gimple_exprs, generic_exprs,
> +         gen_kids_1 (f, indent, gimple, gimple_exprs, generic_exprs,
>                       fns, generic_fns, preds, others);
>           /* And output the true operand itself.  */
> -         kids[i]->gen (f, gimple);
> +         kids[i]->gen (f, indent, gimple);
>           gimple_exprs.truncate (0);
>           generic_exprs.truncate (0);
>           fns.truncate (0);
> @@ -2166,14 +2224,14 @@ dt_node::gen_kids (FILE *f, bool gimple)
>      }
>
>    /* Generate code for the remains.  */
> -  gen_kids_1 (f, gimple, gimple_exprs, generic_exprs,
> +  gen_kids_1 (f, indent, gimple, gimple_exprs, generic_exprs,
>               fns, generic_fns, preds, others);
>  }
>
>  /* Generate matching code for the children of the decision tree node.  */
>
>  void
> -dt_node::gen_kids_1 (FILE *f, bool gimple,
> +dt_node::gen_kids_1 (FILE *f, int indent, bool gimple,
>                      vec<dt_operand *> gimple_exprs,
>                      vec<dt_operand *> generic_exprs,
>                      vec<dt_operand *> fns,
> @@ -2200,67 +2258,88 @@ dt_node::gen_kids_1 (FILE *f, bool gimpl
>        else
>         generic_exprs[0]->get_name (kid_opname);
>
> -      fprintf (f, "switch (TREE_CODE (%s))\n"
> -              "{\n", kid_opname);
> +      fprintf_indent (f, indent, "switch (TREE_CODE (%s))\n", kid_opname);
> +      fprintf_indent (f, indent, "  {\n");
> +      indent += 4;
>      }
>
>    if (exprs_len || fns_len)
>      {
> -      fprintf (f, "case SSA_NAME:\n");
> -      fprintf (f, "if (do_valueize (valueize, %s) != NULL_TREE)\n", 
> kid_opname);
> -      fprintf (f, "{\n");
> -      fprintf (f, "gimple def_stmt = SSA_NAME_DEF_STMT (%s);\n", kid_opname);
> +      fprintf_indent (f, indent,
> +                     "case SSA_NAME:\n");
> +      fprintf_indent (f, indent,
> +                     "  if (do_valueize (valueize, %s) != NULL_TREE)\n",
> +                     kid_opname);
> +      fprintf_indent (f, indent,
> +                     "    {\n");
> +      fprintf_indent (f, indent,
> +                     "      gimple def_stmt = SSA_NAME_DEF_STMT (%s);\n",
> +                     kid_opname);
>
> +      indent += 6;
>        if (exprs_len)
>         {
> -         fprintf (f, "if (is_gimple_assign (def_stmt))\n");
> -         fprintf (f, "switch (gimple_assign_rhs_code (def_stmt))\n"
> -                  "{\n");
> +         fprintf_indent (f, indent,
> +                         "if (is_gimple_assign (def_stmt))\n");
> +         fprintf_indent (f, indent,
> +                         "  switch (gimple_assign_rhs_code (def_stmt))\n");
> +         indent += 4;
> +         fprintf_indent (f, indent, "{\n");
>           for (unsigned i = 0; i < exprs_len; ++i)
>             {
>               expr *e = as_a <expr *> (gimple_exprs[i]->op);
>               id_base *op = e->operation;
>               if (*op == CONVERT_EXPR || *op == NOP_EXPR)
> -               fprintf (f, "CASE_CONVERT:\n");
> +               fprintf_indent (f, indent, "  CASE_CONVERT:\n");
>               else
> -               fprintf (f, "case %s:\n", op->id);
> -             fprintf (f, "{\n");
> -             gimple_exprs[i]->gen (f, true);
> -             fprintf (f, "break;\n"
> -                      "}\n");
> +               fprintf_indent (f, indent, "  case %s:\n", op->id);
> +             fprintf_indent (f, indent, "    {\n");
> +             gimple_exprs[i]->gen (f, indent + 6, true);
> +             fprintf_indent (f, indent, "      break;\n");
> +             fprintf_indent (f, indent, "    }\n");
>             }
> -         fprintf (f, "default:;\n"
> -                  "}\n");
> +         fprintf_indent (f, indent, "  default:;\n");
> +         indent -= 4;
> +         fprintf_indent (f, indent, "}\n");
>         }
>
>        if (fns_len)
>         {
>           if (exprs_len)
> -           fprintf (f, "else ");
> +           fprintf_indent (f, indent, "else ");
> +         else
> +           fprintf_indent (f, indent, " ");
>
> -         fprintf (f, "if (gimple_call_builtin_p (def_stmt, 
> BUILT_IN_NORMAL))\n"
> -                  "{\n"
> -                  "tree fndecl = gimple_call_fndecl (def_stmt);\n"
> -                  "switch (DECL_FUNCTION_CODE (fndecl))\n"
> -                  "{\n");
> +         fprintf (f, "if (gimple_call_builtin_p (def_stmt, 
> BUILT_IN_NORMAL))\n");
> +         fprintf_indent (f, indent,
> +                         "  {\n");
> +         fprintf_indent (f, indent,
> +                         "    tree fndecl = gimple_call_fndecl 
> (def_stmt);\n");
> +         fprintf_indent (f, indent,
> +                         "    switch (DECL_FUNCTION_CODE (fndecl))\n");
> +         fprintf_indent (f, indent,
> +                         "      {\n");
> +         indent += 8;
>
>           for (unsigned i = 0; i < fns_len; ++i)
>             {
>               expr *e = as_a <expr *>(fns[i]->op);
> -             fprintf (f, "case %s:\n"
> -                      "{\n", e->operation->id);
> -             fns[i]->gen (f, true);
> -             fprintf (f, "break;\n"
> -                      "}\n");
> +             fprintf_indent (f, indent, "case %s:\n", e->operation->id);
> +             fprintf_indent (f, indent, "  {\n");
> +             fns[i]->gen (f, indent + 4, true);
> +             fprintf_indent (f, indent, "    break;\n");
> +             fprintf_indent (f, indent, "  }\n");
>             }
>
> -         fprintf (f, "default:;\n"
> -                  "}\n"
> -                  "}\n");
> +         fprintf_indent (f, indent, "default:;\n");
> +         indent -= 8;
> +         fprintf_indent (f, indent, "      }\n");
> +         fprintf_indent (f, indent, "  }\n");
>         }
>
> -      fprintf (f, "}\n"
> -              "break;\n");
> +      indent -= 6;
> +      fprintf_indent (f, indent, "    }\n");
> +      fprintf_indent (f, indent, "  break;\n");
>      }
>
>    for (unsigned i = 0; i < generic_exprs.length (); ++i)
> @@ -2268,76 +2347,89 @@ dt_node::gen_kids_1 (FILE *f, bool gimpl
>        expr *e = as_a <expr *>(generic_exprs[i]->op);
>        id_base *op = e->operation;
>        if (*op == CONVERT_EXPR || *op == NOP_EXPR)
> -       fprintf (f, "CASE_CONVERT:\n");
> +       fprintf_indent (f, indent, "CASE_CONVERT:\n");
>        else
> -       fprintf (f, "case %s:\n", op->id);
> -      fprintf (f, "{\n");
> -      generic_exprs[i]->gen (f, gimple);
> -      fprintf (f, "break;\n"
> -              "}\n");
> +       fprintf_indent (f, indent, "case %s:\n", op->id);
> +      fprintf_indent (f, indent, "  {\n");
> +      generic_exprs[i]->gen (f, indent + 4, gimple);
> +      fprintf_indent (f, indent, "    break;\n");
> +      fprintf_indent (f, indent, "  }\n");
>      }
>
>    if (gfns_len)
>      {
> -      fprintf (f, "case CALL_EXPR:\n"
> -              "{\n"
> -              "tree fndecl = get_callee_fndecl (%s);\n"
> -              "if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == 
> BUILT_IN_NORMAL)\n"
> -              "switch (DECL_FUNCTION_CODE (fndecl))\n"
> -              "{\n", kid_opname);
> +      fprintf_indent (f, indent,
> +                     "case CALL_EXPR:\n");
> +      fprintf_indent (f, indent,
> +                     "  {\n");
> +      fprintf_indent (f, indent,
> +                     "    tree fndecl = get_callee_fndecl (%s);\n",
> +                     kid_opname);
> +      fprintf_indent (f, indent,
> +                     "    if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == 
> BUILT_IN_NORMAL)\n");
> +      fprintf_indent (f, indent,
> +                     "      switch (DECL_FUNCTION_CODE (fndecl))\n");
> +      fprintf_indent (f, indent,
> +                     "        {\n");
> +      indent += 10;
>
>        for (unsigned j = 0; j < generic_fns.length (); ++j)
>         {
>           expr *e = as_a <expr *>(generic_fns[j]->op);
>           gcc_assert (e->operation->kind == id_base::FN);
>
> -         fprintf (f, "case %s:\n"
> -                  "{\n", e->operation->id);
> -         generic_fns[j]->gen (f, false);
> -         fprintf (f, "break;\n"
> -                  "}\n");
> +         fprintf_indent (f, indent, "case %s:\n", e->operation->id);
> +         fprintf_indent (f, indent, "  {\n");
> +         generic_fns[j]->gen (f, indent + 4, false);
> +         fprintf_indent (f, indent, "    break;\n");
> +         fprintf_indent (f, indent, "  }\n");
>         }
>
> -      fprintf (f, "default:;\n"
> -              "}\n"
> -              "break;\n"
> -              "}\n");
> +      indent -= 10;
> +      fprintf_indent (f, indent, "          default:;\n");
> +      fprintf_indent (f, indent, "        }\n");
> +      fprintf_indent (f, indent, "    break;\n");
> +      fprintf_indent (f, indent, "  }\n");
>      }
>
>    /* Close switch (TREE_CODE ()).  */
>    if (exprs_len || fns_len || gexprs_len || gfns_len)
> -    fprintf (f, "default:;\n"
> -            "}\n");
> +    {
> +      indent -= 4;
> +      fprintf_indent (f, indent, "    default:;\n");
> +      fprintf_indent (f, indent, "  }\n");
> +    }
>
>    for (unsigned i = 0; i < preds.length (); ++i)
>      {
>        expr *e = as_a <expr *> (preds[i]->op);
>        predicate_id *p = as_a <predicate_id *> (e->operation);
>        preds[i]->get_name (kid_opname);
> -      fprintf (f, "tree %s_pops[%d];\n", kid_opname, p->nargs);
> -      fprintf (f, "if (%s_%s (%s, %s_pops%s))\n",
> +      fprintf_indent (f, indent, "tree %s_pops[%d];\n", kid_opname, 
> p->nargs);
> +      fprintf_indent (f, indent, "if (%s_%s (%s, %s_pops%s))\n",
>                gimple ? "gimple" : "tree",
>                p->id, kid_opname, kid_opname,
>                gimple ? ", valueize" : "");
> -      fprintf (f, "{\n");
> +      fprintf_indent (f, indent, "  {\n");
>        for (int j = 0; j < p->nargs; ++j)
>         {
>           char child_opname[20];
>           preds[i]->gen_opname (child_opname, j);
> -         fprintf (f, "tree %s = %s_pops[%d];\n", child_opname, kid_opname, 
> j);
> +         fprintf_indent (f, indent + 4, "tree %s = %s_pops[%d];\n",
> +                         child_opname, kid_opname, j);
>         }
> -      preds[i]->gen_kids (f, gimple);
> +      preds[i]->gen_kids (f, indent + 4, gimple);
>        fprintf (f, "}\n");
>      }
>
>    for (unsigned i = 0; i < others.length (); ++i)
> -    others[i]->gen (f, gimple);
> +    others[i]->gen (f, indent, gimple);
>  }
>
>  /* Generate matching code for the decision tree operand.  */
>
>  void
> -dt_operand::gen (FILE *f, bool gimple)
> +dt_operand::gen (FILE *f, int indent, bool gimple)
>  {
>    char opname[20];
>    get_name (opname);
> @@ -2348,14 +2440,14 @@ dt_operand::gen (FILE *f, bool gimple)
>      switch (op->type)
>        {
>         case operand::OP_PREDICATE:
> -         n_braces = gen_predicate (f, opname, gimple);
> +         n_braces = gen_predicate (f, indent, opname, gimple);
>           break;
>
>         case operand::OP_EXPR:
>           if (gimple)
> -           n_braces = gen_gimple_expr (f);
> +           n_braces = gen_gimple_expr (f, indent);
>           else
> -           n_braces = gen_generic_expr (f, opname);
> +           n_braces = gen_generic_expr (f, indent, opname);
>           break;
>
>         default:
> @@ -2364,14 +2456,20 @@ dt_operand::gen (FILE *f, bool gimple)
>    else if (type == DT_TRUE)
>      ;
>    else if (type == DT_MATCH)
> -    n_braces = gen_match_op (f, opname);
> +    n_braces = gen_match_op (f, indent, opname);
>    else
>      gcc_unreachable ();
>
> -  gen_kids (f, gimple);
> +  indent += 4 * n_braces;
> +  gen_kids (f, indent, gimple);
>
>    for (unsigned i = 0; i < n_braces; ++i)
> -    fprintf (f, "}\n");
> +    {
> +      indent -= 4;
> +      if (indent < 0)
> +       indent = 0;
> +      fprintf_indent (f, indent, "  }\n");
> +    }
>  }
>
>
> @@ -2381,19 +2479,21 @@ dt_operand::gen (FILE *f, bool gimple)
>     that is not part of the decision tree (simplify->match).  */
>
>  void
> -dt_simplify::gen (FILE *f, bool gimple)
> +dt_simplify::gen (FILE *f, int indent, bool gimple)
>  {
> -  fprintf (f, "{\n");
> +  fprintf_indent (f, indent, "{\n");
> +  indent += 2;
>    output_line_directive (f, s->result_location);
>    if (s->capture_max >= 0)
> -    fprintf (f, "tree captures[%u] ATTRIBUTE_UNUSED = {};\n",
> -            s->capture_max + 1);
> +    fprintf_indent (f, indent, "tree captures[%u] ATTRIBUTE_UNUSED = {};\n",
> +                   s->capture_max + 1);
>
>    for (int i = 0; i <= s->capture_max; ++i)
>      if (indexes[i])
>        {
>         char opname[20];
> -       fprintf (f, "captures[%u] = %s;\n", i, indexes[i]->get_name (opname));
> +       fprintf_indent (f, indent, "captures[%u] = %s;\n",
> +                       i, indexes[i]->get_name (opname));
>        }
>
>    unsigned n_braces = 0;
> @@ -2404,18 +2504,19 @@ dt_simplify::gen (FILE *f, bool gimple)
>           if_or_with &w = s->ifexpr_vec[i];
>           if (w.is_with)
>             {
> -             fprintf (f, "{\n");
> +             fprintf_indent (f, indent, "{\n");
> +             indent += 4;
>               output_line_directive (f, w.location);
> -             w.cexpr->gen_transform (f, NULL, true, 1, "type", NULL);
> +             w.cexpr->gen_transform (f, indent, NULL, true, 1, "type", NULL);
>               n_braces++;
>             }
>           else
>             {
>               output_line_directive (f, w.location);
> -             fprintf (f, "if (");
> +             fprintf_indent (f, indent, "if (");
>               if (i == s->ifexpr_vec.length () - 1
>                   || s->ifexpr_vec[i+1].is_with)
> -               w.cexpr->gen_transform (f, NULL, true, 1, "type", NULL);
> +               w.cexpr->gen_transform (f, indent, NULL, true, 1, "type", 
> NULL);
>               else
>                 {
>                   unsigned j = i;
> @@ -2425,10 +2526,10 @@ dt_simplify::gen (FILE *f, bool gimple)
>                         {
>                           fprintf (f, "\n");
>                           output_line_directive (f, 
> s->ifexpr_vec[j].location);
> -                         fprintf (f, "&& ");
> +                         fprintf_indent (f, indent + 4, "&& ");
>                         }
>                       fprintf (f, "(");
> -                     s->ifexpr_vec[j].cexpr->gen_transform (f, NULL,
> +                     s->ifexpr_vec[j].cexpr->gen_transform (f, 0, NULL,
>                                                              true, 1, "type",
>                                                              NULL);
>                       fprintf (f, ")");
> @@ -2441,7 +2542,8 @@ dt_simplify::gen (FILE *f, bool gimple)
>               fprintf (f, ")\n");
>             }
>         }
> -      fprintf (f, "{\n");
> +      fprintf_indent (f, indent + 2, "{\n");
> +      indent += 4;
>        n_braces++;
>      }
>
> @@ -2456,15 +2558,18 @@ dt_simplify::gen (FILE *f, bool gimple)
>      {
>        for (unsigned i = 0; i < as_a <expr *> (s->match)->ops.length (); ++i)
>         if (cinfo.force_no_side_effects & (1 << i))
> -         fprintf (f, "if (TREE_SIDE_EFFECTS (op%d)) return NULL_TREE;\n", i);
> +         fprintf_indent (f, indent,
> +                         "if (TREE_SIDE_EFFECTS (op%d)) return NULL_TREE;\n",
> +                         i);
>        for (int i = 0; i <= s->capture_max; ++i)
>         if (cinfo.info[i].cse_p)
>           ;
>         else if (cinfo.info[i].force_no_side_effects_p
>                  && (cinfo.info[i].toplevel_msk
>                      & cinfo.force_no_side_effects) == 0)
> -         fprintf (f, "if (TREE_SIDE_EFFECTS (captures[%d])) "
> -                  "return NULL_TREE;\n", i);
> +         fprintf_indent (f, indent,
> +                         "if (TREE_SIDE_EFFECTS (captures[%d])) "
> +                         "return NULL_TREE;\n", i);
>         else if ((cinfo.info[i].toplevel_msk
>                   & cinfo.force_no_side_effects) != 0)
>           /* Mark capture as having no side-effects if we had to verify
> @@ -2472,7 +2577,7 @@ dt_simplify::gen (FILE *f, bool gimple)
>           cinfo.info[i].force_no_side_effects_p = true;
>      }
>
> -  fprintf (f, "if (dump_file && (dump_flags & TDF_DETAILS)) "
> +  fprintf_indent (f, indent, "if (dump_file && (dump_flags & TDF_DETAILS)) "
>            "fprintf (dump_file, \"Applying pattern ");
>    output_line_directive (f, s->result_location, true);
>    fprintf (f, ", %%s:%%d\\n\", __FILE__, __LINE__);\n");
> @@ -2481,7 +2586,7 @@ dt_simplify::gen (FILE *f, bool gimple)
>    if (!result)
>      {
>        /* If there is no result then this is a predicate implementation.  */
> -      fprintf (f, "return true;\n");
> +      fprintf_indent (f, indent, "return true;\n");
>      }
>    else if (gimple)
>      {
> @@ -2495,18 +2600,17 @@ dt_simplify::gen (FILE *f, bool gimple)
>           expr *e = as_a <expr *> (result);
>           bool is_predicate = is_a <predicate_id *> (e->operation);
>           if (!is_predicate)
> -           fprintf (f, "*res_code = %s;\n",
> -                    *e->operation == CONVERT_EXPR
> -                    ? "NOP_EXPR" : e->operation->id);
> +           fprintf_indent (f, indent, "*res_code = %s;\n",
> +                           *e->operation == CONVERT_EXPR
> +                           ? "NOP_EXPR" : e->operation->id);
>           for (unsigned j = 0; j < e->ops.length (); ++j)
>             {
>               char dest[32];
> -             snprintf (dest, 32, "  res_ops[%d]", j);
> +             snprintf (dest, 32, "res_ops[%d]", j);
>               const char *optype
>                 = get_operand_type (e->operation,
>                                     "type", e->expr_type,
> -                                   j == 0
> -                                   ? NULL : "TREE_TYPE (res_ops[0])");
> +                                   j == 0 ? NULL : "TREE_TYPE (res_ops[0])");
>               /* We need to expand GENERIC conditions we captured from
>                  COND_EXPRs.  */
>               bool expand_generic_cond_exprs_p
> @@ -2517,38 +2621,46 @@ dt_simplify::gen (FILE *f, bool gimple)
>                    && ((!(*e->operation == COND_EXPR)
>                         && !(*e->operation == VEC_COND_EXPR))
>                        || j != 0));
> -             e->ops[j]->gen_transform (f, dest, true, 1, optype, &cinfo,
> +             e->ops[j]->gen_transform (f, indent, dest, true, 1, optype,
> +                                       &cinfo,
>                                         indexes, expand_generic_cond_exprs_p);
>             }
>
>           /* Re-fold the toplevel result.  It's basically an embedded
>              gimple_build w/o actually building the stmt.  */
>           if (!is_predicate)
> -           fprintf (f, "gimple_resimplify%d (seq, res_code, type, "
> -                    "res_ops, valueize);\n", e->ops.length ());
> +           fprintf_indent (f, indent,
> +                           "gimple_resimplify%d (seq, res_code, type, "
> +                           "res_ops, valueize);\n", e->ops.length ());
>         }
>        else if (result->type == operand::OP_CAPTURE
>                || result->type == operand::OP_C_EXPR)
>         {
> -         result->gen_transform (f, "res_ops[0]", true, 1, "type",
> +         result->gen_transform (f, indent, "res_ops[0]", true, 1, "type",
>                                  &cinfo, indexes, false);
> -         fprintf (f, "*res_code = TREE_CODE (res_ops[0]);\n");
> +         fprintf_indent (f, indent, "*res_code = TREE_CODE (res_ops[0]);\n");
>           if (is_a <capture *> (result)
>               && cinfo.info[as_a <capture *> 
> (result)->where].cond_expr_cond_p)
>             {
>               /* ???  Stupid tcc_comparison GENERIC trees in COND_EXPRs.  Deal
>                  with substituting a capture of that.  */
> -             fprintf (f, "if (COMPARISON_CLASS_P (res_ops[0]))\n"
> -                      "  {\n"
> -                      "    tree tem = res_ops[0];\n"
> -                      "    res_ops[0] = TREE_OPERAND (tem, 0);\n"
> -                      "    res_ops[1] = TREE_OPERAND (tem, 1);\n"
> -                      "  }\n");
> +             fprintf_indent (f, indent,
> +                             "if (COMPARISON_CLASS_P (res_ops[0]))\n");
> +             fprintf_indent (f, indent,
> +                             "  {\n");
> +             fprintf_indent (f, indent,
> +                             "    tree tem = res_ops[0];\n");
> +             fprintf_indent (f, indent,
> +                             "    res_ops[0] = TREE_OPERAND (tem, 0);\n");
> +             fprintf_indent (f, indent,
> +                             "    res_ops[1] = TREE_OPERAND (tem, 1);\n");
> +             fprintf_indent (f, indent,
> +                             "  }\n");
>             }
>         }
>        else
>         gcc_unreachable ();
> -      fprintf (f, "return true;\n");
> +      fprintf_indent (f, indent, "return true;\n");
>      }
>    else /* GENERIC */
>      {
> @@ -2564,9 +2676,14 @@ dt_simplify::gen (FILE *f, bool gimple)
>               {
>                 if (!cinfo.info[i].force_no_side_effects_p
>                     && cinfo.info[i].result_use_count > 1)
> -                 fprintf (f, "  if (TREE_SIDE_EFFECTS (captures[%d]))\n"
> -                          "    captures[%d] = save_expr (captures[%d]);\n",
> -                          i, i, i);
> +                 {
> +                   fprintf_indent (f, indent,
> +                                   "if (TREE_SIDE_EFFECTS (captures[%d]))\n",
> +                                   i);
> +                   fprintf_indent (f, indent,
> +                                   "  captures[%d] = save_expr 
> (captures[%d]);\n",
> +                                   i, i);
> +                 }
>               }
>           for (unsigned j = 0; j < e->ops.length (); ++j)
>             {
> @@ -2575,38 +2692,41 @@ dt_simplify::gen (FILE *f, bool gimple)
>                 snprintf (dest, 32, "res_ops[%d]", j);
>               else
>                 {
> -                 fprintf (f, "   tree res_op%d;\n", j);
> -                 snprintf (dest, 32, "  res_op%d", j);
> +                 fprintf_indent (f, indent, "tree res_op%d;\n", j);
> +                 snprintf (dest, 32, "res_op%d", j);
>                 }
>               const char *optype
>                 = get_operand_type (e->operation,
>                                     "type", e->expr_type,
>                                     j == 0
>                                     ? NULL : "TREE_TYPE (res_op0)");
> -             e->ops[j]->gen_transform (f, dest, false, 1, optype,
> +             e->ops[j]->gen_transform (f, indent, dest, false, 1, optype,
>                                         &cinfo, indexes);
>             }
>           if (is_predicate)
> -           fprintf (f, "return true;\n");
> +           fprintf_indent (f, indent, "return true;\n");
>           else
>             {
> -             fprintf (f, "  tree res;\n");
> +             fprintf_indent (f, indent, "tree res;\n");
>               /* Re-fold the toplevel result.  Use non_lvalue to
>                  build NON_LVALUE_EXPRs so they get properly
>                  ignored when in GIMPLE form.  */
>               if (*e->operation == NON_LVALUE_EXPR)
> -               fprintf (f, "  res = non_lvalue_loc (loc, res_op0);\n");
> +               fprintf_indent (f, indent,
> +                               "res = non_lvalue_loc (loc, res_op0);\n");
>               else
>                 {
>                   if (e->operation->kind == id_base::CODE)
> -                   fprintf (f, "  res = fold_build%d_loc (loc, %s, type",
> -                            e->ops.length (),
> -                            *e->operation == CONVERT_EXPR
> -                            ? "NOP_EXPR" : e->operation->id);
> +                   fprintf_indent (f, indent,
> +                                   "res = fold_build%d_loc (loc, %s, type",
> +                                   e->ops.length (),
> +                                   *e->operation == CONVERT_EXPR
> +                                   ? "NOP_EXPR" : e->operation->id);
>                   else
> -                   fprintf (f, "  res = build_call_expr_loc "
> -                            "(loc, builtin_decl_implicit (%s), %d",
> -                            e->operation->id, e->ops.length());
> +                   fprintf_indent (f, indent,
> +                                   "res = build_call_expr_loc "
> +                                   "(loc, builtin_decl_implicit (%s), %d",
> +                                   e->operation->id, e->ops.length());
>                   for (unsigned j = 0; j < e->ops.length (); ++j)
>                     fprintf (f, ", res_op%d", j);
>                   fprintf (f, ");\n");
> @@ -2617,8 +2737,8 @@ dt_simplify::gen (FILE *f, bool gimple)
>                || result->type == operand::OP_C_EXPR)
>
>         {
> -         fprintf (f, "  tree res;\n");
> -         s->result->gen_transform (f, " res", false, 1, "type",
> +         fprintf_indent (f, indent, "tree res;\n");
> +         s->result->gen_transform (f, indent, "res", false, 1, "type",
>                                     &cinfo, indexes);
>         }
>        else
> @@ -2632,19 +2752,28 @@ dt_simplify::gen (FILE *f, bool gimple)
>               if (!cinfo.info[i].force_no_side_effects_p
>                   && !cinfo.info[i].expr_p
>                   && cinfo.info[i].result_use_count == 0)
> -               fprintf (f, "  if (TREE_SIDE_EFFECTS (captures[%d]))\n"
> -                        "    res = build2_loc (loc, COMPOUND_EXPR, type,"
> -                        " fold_ignored_result (captures[%d]), res);\n",
> -                        i, i);
> +               {
> +                 fprintf_indent (f, indent,
> +                                 "if (TREE_SIDE_EFFECTS (captures[%d]))\n",
> +                                 i);
> +                 fprintf_indent (f, indent + 2,
> +                                 "res = build2_loc (loc, COMPOUND_EXPR, 
> type, "
> +                                 "fold_ignored_result (captures[%d]), 
> res);\n",
> +                                 i);
> +               }
>             }
> -         fprintf (f, "  return res;\n");
> +         fprintf_indent (f, indent, "return res;\n");
>         }
>      }
>
>    for (unsigned i = 0; i < n_braces; ++i)
> -    fprintf (f, "}\n");
> +    {
> +      fprintf_indent (f, indent - 2, "}\n");
> +      indent -= 4;
> +    }
>
> -  fprintf (f, "}\n");
> +  indent -= 2;
> +  fprintf_indent (f, indent, "}\n");
>  }
>
>  /* Main entry to generate code for matching GIMPLE IL off the decision
> @@ -2664,8 +2793,8 @@ decision_tree::gen_gimple (FILE *f)
>        fprintf (f, ")\n");
>        fprintf (f, "{\n");
>
> -      fprintf (f, "switch (code.get_rep())\n"
> -              "{\n");
> +      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]);
> @@ -2675,20 +2804,20 @@ decision_tree::gen_gimple (FILE *f)
>
>           if (*e->operation == CONVERT_EXPR
>               || *e->operation == NOP_EXPR)
> -           fprintf (f, "CASE_CONVERT:\n");
> +           fprintf (f, "      CASE_CONVERT:\n");
>           else
> -           fprintf (f, "case %s%s:\n",
> +           fprintf (f, "      case %s%s:\n",
>                      is_a <fn_id *> (e->operation) ? "-" : "",
>                      e->operation->id);
> -         fprintf (f, "{\n");
> -         dop->gen_kids (f, true);
> -         fprintf (f, "break;\n");
> -         fprintf (f, "}\n");
> +         fprintf (f,   "        {\n");
> +         dop->gen_kids (f, 10, true);
> +         fprintf (f,   "          break;\n");
> +         fprintf (f,   "        }\n");
>         }
> -      fprintf (f, "default:;\n"
> -              "}\n");
> +      fprintf (f,       "      default:;\n"
> +                       "    }\n");
>
> -      fprintf (f, "return false;\n");
> +      fprintf (f, "  return false;\n");
>        fprintf (f, "}\n");
>      }
>  }
> @@ -2709,8 +2838,8 @@ decision_tree::gen_generic (FILE *f)
>        fprintf (f, ")\n");
>        fprintf (f, "{\n");
>
> -      fprintf (f, "switch (code)\n"
> -              "{\n");
> +      fprintf (f, "  switch (code)\n"
> +                 "    {\n");
>        for (unsigned i = 0; i < root->kids.length (); i++)
>         {
>           dt_operand *dop = static_cast<dt_operand *>(root->kids[i]);
> @@ -2725,18 +2854,18 @@ decision_tree::gen_generic (FILE *f)
>
>           operator_id *op_id = static_cast <operator_id *> (e->operation);
>           if (op_id->code == NOP_EXPR || op_id->code == CONVERT_EXPR)
> -           fprintf (f, "CASE_CONVERT:\n");
> +           fprintf (f, "      CASE_CONVERT:\n");
>           else
> -           fprintf (f, "case %s:\n", e->operation->id);
> -         fprintf (f, "{\n");
> -         dop->gen_kids (f, false);
> -         fprintf (f, "break;\n"
> -                  "}\n");
> +           fprintf (f, "      case %s:\n", e->operation->id);
> +         fprintf (f,   "        {\n");
> +         dop->gen_kids (f, 10, false);
> +         fprintf (f,   "          break;\n"
> +                       "        }\n");
>         }
> -      fprintf (f, "default:;\n"
> -              "}\n");
> +      fprintf (f, "      default:;\n"
> +                 "    }\n");
>
> -      fprintf (f, "return NULL_TREE;\n");
> +      fprintf (f, "  return NULL_TREE;\n");
>        fprintf (f, "}\n");
>      }
>  }
> @@ -2752,13 +2881,13 @@ write_predicate (FILE *f, predicate_id *
>            p->nargs > 0 ? ", tree *res_ops" : "",
>            gimple ? ", tree (*valueize)(tree)" : "");
>    /* Conveniently make 'type' available.  */
> -  fprintf (f, "tree type = TREE_TYPE (t);\n");
> +  fprintf_indent (f, 2, "tree type = TREE_TYPE (t);\n");
>
>    if (!gimple)
> -    fprintf (f, "if (TREE_SIDE_EFFECTS (t)) return false;\n");
> -  dt.root->gen_kids (f, gimple);
> +    fprintf_indent (f, 2, "if (TREE_SIDE_EFFECTS (t)) return false;\n");
> +  dt.root->gen_kids (f, 2, gimple);
>
> -  fprintf (f, "return false;\n"
> +  fprintf_indent (f, 2, "return false;\n"
>            "}\n");
>  }
>

Reply via email to