On 09/03/2018 02:54 PM, Martin Liška wrote:
> On 09/03/2018 02:41 PM, Richard Biener wrote:
>> On Mon, 3 Sep 2018, Martin Liška wrote:
>>
>>> On 04/25/2018 01:42 PM, Richard Biener wrote:
>>>>
>>>> The following patch^Whack splits $subject files into three, one
>>>> for the predicates (due to an implementation detail) and two for
>>>> the rest - for now into similar LOC size files.
>>>>
>>>> I'd like to get help on the makefile changes to make them less
>>>> verbose, somehow globbing the -[12p] parts.
>>>>
>>>> Also you can see the split point is manually chosen which means
>>>> it will bitrot.  Timings for the stage2 compiles on a x86_64
>>>> box are
>>>>
>>>> gimple-match-p.c   5s
>>>> generic-match-p.c  3s
>>>> gimple-match-1.c  85s
>>>> generic-match-1.c 56s
>>>> gimple-match-2.c  82s
>>>> generic-match-2.c 31s
>>>>
>>>> the required header files are quite big (and of course everything
>>>> needs to be exported without the analysis work becoming too cumbersome),
>>>> it's 3342 LOC for gimple-match-head.h and 1556 LOC for 
>>>> generic-match-head.h
>>>>
>>>> The machine I tested is quite fast so the 80ish second timings are still
>>>> too slow I guess and thus splitting up into four files for gimple and
>>>> three files for generic looks better.
>>>>
>>>> Note we lose some inlining/cloning capability in the splitting process
>>>> (I see quite a bit of constprop/isra work being done on the generated 
>>>> files).  I didn't try to measure the runtime impact though.
>>>>
>>>> The patch still needs quite some TLC, it really is a bit hacky but I'd
>>>> like to get feedback on the approach and I didn't want to spend time
>>>> on programatically finding optimal split points (so everything is output
>>>> in the same semi-random order as before).
>>>>
>>>> Richard.
>>>>
>>>> <insert ChangeLog here>
>>>>
>>>> Index: gcc/genmatch.c
>>>> ===================================================================
>>>> --- gcc/genmatch.c (revision 259638)
>>>> +++ gcc/genmatch.c (working copy)
>>>> @@ -1641,7 +1641,7 @@ struct decision_tree
>>>>    dt_node *root;
>>>>  
>>>>    void insert (struct simplify *, unsigned);
>>>> -  void gen (FILE *f, bool gimple);
>>>> +  void gen (const char *, FILE *, vec<unsigned long> &, bool gimple);
>>>>    void print (FILE *f = stderr);
>>>>  
>>>>    decision_tree () { root = new dt_node (dt_node::DT_NODE, NULL); }
>>>> @@ -3608,12 +3608,25 @@ sinfo_hashmap_traits::equal_keys (const
>>>>    return compare_op (v->s->result, v->s, candidate->s->result, 
>>>> candidate->s);
>>>>  }
>>>>  
>>>> +/* Write the common header for the GIMPLE/GENERIC IL matching routines.  
>>>> */
>>>> +
>>>> +static void
>>>> +write_header (FILE *f, bool gimple)
>>>> +{
>>>> +  fprintf (f, "/* Generated automatically by the program `genmatch' 
>>>> from\n");
>>>> +  fprintf (f, "   a IL pattern matching and simplification description.  
>>>> */\n");
>>>> +
>>>> +  /* Include the header instead of writing it awkwardly quoted here.  */
>>>> +  fprintf (f, "\n#include \"%s-match-head.c\"\n",
>>>> +     gimple ? "gimple" : "generic");
>>>> +}
>>>>  
>>>>  /* Main entry to generate code for matching GIMPLE IL off the decision
>>>>     tree.  */
>>>>  
>>>>  void
>>>> -decision_tree::gen (FILE *f, bool gimple)
>>>> +decision_tree::gen (const char *output, FILE *headerf,
>>>> +              vec<unsigned long> &pieces, bool gimple)
>>>>  {
>>>>    sinfo_map_t si;
>>>>  
>>>> @@ -3624,6 +3637,34 @@ decision_tree::gen (FILE *f, bool gimple
>>>>       gimple ? "GIMPLE" : "GENERIC", 
>>>>       root->num_leafs, root->max_level, root->total_size);
>>>>  
>>>> +  FILE *f;
>>>> +  char *outputtem = NULL;
>>>> +  if (output)
>>>> +    outputtem = XNEWVEC (char, strlen (output) + strlen ("-1.c") + 1);
>>>> +
>>>> +  unsigned do_header = headerf ? 2 : 1;
>>>> +  unsigned n_per_part = -1U;
>>>> +  unsigned file_n = output ? 1 : 2;
>>>> +  do
>>>> +    {
>>>> +      unsigned n_fn = 0;
>>>> +      do_header--;
>>>> +
>>>> +      if (do_header)
>>>> +  f = headerf;
>>>> +      else if (!output)
>>>> +  f = stdout;
>>>> +      else
>>>> +  {
>>>> +    sprintf (outputtem, "%s-%d.c", output, file_n++);
>>>> +    f = fopen (outputtem, "w");
>>>> +    if (!f)
>>>> +      {
>>>> +        perror ("failed to open output file");
>>>> +        exit(1);
>>>> +      }
>>>> +    write_header (f, gimple);
>>>> +  }
>>>>    /* First split out the transform part of equal leafs.  */
>>>>    unsigned rcnt = 0;
>>>>    unsigned fcnt = 1;
>>>> @@ -3643,21 +3684,22 @@ decision_tree::gen (FILE *f, bool gimple
>>>>    }
>>>>  
>>>>        /* Generate a split out function with the leaf transform code.  */
>>>> +      if (do_header || !output)
>>>>        s->fname = xasprintf ("%s_simplify_%u", gimple ? "gimple" : 
>>>> "generic",
>>>>                        fcnt++);
>>>>        if (gimple)
>>>> -  fprintf (f, "\nstatic bool\n"
>>>> +  fprintf (f, "\n%sbool\n"
>>>>             "%s (code_helper *res_code, tree *res_ops,\n"
>>>>             "                 gimple_seq *seq, tree (*valueize)(tree) "
>>>>             "ATTRIBUTE_UNUSED,\n"
>>>>             "                 const tree ARG_UNUSED (type), tree 
>>>> *ARG_UNUSED "
>>>>             "(captures)\n",
>>>> -           s->fname);
>>>> +           headerf ? "" : "static ", s->fname);
>>>>        else
>>>>    {
>>>> -    fprintf (f, "\nstatic tree\n"
>>>> +    fprintf (f, "\n%stree\n"
>>>>               "%s (location_t ARG_UNUSED (loc), const tree ARG_UNUSED 
>>>> (type),\n",
>>>> -             (*iter).second->fname);
>>>> +             headerf ? "" : "static ", (*iter).second->fname);
>>>>      for (unsigned i = 0;
>>>>           i < as_a <expr *>(s->s->s->match)->ops.length (); ++i)
>>>>        fprintf (f, " tree ARG_UNUSED (op%d),", i);
>>>> @@ -3674,7 +3716,12 @@ decision_tree::gen (FILE *f, bool gimple
>>>>        fprintf (f, ", const combined_fn ARG_UNUSED (%s)",
>>>>                 s->s->s->for_subst_vec[i].first->id);
>>>>    }
>>>> -
>>>> +      n_fn++;
>>>> +      if (do_header)
>>>> +  {
>>>> +    fprintf (f, ");\n");
>>>> +    continue;
>>>> +  }
>>>>        fprintf (f, ")\n{\n");
>>>>        s->s->gen_1 (f, 2, gimple, s->s->s->result);
>>>>        if (gimple)
>>>> @@ -3682,7 +3729,22 @@ decision_tree::gen (FILE *f, bool gimple
>>>>        else
>>>>    fprintf (f, "  return NULL_TREE;\n");
>>>>        fprintf (f, "}\n");
>>>> +
>>>> +      if (n_fn == pieces[file_n - 2])
>>>> +  {
>>>> +    fclose (f);
>>>> +    sprintf (outputtem, "%s-%d.c", output, file_n++);
>>>> +    f = fopen (outputtem, "w");
>>>> +    if (!f)
>>>> +      {
>>>> +        perror ("failed to open output file");
>>>> +        exit(1);
>>>> +      }
>>>> +    write_header (f, gimple);
>>>> +    n_fn = 0;
>>>> +  }
>>>>      }
>>>> +  if (!do_header)
>>>>    fprintf (stderr, "removed %u duplicate tails\n", rcnt);
>>>>  
>>>>    for (unsigned n = 1; n <= 3; ++n)
>>>> @@ -3702,20 +3764,26 @@ decision_tree::gen (FILE *f, bool gimple
>>>>        continue;
>>>>  
>>>>      if (gimple)
>>>> -      fprintf (f, "\nstatic bool\n"
>>>> +      fprintf (f, "\n%sbool\n"
>>>>                 "gimple_simplify_%s (code_helper *res_code, tree 
>>>> *res_ops,\n"
>>>>                 "                 gimple_seq *seq, tree (*valueize)(tree) "
>>>>                 "ATTRIBUTE_UNUSED,\n"
>>>>                 "                 code_helper ARG_UNUSED (code), tree "
>>>>                 "ARG_UNUSED (type)\n",
>>>> -               e->operation->id);
>>>> +               headerf ? "" : "static ", e->operation->id);
>>>>      else
>>>> -      fprintf (f, "\nstatic tree\n"
>>>> +      fprintf (f, "\n%stree\n"
>>>>                 "generic_simplify_%s (location_t ARG_UNUSED (loc), enum "
>>>>                 "tree_code ARG_UNUSED (code), const tree ARG_UNUSED 
>>>> (type)",
>>>> -               e->operation->id);
>>>> +               headerf ? "" : "static ", e->operation->id);
>>>>      for (unsigned i = 0; i < n; ++i)
>>>>        fprintf (f, ", tree op%d", i);
>>>> +    n_fn++;
>>>> +    if (do_header)
>>>> +      {
>>>> +        fprintf (f, ");\n");
>>>> +        continue;
>>>> +      }
>>>>      fprintf (f, ")\n");
>>>>      fprintf (f, "{\n");
>>>>      dop->gen_kids (f, 2, gimple);
>>>> @@ -3724,21 +3792,43 @@ decision_tree::gen (FILE *f, bool gimple
>>>>      else
>>>>        fprintf (f, "  return NULL_TREE;\n");
>>>>      fprintf (f, "}\n");
>>>> +
>>>> +      if (n_fn == pieces[file_n - 2])
>>>> +  {
>>>> +    fclose (f);
>>>> +    sprintf (outputtem, "%s-%d.c", output, file_n++);
>>>> +    f = fopen (outputtem, "w");
>>>> +    if (!f)
>>>> +      {
>>>> +        perror ("failed to open output file");
>>>> +        exit(1);
>>>> +      }
>>>> +    write_header (f, gimple);
>>>> +    n_fn = 0;
>>>> +  }
>>>> +
>>>>    }
>>>>  
>>>>        /* Then generate the main entry with the outermost switch and
>>>>           tail-calls to the split-out functions.  */
>>>>        if (gimple)
>>>> -  fprintf (f, "\nstatic bool\n"
>>>> +  fprintf (f, "\n%sbool\n"
>>>>             "gimple_simplify (code_helper *res_code, tree *res_ops,\n"
>>>>             "                 gimple_seq *seq, tree (*valueize)(tree),\n"
>>>> -           "                 code_helper code, const tree type");
>>>> +           "                 code_helper code, const tree type",
>>>> +           headerf ? "" : "static ");
>>>>        else
>>>>    fprintf (f, "\ntree\n"
>>>>             "generic_simplify (location_t loc, enum tree_code code, "
>>>>             "const tree type ATTRIBUTE_UNUSED");
>>>>        for (unsigned i = 0; i < n; ++i)
>>>>    fprintf (f, ", tree op%d", i);
>>>> +      n_fn++;
>>>> +      if (do_header)
>>>> +  {
>>>> +    fprintf (f, ");\n");
>>>> +    continue;
>>>> +  }
>>>>        fprintf (f, ")\n");
>>>>        fprintf (f, "{\n");
>>>>  
>>>> @@ -3786,19 +3876,46 @@ decision_tree::gen (FILE *f, bool gimple
>>>>        else
>>>>    fprintf (f, "  return NULL_TREE;\n");
>>>>        fprintf (f, "}\n");
>>>> +      if (n_fn == pieces[file_n - 2])
>>>> +  {
>>>> +    fclose (f);
>>>> +    sprintf (outputtem, "%s-%d.c", output, file_n++);
>>>> +    f = fopen (outputtem, "w");
>>>> +    if (!f)
>>>> +      {
>>>> +        perror ("failed to open output file");
>>>> +        exit(1);
>>>> +      }
>>>> +    write_header (f, gimple);
>>>> +    n_fn = 0;
>>>> +  }
>>>> +    }
>>>> +
>>>> +  n_per_part = n_fn / 4 + 1;
>>>>      }
>>>> +  while (do_header);
>>>> +  if (output)
>>>> +    fclose (f);
>>>>  }
>>>>  
>>>>  /* Output code to implement the predicate P from the decision tree DT.  */
>>>>  
>>>>  void
>>>> -write_predicate (FILE *f, predicate_id *p, decision_tree &dt, bool gimple)
>>>> +write_predicate (FILE *f, predicate_id *p, decision_tree &dt, bool gimple,
>>>> +           bool for_header)
>>>>  {
>>>>    fprintf (f, "\nbool\n"
>>>> -     "%s%s (tree t%s%s)\n"
>>>> -     "{\n", gimple ? "gimple_" : "tree_", p->id,
>>>> +     "%s%s (tree t%s%s)",
>>>> +     gimple ? "gimple_" : "tree_", p->id,
>>>>       p->nargs > 0 ? ", tree *res_ops" : "",
>>>>       gimple ? ", tree (*valueize)(tree) ATTRIBUTE_UNUSED" : "");
>>>> +  if (for_header)
>>>> +    {
>>>> +      fprintf (f, ";\n");
>>>> +      return;
>>>> +    }
>>>> +
>>>> +  fprintf (f, "\n{\n");
>>>>    /* Conveniently make 'type' available.  */
>>>>    fprintf_indent (f, 2, "const tree type = TREE_TYPE (t);\n");
>>>>  
>>>> @@ -3810,18 +3927,6 @@ write_predicate (FILE *f, predicate_id *
>>>>       "}\n");
>>>>  }
>>>>  
>>>> -/* Write the common header for the GIMPLE/GENERIC IL matching routines.  
>>>> */
>>>> -
>>>> -static void
>>>> -write_header (FILE *f, const char *head)
>>>> -{
>>>> -  fprintf (f, "/* Generated automatically by the program `genmatch' 
>>>> from\n");
>>>> -  fprintf (f, "   a IL pattern matching and simplification description.  
>>>> */\n");
>>>> -
>>>> -  /* Include the header instead of writing it awkwardly quoted here.  */
>>>> -  fprintf (f, "\n#include \"%s\"\n", head);
>>>> -}
>>>> -
>>>>  
>>>>  
>>>>  /* AST parsing.  */
>>>> @@ -4969,6 +5074,9 @@ main (int argc, char **argv)
>>>>  
>>>>    bool gimple = true;
>>>>    char *input = argv[argc-1];
>>>> +  char *output = NULL;
>>>> +  char *header = NULL;
>>>> +  auto_vec<unsigned long> pieces;
>>>>    for (int i = 1; i < argc - 1; ++i)
>>>>      {
>>>>        if (strcmp (argv[i], "--gimple") == 0)
>>>> @@ -4979,13 +5087,25 @@ main (int argc, char **argv)
>>>>    verbose = 1;
>>>>        else if (strcmp (argv[i], "-vv") == 0)
>>>>    verbose = 2;
>>>> +      else if (strcmp (argv[i], "-c") == 0)
>>>> +  {
>>>> +    char *endp;
>>>> +    output = argv[++i];
>>>> +    while (i + 1 < argc - 1
>>>> +           && ISDIGIT (argv[i + 1][0]))
>>>> +      pieces.safe_push (strtoul (argv[++i], &endp, 10));
>>>> +  }
>>>> +      else if (strcmp (argv[i], "-h") == 0)
>>>> +  header = argv[++i];
>>>>        else
>>>>    {
>>>>      fprintf (stderr, "Usage: genmatch "
>>>> -             "[--gimple] [--generic] [-v[v]] input\n");
>>>> +             "[--gimple] [--generic] [-v[v]] "
>>>> +             "[-c output num...] [-h header] input\n");
>>>>      return 1;
>>>>    }
>>>>      }
>>>> +  pieces.safe_push (-1UL);
>>>>  
>>>>    line_table = XCNEW (struct line_maps);
>>>>    linemap_init (line_table, 0);
>>>> @@ -5039,10 +5159,32 @@ add_operator (VIEW_CONVERT2, "view_conve
>>>>    /* Parse ahead!  */
>>>>    parser p (r);
>>>>  
>>>> -  if (gimple)
>>>> -    write_header (stdout, "gimple-match-head.c");
>>>> +  FILE *f, *headerf = NULL;
>>>> +  if (!output)
>>>> +    f = stdout;
>>>>    else
>>>> -    write_header (stdout, "generic-match-head.c");
>>>> +    {
>>>> +      char *outputtem = XNEWVEC (char, strlen (output) + strlen ("-1.c") 
>>>> + 1);
>>>> +      sprintf (outputtem, "%s-p.c", output);
>>>> +      f = fopen (outputtem, "w");
>>>> +      if (!f)
>>>> +  {
>>>> +    perror ("failed to open output file");
>>>> +    exit(1);
>>>> +  }
>>>> +    }
>>>> +  if (header)
>>>> +    {
>>>> +      headerf = fopen (header, "w");
>>>> +      if (!headerf)
>>>> +  {
>>>> +    perror ("failed to open output file");
>>>> +    exit(1);
>>>> +  }
>>>> +    }
>>>> +
>>>> +  fprintf (f, "#define GENFOO_MAIN_FILE 1\n");
>>>> +  write_header (f, gimple);
>>>>  
>>>>    /* Go over all predicates defined with patterns and perform
>>>>       lowering and code generation.  */
>>>> @@ -5062,8 +5204,12 @@ add_operator (VIEW_CONVERT2, "view_conve
>>>>        if (verbose == 2)
>>>>    dt.print (stderr);
>>>>  
>>>> -      write_predicate (stdout, pred, dt, gimple);
>>>> +      if (header)
>>>> +  write_predicate (headerf, pred, dt, gimple, true);
>>>> +      write_predicate (f, pred, dt, gimple, false);
>>>>      }
>>>> +  if (output)
>>>> +    fclose (f);
>>>>  
>>>>    /* Lower the main simplifiers and generate code for them.  */
>>>>    lower (p.simplifiers, gimple);
>>>> @@ -5079,7 +5225,10 @@ add_operator (VIEW_CONVERT2, "view_conve
>>>>    if (verbose == 2)
>>>>      dt.print (stderr);
>>>>  
>>>> -  dt.gen (stdout, gimple);
>>>> +  dt.gen (output, headerf, pieces, gimple);
>>>> +
>>>> +  if (header)
>>>> +    fclose (headerf);
>>>>  
>>>>    /* Finalize.  */
>>>>    cpp_finish (r, NULL);
>>>> Index: gcc/gimple-match-head.c
>>>> ===================================================================
>>>> --- gcc/gimple-match-head.c        (revision 259638)
>>>> +++ gcc/gimple-match-head.c        (working copy)
>>>> @@ -40,21 +40,10 @@ along with GCC; see the file COPYING3.
>>>>  #include "case-cfn-macros.h"
>>>>  #include "gimplify.h"
>>>>  #include "optabs-tree.h"
>>>> +#include "gimple-match-head.h"
>>>>  
>>>>  
>>>> -/* Forward declarations of the private auto-generated matchers.
>>>> -   They expect valueized operands in canonical order and do not
>>>> -   perform simplification of all-constant operands.  */
>>>> -static bool gimple_simplify (code_helper *, tree *,
>>>> -                       gimple_seq *, tree (*)(tree),
>>>> -                       code_helper, tree, tree);
>>>> -static bool gimple_simplify (code_helper *, tree *,
>>>> -                       gimple_seq *, tree (*)(tree),
>>>> -                       code_helper, tree, tree, tree);
>>>> -static bool gimple_simplify (code_helper *, tree *,
>>>> -                       gimple_seq *, tree (*)(tree),
>>>> -                       code_helper, tree, tree, tree, tree);
>>>> -
>>>> +#if GENFOO_MAIN_FILE
>>>>  
>>>>  /* Return whether T is a constant that we'll dispatch to fold to
>>>>     evaluate fully constant expressions.  */
>>>> @@ -772,6 +761,8 @@ gimple_simplify (gimple *stmt,
>>>>    return false;
>>>>  }
>>>>  
>>>> +#endif
>>>> +
>>>>  
>>>>  /* Helper for the autogenerated code, valueize OP.  */
>>>>  
>>>> Index: gcc/generic-match-head.c
>>>> ===================================================================
>>>> --- gcc/generic-match-head.c       (revision 259638)
>>>> +++ gcc/generic-match-head.c       (working copy)
>>>> @@ -34,6 +34,7 @@ along with GCC; see the file COPYING3.
>>>>  #include "case-cfn-macros.h"
>>>>  #include "gimplify.h"
>>>>  #include "optabs-tree.h"
>>>> +#include "generic-match-head.h"
>>>>  
>>>>  
>>>>  /* Routine to determine if the types T1 and T2 are effectively
>>>> Index: gcc/Makefile.in
>>>> ===================================================================
>>>> --- gcc/Makefile.in        (revision 259638)
>>>> +++ gcc/Makefile.in        (working copy)
>>>> @@ -216,8 +216,12 @@ gengtype-lex.o-warn = -Wno-error
>>>>  libgcov-util.o-warn = -Wno-error
>>>>  libgcov-driver-tool.o-warn = -Wno-error
>>>>  libgcov-merge-tool.o-warn = -Wno-error
>>>> -gimple-match.o-warn = -Wno-unused
>>>> -generic-match.o-warn = -Wno-unused
>>>> +gimple-match-p.o-warn = -Wno-unused
>>>> +gimple-match-1.o-warn = -Wno-unused
>>>> +gimple-match-2.o-warn = -Wno-unused
>>>> +generic-match-p.o-warn = -Wno-unused
>>>> +generic-match-1.o-warn = -Wno-unused
>>>> +generic-match-2.o-warn = -Wno-unused
>>>>  dfp.o-warn = -Wno-strict-aliasing
>>>>  
>>>>  # All warnings have to be shut off in stage1 if the compiler used then
>>>> @@ -771,7 +775,7 @@ COMPILERS = @all_compilers@
>>>>  
>>>>  # List of things which should already be built whenever we try to use xgcc
>>>>  # to compile anything (without linking).
>>>> -GCC_PASSES=xgcc$(exeext) specs
>>>> +GCC_PASSES=xgcc$(exeext)
>>>>  
>>>>  # Directory to link to, when using the target `maketest'.
>>>>  DIR = ../gcc
>>>> @@ -1207,8 +1211,12 @@ C_COMMON_OBJS = c-family/c-common.o c-fa
>>>>  # will build them sooner, because they are large and otherwise tend to be
>>>>  # the last objects to finish building.
>>>>  OBJS = \
>>>> -  gimple-match.o \
>>>> -  generic-match.o \
>>>> +  gimple-match-p.o \
>>>> +  generic-match-p.o \
>>>> +  gimple-match-1.o \
>>>> +  generic-match-1.o \
>>>> +  gimple-match-2.o \
>>>> +  generic-match-2.o \
>>>>    insn-attrtab.o \
>>>>    insn-automata.o \
>>>>    insn-dfatab.o \
>>>> @@ -1654,7 +1662,9 @@ MOSTLYCLEANFILES = insn-flags.h insn-con
>>>>   insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
>>>>   insn-attr.h insn-attr-common.h insn-attrtab.c insn-dfatab.c \
>>>>   insn-latencytab.c insn-opinit.c insn-opinit.h insn-preds.c 
>>>> insn-constants.h \
>>>> - tm-preds.h tm-constrs.h checksum-options gimple-match.c generic-match.c \
>>>> + tm-preds.h tm-constrs.h checksum-options gimple-match-head.h 
>>>> gimple-match-1.c \
>>>> + gimple-match-2.c gimple-match-p.c generic-match-head.h generic-match-1.c 
>>>> \
>>>> + generic-match-p.c generic-match-2.c \
>>>>   tree-check.h min-insn-modes.c insn-modes.c insn-modes.h 
>>>> insn-modes-inline.h \
>>>>   genrtl.h gt-*.h gtype-*.h gtype-desc.c gtyp-input.list \
>>>>   case-cfn-macros.h cfn-operators.pd \
>>>> @@ -1899,7 +1909,7 @@ all.internal: start.encap rest.encap doc
>>>>  all.cross: native gcc-cross$(exeext) cpp$(exeext) specs \
>>>>    libgcc-support lang.all.cross doc selftest @GENINSRC@ srcextra
>>>>  # This is what must be made before installing GCC and converting 
>>>> libraries.
>>>> -start.encap: native xgcc$(exeext) cpp$(exeext) specs \
>>>> +start.encap: native xgcc$(exeext) cpp$(exeext) \
>>>>    libgcc-support lang.start.encap @GENINSRC@ srcextra
>>>>  # These can't be made until after GCC can run.
>>>>  rest.encap: lang.rest.encap
>>>> @@ -2054,7 +2064,7 @@ checksum-options:
>>>>  libgcc-support: libgcc.mvars stmp-int-hdrs $(TCONFIG_H) \
>>>>    $(MACHMODE_H) gcov-iov.h
>>>>  
>>>> -libgcc.mvars: config.status Makefile specs xgcc$(exeext)
>>>> +libgcc.mvars: config.status Makefile xgcc$(exeext)
>>>>    : > tmp-libgcc.mvars
>>>>    echo GCC_CFLAGS = '$(GCC_CFLAGS)' >> tmp-libgcc.mvars
>>>>    echo INHIBIT_LIBC_CFLAGS = '$(INHIBIT_LIBC_CFLAGS)' >> tmp-libgcc.mvars
>>>> @@ -2271,8 +2281,9 @@ $(common_out_object_file): $(common_out_
>>>>  .PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \
>>>>    insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \
>>>>    insn-attr.h insn-attr-common.h insn-attrtab.c insn-dfatab.c \
>>>> -  insn-latencytab.c insn-preds.c gimple-match.c generic-match.c \
>>>> -  insn-target-def.h
>>>> +  insn-latencytab.c insn-preds.c gimple-match-head.h gimple-match-1.c \
>>>> +  gimple-match-2.c generic-match-head.h generic-match-1.c 
>>>> generic-match-2.c \
>>>> +  gimple-match-p.c generic-match-p.c insn-target-def.h
>>>>  
>>>>  # Dependencies for the md file.  The first time through, we just assume
>>>>  # the md file itself and the generated dependency file (in order to get
>>>> @@ -2504,18 +2515,36 @@ s-tm-texi: build/genhooks$(build_exeext)
>>>>      false; \
>>>>    fi
>>>>  
>>>> -gimple-match.c: s-match gimple-match-head.c ; @true
>>>> -generic-match.c: s-match generic-match-head.c ; @true
>>>> +gimple-match-p.c: s-match gimple-match-head.c ; @true
>>>> +gimple-match-1.c: s-match gimple-match-head.c ; @true
>>>> +gimple-match-2.c: s-match gimple-match-head.c ; @true
>>>> +generic-match-p.c: s-match generic-match-head.c ; @true
>>>> +generic-match-1.c: s-match generic-match-head.c ; @true
>>>> +generic-match-2.c: s-match generic-match-head.c ; @true
>>>>  
>>>>  s-match: build/genmatch$(build_exeext) $(srcdir)/match.pd cfn-operators.pd
>>>> -  $(RUN_GEN) build/genmatch$(build_exeext) --gimple $(srcdir)/match.pd \
>>>> -      > tmp-gimple-match.c
>>>> -  $(RUN_GEN) build/genmatch$(build_exeext) --generic $(srcdir)/match.pd \
>>>> -      > tmp-generic-match.c
>>>> -  $(SHELL) $(srcdir)/../move-if-change tmp-gimple-match.c \
>>>> -                                          gimple-match.c
>>>> -  $(SHELL) $(srcdir)/../move-if-change tmp-generic-match.c \
>>>> -                                          generic-match.c
>>>> +  $(RUN_GEN) build/genmatch$(build_exeext) --gimple \
>>>> +      -h tmp-gimple-match-head.h -c tmp-gimple-match 460 \
>>>> +      $(srcdir)/match.pd
>>>> +  $(RUN_GEN) build/genmatch$(build_exeext) --generic \
>>>> +      -h tmp-generic-match-head.h -c tmp-generic-match 290 \
>>>> +      $(srcdir)/match.pd
>>>> +  $(SHELL) $(srcdir)/../move-if-change tmp-gimple-match-head.h \
>>>> +                                          gimple-match-head.h
>>>> +  $(SHELL) $(srcdir)/../move-if-change tmp-gimple-match-1.c \
>>>> +                                          gimple-match-1.c
>>>> +  $(SHELL) $(srcdir)/../move-if-change tmp-gimple-match-2.c \
>>>> +                                          gimple-match-2.c
>>>> +  $(SHELL) $(srcdir)/../move-if-change tmp-gimple-match-p.c \
>>>> +                                          gimple-match-p.c
>>>> +  $(SHELL) $(srcdir)/../move-if-change tmp-generic-match-head.h \
>>>> +                                          generic-match-head.h
>>>> +  $(SHELL) $(srcdir)/../move-if-change tmp-generic-match-1.c \
>>>> +                                          generic-match-1.c
>>>> +  $(SHELL) $(srcdir)/../move-if-change tmp-generic-match-2.c \
>>>> +                                          generic-match-2.c
>>>> +  $(SHELL) $(srcdir)/../move-if-change tmp-generic-match-p.c \
>>>> +                                          generic-match-p.c
>>>>    $(STAMP) s-match
>>>>  
>>>>  GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
>>>>
>>>
>>> Hi.
>>>
>>> I took a look at gimple-match.c and what about doing a split in following 
>>> way:
>>> - all gimple_simplify_$number going into a separate header file (~12000 LOC)
>>> - all the function can be marked as static inline
>>> - all other gimple_simplify_$code can be split into arbitrary number of 
>>> parts
>>> - we have 287 such functions where each function only calls 
>>> gimple_simplify_$number and
>>>   on average there 10 of such calls
>>> - that would allow to remove most of gimple_simplify_$number functions from 
>>> the header file
>>>
>>> Richi do you think it will be viable?
>>
>> That relies on the cgraph code DCEing all unused gimple_simplify_$number
>> functions from the header fast as they are now effectively duplicated
>> into all parts, correct?  Also I'm not sure if we actually want to inline
>> them...  they are split out to get both code size and compile-time
>> under control.  Unfortunately we have still high max-inline-insns-single
>> which is used for inline marked functions.
>>
>> Eventually doing a "proper" partitioning algorithm is viable, that is,
>> partition based on gimple_simplify_$code and put gimple_simplify_$number
>> where they are used.  If they are used across different codes then
>> merge those partitions.  I guess you'll see that that'll merge the 
>> biggest _$code parititions :/ (MINUS_EXPR, PLUS_EXPR).
> 
> Yes, that should be much better. I'm attaching a 'callgraph' that was done by 
> grepping.
> Function starting at the beginning of a line is function definition, with an 
> indentation
> one can see calls.
> 
> Yes, PLUS and MINUS call ~20 gimple_simplify_$number calls.
> 
> Well, generating some simple call graph format for the source file and a 
> source file
> annotation of nodes can be input for a partitioning tool that can do the 
> split.
> 
> Issue with the generated files is that one needs to fix the most offenders 
> (*-match.c, insn-recog.c, insn-emit.c, ..)
> in order to see some improvement.
> 
> Looking at insn-recog.c, maybe similar callgraph-based split can be done for 
> recog_$number functions?
> 
> Martin
> 
>>
>> Richard.
>>
> 

I'm sending SCC components for gimple-match.c. So there are 3 quite big one and 
rest is small. It's questionable
whether partitioning based on that will provide desired speed up?

Martin
total functions: 590

['gimple_simplify_ABS_EXPR']
['gimple_simplify_CFN_BUILT_IN_COSF']
['gimple_simplify_CFN_BUILT_IN_COS']
['gimple_simplify_CFN_BUILT_IN_COSL']
['gimple_simplify_CFN_COS']
['gimple_simplify_CFN_BUILT_IN_COSHF']
['gimple_simplify_CFN_BUILT_IN_COSH']
['gimple_simplify_CFN_BUILT_IN_COSHL']
['gimple_simplify_CFN_BUILT_IN_CCOSF']
['gimple_simplify_CFN_BUILT_IN_CCOS']
['gimple_simplify_CFN_BUILT_IN_CCOSL']
['gimple_simplify_CFN_BUILT_IN_CCOSHF']
['gimple_simplify_CFN_BUILT_IN_CCOSH']
['gimple_simplify_CFN_BUILT_IN_CCOSHL']
['gimple_simplify_CFN_BUILT_IN_CABSF']
['gimple_simplify_CFN_BUILT_IN_CABS']
['gimple_simplify_CFN_BUILT_IN_CABSL']
['gimple_simplify_VIEW_CONVERT_EXPR']
['gimple_simplify_FLOAT_EXPR']
['gimple_simplify_FIX_TRUNC_EXPR']
['gimple_simplify_PAREN_EXPR']
['gimple_simplify_REALPART_EXPR']
['gimple_simplify_IMAGPART_EXPR']
['gimple_simplify_CFN_BUILT_IN_EXPF']
['gimple_simplify_CFN_BUILT_IN_EXP']
['gimple_simplify_CFN_BUILT_IN_EXPL']
['gimple_simplify_CFN_EXP']
['gimple_simplify_CFN_BUILT_IN_EXP2F']
['gimple_simplify_CFN_BUILT_IN_EXP2']
['gimple_simplify_CFN_BUILT_IN_EXP2L']
['gimple_simplify_CFN_EXP2']
['gimple_simplify_CFN_BUILT_IN_EXP10F']
['gimple_simplify_CFN_BUILT_IN_EXP10']
['gimple_simplify_CFN_BUILT_IN_EXP10L']
['gimple_simplify_CFN_EXP10']
['gimple_simplify_CFN_BUILT_IN_POW10F']
['gimple_simplify_CFN_BUILT_IN_POW10']
['gimple_simplify_CFN_BUILT_IN_POW10L']
['gimple_simplify_CFN_BUILT_IN_SQRTF']
['gimple_simplify_CFN_BUILT_IN_SQRT']
['gimple_simplify_CFN_BUILT_IN_SQRTL']
['gimple_simplify_CFN_SQRT']
['gimple_simplify_CFN_BUILT_IN_CBRTF']
['gimple_simplify_CFN_BUILT_IN_CBRT']
['gimple_simplify_CFN_BUILT_IN_CBRTL']
['gimple_simplify_CFN_BUILT_IN_CEXPF']
['gimple_simplify_CFN_BUILT_IN_CEXP']
['gimple_simplify_CFN_BUILT_IN_CEXPL']
['gimple_simplify_CFN_BUILT_IN_IFLOORF']
['gimple_simplify_CFN_BUILT_IN_LFLOORF']
['gimple_simplify_CFN_BUILT_IN_LLFLOORF']
['gimple_simplify_CFN_BUILT_IN_ICEILF']
['gimple_simplify_CFN_BUILT_IN_LCEILF']
['gimple_simplify_CFN_BUILT_IN_LLCEILF']
['gimple_simplify_CFN_BUILT_IN_IROUNDF']
['gimple_simplify_CFN_BUILT_IN_LROUNDF']
['gimple_simplify_CFN_BUILT_IN_LLROUNDF']
['gimple_simplify_CFN_BUILT_IN_IRINTF']
['gimple_simplify_CFN_BUILT_IN_LRINTF']
['gimple_simplify_CFN_BUILT_IN_LLRINTF']
['gimple_simplify_CFN_BUILT_IN_CPROJF']
['gimple_simplify_CFN_BUILT_IN_CPROJ']
['gimple_simplify_CFN_BUILT_IN_CPROJL']
['gimple_simplify_CFN_BUILT_IN_SIGNBITF']
['gimple_simplify_CFN_BUILT_IN_SIGNBIT']
['gimple_simplify_CFN_BUILT_IN_SIGNBITL']
['gimple_simplify_POINTER_PLUS_EXPR']
['gimple_simplify_POINTER_DIFF_EXPR']
['gimple_simplify_CFN_BUILT_IN_HYPOTF']
['gimple_simplify_CFN_BUILT_IN_HYPOT']
['gimple_simplify_CFN_BUILT_IN_HYPOTL']
['gimple_simplify_COMPLEX_EXPR']
['gimple_simplify_TRUTH_ORIF_EXPR']
['gimple_simplify_TRUTH_OR_EXPR']
['gimple_simplify_BIT_FIELD_REF']
['gimple_simplify_CONJ_EXPR', 'gimple_simplify_286']
['gimple_simplify_NEGATE_EXPR', 'gimple_simplify_56', 'gimple_simplify_202']
['gimple_simplify_CFN_FMS', 'gimple_simplify_239', 'gimple_simplify_234']
['gimple_simplify_CFN_FNMA', 'gimple_simplify_268', 'gimple_simplify_259']
['gimple_simplify_CFN_FNMS', 'gimple_simplify_274', 'gimple_simplify_272']
['gimple_simplify_CONVERT_EXPR', 'gimple_simplify_58', 'gimple_simplify_29', 
'gimple_simplify_236']
['gimple_simplify_CFN_BUILT_IN_POWIL', 'gimple_simplify_CFN_BUILT_IN_POWIF', 
'gimple_simplify_CFN_BUILT_IN_POWI', 'gimple_simplify_108']
['gimple_simplify_CFN_TAN', 'gimple_simplify_CFN_BUILT_IN_TANL', 
'gimple_simplify_CFN_BUILT_IN_TANF', 'gimple_simplify_CFN_BUILT_IN_TAN', 
'gimple_simplify_77']
['gimple_simplify_CFN_BUILT_IN_POPCOUNTLL', 
'gimple_simplify_CFN_BUILT_IN_POPCOUNTL', 
'gimple_simplify_CFN_BUILT_IN_POPCOUNTIMAX', 
'gimple_simplify_CFN_BUILT_IN_POPCOUNT', 'gimple_simplify_214']
['gimple_simplify_COND_EXPR', 'gimple_simplify_71', 'gimple_simplify_275', 
'gimple_simplify_261', 'gimple_simplify_13']
['gimple_simplify_CFN_BUILT_IN_BSWAP64', 
'gimple_simplify_CFN_BUILT_IN_BSWAP32', 'gimple_simplify_CFN_BUILT_IN_BSWAP16', 
'gimple_simplify_195', 'gimple_simplify_174', 'gimple_simplify_171']
['gimple_simplify_CFN_POW', 'gimple_simplify_CFN_BUILT_IN_POWL', 
'gimple_simplify_CFN_BUILT_IN_POWF', 'gimple_simplify_CFN_BUILT_IN_POW', 
'gimple_simplify_70', 'gimple_simplify_45', 'gimple_simplify_40']
['gimple_simplify_CFN_FMA', 'gimple_simplify_CFN_BUILT_IN_FMAL', 
'gimple_simplify_CFN_BUILT_IN_FMAF', 'gimple_simplify_CFN_BUILT_IN_FMA', 
'gimple_simplify_231', 'gimple_simplify_229', 'gimple_simplify_224']
['gimple_simplify_RDIV_EXPR', 'gimple_simplify_4', 'gimple_simplify_287', 
'gimple_simplify_285', 'gimple_simplify_255', 'gimple_simplify_219', 
'gimple_simplify_212', 'gimple_simplify_21', 'gimple_simplify_164']
['gimple_simplify_VEC_COND_EXPR', 'gimple_simplify_74', 'gimple_simplify_269', 
'gimple_simplify_266', 'gimple_simplify_209', 'gimple_simplify_165', 
'gimple_simplify_161', 'gimple_simplify_122', 'gimple_simplify_106']
['gimple_simplify_CFN_LDEXP', 'gimple_simplify_CFN_BUILT_IN_SCALBNL', 
'gimple_simplify_CFN_BUILT_IN_SCALBNF', 'gimple_simplify_CFN_BUILT_IN_SCALBN', 
'gimple_simplify_CFN_BUILT_IN_SCALBLNL', 
'gimple_simplify_CFN_BUILT_IN_SCALBLNF', 
'gimple_simplify_CFN_BUILT_IN_SCALBLN', 'gimple_simplify_CFN_BUILT_IN_LDEXPL', 
'gimple_simplify_CFN_BUILT_IN_LDEXPF', 'gimple_simplify_CFN_BUILT_IN_LDEXP', 
'gimple_simplify_46', 'gimple_simplify_119']
['gimple_simplify_BIT_NOT_EXPR', 'gimple_simplify_75', 'gimple_simplify_61', 
'gimple_simplify_302', 'gimple_simplify_282', 'gimple_simplify_247', 
'gimple_simplify_24', 'gimple_simplify_207', 'gimple_simplify_167', 
'gimple_simplify_144', 'gimple_simplify_143', 'gimple_simplify_126', 
'gimple_simplify_123']
['gimple_simplify_CFN_LOG2', 'gimple_simplify_CFN_LOG10', 
'gimple_simplify_CFN_LOG', 'gimple_simplify_CFN_BUILT_IN_LOGL', 
'gimple_simplify_CFN_BUILT_IN_LOGF', 'gimple_simplify_CFN_BUILT_IN_LOG2L', 
'gimple_simplify_CFN_BUILT_IN_LOG2F', 'gimple_simplify_CFN_BUILT_IN_LOG2', 
'gimple_simplify_CFN_BUILT_IN_LOG10L', 'gimple_simplify_CFN_BUILT_IN_LOG10F', 
'gimple_simplify_CFN_BUILT_IN_LOG10', 'gimple_simplify_CFN_BUILT_IN_LOG', 
'gimple_simplify_93']
['gimple_simplify_TRUNC_MOD_EXPR', 'gimple_simplify_ROUND_MOD_EXPR', 
'gimple_simplify_FLOOR_MOD_EXPR', 'gimple_simplify_CEIL_MOD_EXPR', 
'gimple_simplify_91', 'gimple_simplify_9', 'gimple_simplify_84', 
'gimple_simplify_76', 'gimple_simplify_57', 'gimple_simplify_290', 
'gimple_simplify_213', 'gimple_simplify_194', 'gimple_simplify_131']
['gimple_simplify_RSHIFT_EXPR', 'gimple_simplify_RROTATE_EXPR', 
'gimple_simplify_LSHIFT_EXPR', 'gimple_simplify_LROTATE_EXPR', 
'gimple_simplify_73', 'gimple_simplify_59', 'gimple_simplify_22', 
'gimple_simplify_190', 'gimple_simplify_179', 'gimple_simplify_170', 
'gimple_simplify_115', 'gimple_simplify_107', 'gimple_simplify_101']
['gimple_simplify_CFN_COPYSIGN', 'gimple_simplify_CFN_BUILT_IN_COPYSIGNL', 
'gimple_simplify_CFN_BUILT_IN_COPYSIGNF64X', 
'gimple_simplify_CFN_BUILT_IN_COPYSIGNF64', 
'gimple_simplify_CFN_BUILT_IN_COPYSIGNF32X', 
'gimple_simplify_CFN_BUILT_IN_COPYSIGNF32', 
'gimple_simplify_CFN_BUILT_IN_COPYSIGNF16', 
'gimple_simplify_CFN_BUILT_IN_COPYSIGNF128X', 
'gimple_simplify_CFN_BUILT_IN_COPYSIGNF128', 
'gimple_simplify_CFN_BUILT_IN_COPYSIGNF', 
'gimple_simplify_CFN_BUILT_IN_COPYSIGN', 'gimple_simplify_49', 
'gimple_simplify_38', 'gimple_simplify_260', 'gimple_simplify_136', 
'gimple_simplify_125']
['gimple_simplify_CFN_BUILT_IN_LROUNDL', 'gimple_simplify_CFN_BUILT_IN_LROUND', 
'gimple_simplify_CFN_BUILT_IN_LRINTL', 'gimple_simplify_CFN_BUILT_IN_LRINT', 
'gimple_simplify_CFN_BUILT_IN_LLROUNDL', 
'gimple_simplify_CFN_BUILT_IN_LLROUND', 'gimple_simplify_CFN_BUILT_IN_LLRINTL', 
'gimple_simplify_CFN_BUILT_IN_LLRINT', 'gimple_simplify_CFN_BUILT_IN_LLFLOORL', 
'gimple_simplify_CFN_BUILT_IN_LLFLOOR', 'gimple_simplify_CFN_BUILT_IN_LLCEILL', 
'gimple_simplify_CFN_BUILT_IN_LLCEIL', 'gimple_simplify_CFN_BUILT_IN_LFLOORL', 
'gimple_simplify_CFN_BUILT_IN_LFLOOR', 'gimple_simplify_CFN_BUILT_IN_LCEILL', 
'gimple_simplify_CFN_BUILT_IN_LCEIL', 'gimple_simplify_CFN_BUILT_IN_IROUNDL', 
'gimple_simplify_CFN_BUILT_IN_IROUND', 'gimple_simplify_CFN_BUILT_IN_IRINTL', 
'gimple_simplify_CFN_BUILT_IN_IRINT', 'gimple_simplify_CFN_BUILT_IN_IFLOORL', 
'gimple_simplify_CFN_BUILT_IN_IFLOOR', 'gimple_simplify_CFN_BUILT_IN_ICEILL', 
'gimple_simplify_CFN_BUILT_IN_ICEIL', 'gimple_simplify_205', 
'gimple_simplify_158']
['gimple_simplify_TRUNC_DIV_EXPR', 'gimple_simplify_ROUND_DIV_EXPR', 
'gimple_simplify_MULT_EXPR', 'gimple_simplify_FLOOR_DIV_EXPR', 
'gimple_simplify_EXACT_DIV_EXPR', 'gimple_simplify_CEIL_DIV_EXPR', 
'gimple_simplify_92', 'gimple_simplify_72', 'gimple_simplify_35', 
'gimple_simplify_294', 'gimple_simplify_273', 'gimple_simplify_27', 
'gimple_simplify_264', 'gimple_simplify_262', 'gimple_simplify_26', 
'gimple_simplify_243', 'gimple_simplify_240', 'gimple_simplify_222', 
'gimple_simplify_20', 'gimple_simplify_192', 'gimple_simplify_189', 
'gimple_simplify_181', 'gimple_simplify_18', 'gimple_simplify_155', 
'gimple_simplify_145', 'gimple_simplify_141', 'gimple_simplify_132', 
'gimple_simplify_129', 'gimple_simplify_128', 'gimple_simplify_111']
['gimple_simplify_MIN_EXPR', 'gimple_simplify_MAX_EXPR', 
'gimple_simplify_CFN_FMIN', 'gimple_simplify_CFN_FMAX', 
'gimple_simplify_CFN_BUILT_IN_FMINL', 'gimple_simplify_CFN_BUILT_IN_FMINF64X', 
'gimple_simplify_CFN_BUILT_IN_FMINF64', 
'gimple_simplify_CFN_BUILT_IN_FMINF32X', 
'gimple_simplify_CFN_BUILT_IN_FMINF32', 'gimple_simplify_CFN_BUILT_IN_FMINF16', 
'gimple_simplify_CFN_BUILT_IN_FMINF128X', 
'gimple_simplify_CFN_BUILT_IN_FMINF128', 'gimple_simplify_CFN_BUILT_IN_FMINF', 
'gimple_simplify_CFN_BUILT_IN_FMIN', 'gimple_simplify_CFN_BUILT_IN_FMAXL', 
'gimple_simplify_CFN_BUILT_IN_FMAXF64X', 
'gimple_simplify_CFN_BUILT_IN_FMAXF64', 
'gimple_simplify_CFN_BUILT_IN_FMAXF32X', 
'gimple_simplify_CFN_BUILT_IN_FMAXF32', 'gimple_simplify_CFN_BUILT_IN_FMAXF16', 
'gimple_simplify_CFN_BUILT_IN_FMAXF128X', 
'gimple_simplify_CFN_BUILT_IN_FMAXF128', 'gimple_simplify_CFN_BUILT_IN_FMAXF', 
'gimple_simplify_CFN_BUILT_IN_FMAX', 'gimple_simplify_89', 
'gimple_simplify_82', 'gimple_simplify_299', 'gimple_simplify_295', 
'gimple_simplify_248', 'gimple_simplify_246', 'gimple_simplify_245', 
'gimple_simplify_149', 'gimple_simplify_11']
['gimple_simplify_CFN_TRUNC', 'gimple_simplify_CFN_ROUND', 
'gimple_simplify_CFN_RINT', 'gimple_simplify_CFN_NEARBYINT', 
'gimple_simplify_CFN_FLOOR', 'gimple_simplify_CFN_CEIL', 
'gimple_simplify_CFN_BUILT_IN_TRUNCL', 
'gimple_simplify_CFN_BUILT_IN_TRUNCF64X', 
'gimple_simplify_CFN_BUILT_IN_TRUNCF64', 
'gimple_simplify_CFN_BUILT_IN_TRUNCF32X', 
'gimple_simplify_CFN_BUILT_IN_TRUNCF32', 
'gimple_simplify_CFN_BUILT_IN_TRUNCF16', 
'gimple_simplify_CFN_BUILT_IN_TRUNCF128X', 
'gimple_simplify_CFN_BUILT_IN_TRUNCF128', 
'gimple_simplify_CFN_BUILT_IN_TRUNCF', 'gimple_simplify_CFN_BUILT_IN_TRUNC', 
'gimple_simplify_CFN_BUILT_IN_ROUNDL', 
'gimple_simplify_CFN_BUILT_IN_ROUNDF64X', 
'gimple_simplify_CFN_BUILT_IN_ROUNDF64', 
'gimple_simplify_CFN_BUILT_IN_ROUNDF32X', 
'gimple_simplify_CFN_BUILT_IN_ROUNDF32', 
'gimple_simplify_CFN_BUILT_IN_ROUNDF16', 
'gimple_simplify_CFN_BUILT_IN_ROUNDF128X', 
'gimple_simplify_CFN_BUILT_IN_ROUNDF128', 
'gimple_simplify_CFN_BUILT_IN_ROUNDF', 'gimple_simplify_CFN_BUILT_IN_ROUND', 
'gimple_simplify_CFN_BUILT_IN_RINTL', 'gimple_simplify_CFN_BUILT_IN_RINTF64X', 
'gimple_simplify_CFN_BUILT_IN_RINTF64', 
'gimple_simplify_CFN_BUILT_IN_RINTF32X', 
'gimple_simplify_CFN_BUILT_IN_RINTF32', 'gimple_simplify_CFN_BUILT_IN_RINTF16', 
'gimple_simplify_CFN_BUILT_IN_RINTF128X', 
'gimple_simplify_CFN_BUILT_IN_RINTF128', 'gimple_simplify_CFN_BUILT_IN_RINTF', 
'gimple_simplify_CFN_BUILT_IN_RINT', 'gimple_simplify_CFN_BUILT_IN_NEARBYINTL', 
'gimple_simplify_CFN_BUILT_IN_NEARBYINTF64X', 
'gimple_simplify_CFN_BUILT_IN_NEARBYINTF64', 
'gimple_simplify_CFN_BUILT_IN_NEARBYINTF32X', 
'gimple_simplify_CFN_BUILT_IN_NEARBYINTF32', 
'gimple_simplify_CFN_BUILT_IN_NEARBYINTF16', 
'gimple_simplify_CFN_BUILT_IN_NEARBYINTF128X', 
'gimple_simplify_CFN_BUILT_IN_NEARBYINTF128', 
'gimple_simplify_CFN_BUILT_IN_NEARBYINTF', 
'gimple_simplify_CFN_BUILT_IN_NEARBYINT', 
'gimple_simplify_CFN_BUILT_IN_FLOORL', 
'gimple_simplify_CFN_BUILT_IN_FLOORF64X', 
'gimple_simplify_CFN_BUILT_IN_FLOORF64', 
'gimple_simplify_CFN_BUILT_IN_FLOORF32X', 
'gimple_simplify_CFN_BUILT_IN_FLOORF32', 
'gimple_simplify_CFN_BUILT_IN_FLOORF16', 
'gimple_simplify_CFN_BUILT_IN_FLOORF128X', 
'gimple_simplify_CFN_BUILT_IN_FLOORF128', 
'gimple_simplify_CFN_BUILT_IN_FLOORF', 'gimple_simplify_CFN_BUILT_IN_FLOOR', 
'gimple_simplify_CFN_BUILT_IN_CEILL', 'gimple_simplify_CFN_BUILT_IN_CEILF64X', 
'gimple_simplify_CFN_BUILT_IN_CEILF64', 
'gimple_simplify_CFN_BUILT_IN_CEILF32X', 
'gimple_simplify_CFN_BUILT_IN_CEILF32', 'gimple_simplify_CFN_BUILT_IN_CEILF16', 
'gimple_simplify_CFN_BUILT_IN_CEILF128X', 
'gimple_simplify_CFN_BUILT_IN_CEILF128', 'gimple_simplify_CFN_BUILT_IN_CEILF', 
'gimple_simplify_CFN_BUILT_IN_CEIL', 'gimple_simplify_297', 
'gimple_simplify_25', 'gimple_simplify_201', 'gimple_simplify_177', 
'gimple_simplify_113']
['gimple_simplify_UNORDERED_EXPR', 'gimple_simplify_UNLT_EXPR', 
'gimple_simplify_UNLE_EXPR', 'gimple_simplify_UNGT_EXPR', 
'gimple_simplify_UNGE_EXPR', 'gimple_simplify_UNEQ_EXPR', 
'gimple_simplify_ORDERED_EXPR', 'gimple_simplify_NE_EXPR', 
'gimple_simplify_LT_EXPR', 'gimple_simplify_LTGT_EXPR', 
'gimple_simplify_LE_EXPR', 'gimple_simplify_GT_EXPR', 
'gimple_simplify_GE_EXPR', 'gimple_simplify_EQ_EXPR', 'gimple_simplify_95', 
'gimple_simplify_94', 'gimple_simplify_90', 'gimple_simplify_88', 
'gimple_simplify_78', 'gimple_simplify_7', 'gimple_simplify_68', 
'gimple_simplify_64', 'gimple_simplify_6', 'gimple_simplify_55', 
'gimple_simplify_52', 'gimple_simplify_51', 'gimple_simplify_50', 
'gimple_simplify_47', 'gimple_simplify_41', 'gimple_simplify_39', 
'gimple_simplify_37', 'gimple_simplify_36', 'gimple_simplify_32', 
'gimple_simplify_31', 'gimple_simplify_3', 'gimple_simplify_293', 
'gimple_simplify_291', 'gimple_simplify_289', 'gimple_simplify_284', 
'gimple_simplify_283', 'gimple_simplify_28', 'gimple_simplify_270', 
'gimple_simplify_263', 'gimple_simplify_258', 'gimple_simplify_257', 
'gimple_simplify_254', 'gimple_simplify_253', 'gimple_simplify_252', 
'gimple_simplify_230', 'gimple_simplify_23', 'gimple_simplify_220', 
'gimple_simplify_216', 'gimple_simplify_210', 'gimple_simplify_204', 
'gimple_simplify_199', 'gimple_simplify_198', 'gimple_simplify_197', 
'gimple_simplify_193', 'gimple_simplify_191', 'gimple_simplify_188', 
'gimple_simplify_187', 'gimple_simplify_186', 'gimple_simplify_183', 
'gimple_simplify_180', 'gimple_simplify_178', 'gimple_simplify_176', 
'gimple_simplify_172', 'gimple_simplify_169', 'gimple_simplify_168', 
'gimple_simplify_166', 'gimple_simplify_157', 'gimple_simplify_154', 
'gimple_simplify_152', 'gimple_simplify_15', 'gimple_simplify_147', 
'gimple_simplify_146', 'gimple_simplify_142', 'gimple_simplify_140', 
'gimple_simplify_14', 'gimple_simplify_138', 'gimple_simplify_135', 
'gimple_simplify_134', 'gimple_simplify_127', 'gimple_simplify_121', 
'gimple_simplify_120', 'gimple_simplify_12', 'gimple_simplify_118', 
'gimple_simplify_117', 'gimple_simplify_110', 'gimple_simplify_104', 
'gimple_simplify_103', 'gimple_simplify_100', 'gimple_simplify_10', 
'gimple_simplify_1']
['gimple_simplify_PLUS_EXPR', 'gimple_simplify_MINUS_EXPR', 
'gimple_simplify_BIT_XOR_EXPR', 'gimple_simplify_BIT_IOR_EXPR', 
'gimple_simplify_BIT_AND_EXPR', 'gimple_simplify_99', 'gimple_simplify_98', 
'gimple_simplify_97', 'gimple_simplify_96', 'gimple_simplify_87', 
'gimple_simplify_86', 'gimple_simplify_85', 'gimple_simplify_83', 
'gimple_simplify_81', 'gimple_simplify_80', 'gimple_simplify_8', 
'gimple_simplify_79', 'gimple_simplify_69', 'gimple_simplify_67', 
'gimple_simplify_66', 'gimple_simplify_65', 'gimple_simplify_63', 
'gimple_simplify_62', 'gimple_simplify_60', 'gimple_simplify_54', 
'gimple_simplify_53', 'gimple_simplify_5', 'gimple_simplify_48', 
'gimple_simplify_44', 'gimple_simplify_43', 'gimple_simplify_42', 
'gimple_simplify_34', 'gimple_simplify_33', 'gimple_simplify_303', 
'gimple_simplify_301', 'gimple_simplify_300', 'gimple_simplify_30', 
'gimple_simplify_298', 'gimple_simplify_296', 'gimple_simplify_292', 
'gimple_simplify_288', 'gimple_simplify_281', 'gimple_simplify_280', 
'gimple_simplify_279', 'gimple_simplify_278', 'gimple_simplify_277', 
'gimple_simplify_276', 'gimple_simplify_271', 'gimple_simplify_267', 
'gimple_simplify_265', 'gimple_simplify_256', 'gimple_simplify_251', 
'gimple_simplify_250', 'gimple_simplify_249', 'gimple_simplify_244', 
'gimple_simplify_242', 'gimple_simplify_241', 'gimple_simplify_238', 
'gimple_simplify_237', 'gimple_simplify_235', 'gimple_simplify_233', 
'gimple_simplify_232', 'gimple_simplify_228', 'gimple_simplify_227', 
'gimple_simplify_226', 'gimple_simplify_225', 'gimple_simplify_223', 
'gimple_simplify_221', 'gimple_simplify_218', 'gimple_simplify_217', 
'gimple_simplify_215', 'gimple_simplify_211', 'gimple_simplify_208', 
'gimple_simplify_206', 'gimple_simplify_203', 'gimple_simplify_200', 
'gimple_simplify_2', 'gimple_simplify_196', 'gimple_simplify_19', 
'gimple_simplify_185', 'gimple_simplify_184', 'gimple_simplify_182', 
'gimple_simplify_175', 'gimple_simplify_173', 'gimple_simplify_17', 
'gimple_simplify_163', 'gimple_simplify_162', 'gimple_simplify_160', 
'gimple_simplify_16', 'gimple_simplify_159', 'gimple_simplify_156', 
'gimple_simplify_153', 'gimple_simplify_151', 'gimple_simplify_150', 
'gimple_simplify_148', 'gimple_simplify_139', 'gimple_simplify_137', 
'gimple_simplify_133', 'gimple_simplify_130', 'gimple_simplify_124', 
'gimple_simplify_116', 'gimple_simplify_114', 'gimple_simplify_112', 
'gimple_simplify_109', 'gimple_simplify_105', 'gimple_simplify_102']

SCC components size:
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
3
3
3
3
4
4
5
5
5
6
7
7
9
9
12
13
13
13
13
16
26
30
33
71
94
106

Reply via email to