LCOV - code coverage report
Current view: top level - gcc - tree-pretty-print.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 78.8 % 3439 2711
Test Date: 2026-09-19 16:22:48 Functions: 94.7 % 38 36
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* Pretty formatting of GENERIC trees in C syntax.
       2              :    Copyright (C) 2001-2026 Free Software Foundation, Inc.
       3              :    Adapted from c-pretty-print.cc by Diego Novillo <dnovillo@redhat.com>
       4              : 
       5              : This file is part of GCC.
       6              : 
       7              : GCC is free software; you can redistribute it and/or modify it under
       8              : the terms of the GNU General Public License as published by the Free
       9              : Software Foundation; either version 3, or (at your option) any later
      10              : version.
      11              : 
      12              : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      13              : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      14              : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      15              : for more details.
      16              : 
      17              : You should have received a copy of the GNU General Public License
      18              : along with GCC; see the file COPYING3.  If not see
      19              : <http://www.gnu.org/licenses/>.  */
      20              : 
      21              : #include "config.h"
      22              : #include "system.h"
      23              : #include "coretypes.h"
      24              : #include "backend.h"
      25              : #include "rtl.h"
      26              : #include "tree.h"
      27              : #include "predict.h"
      28              : #include "cgraph.h"
      29              : #include "tree-pretty-print.h"
      30              : #include "stor-layout.h"
      31              : #include "langhooks.h"
      32              : #include "tree-iterator.h"
      33              : #include "dumpfile.h"
      34              : #include "internal-fn.h"
      35              : #include "gomp-constants.h"
      36              : #include "gimple.h"
      37              : #include "fold-const.h"
      38              : #include "omp-general.h"
      39              : 
      40              : /* Routines in this file get invoked via the default tree printer
      41              :    used by diagnostics and thus they are called from pp_printf which
      42              :    isn't reentrant.  Avoid using pp_printf in this file.  */
      43              : #pragma GCC poison pp_printf
      44              : 
      45              : /* Disable warnings about quoting issues in the pp_xxx calls below
      46              :    that (intentionally) don't follow GCC diagnostic conventions.  */
      47              : #if __GNUC__ >= 10
      48              : #  pragma GCC diagnostic push
      49              : #  pragma GCC diagnostic ignored "-Wformat-diag"
      50              : #endif
      51              : 
      52              : /* Local functions, macros and variables.  */
      53              : static const char *op_symbol (const_tree, dump_flags_t = TDF_NONE);
      54              : static void newline_and_indent (pretty_printer *, int);
      55              : static void maybe_init_pretty_print (FILE *);
      56              : static void print_struct_decl (pretty_printer *, const_tree, int, dump_flags_t);
      57              : static void do_niy (pretty_printer *, const_tree, int, dump_flags_t);
      58              : 
      59              : #define INDENT(SPACE) do { \
      60              :   int i; for (i = 0; i<SPACE; i++) pp_space (pp); } while (0)
      61              : 
      62              : #define NIY do_niy (pp, node, spc, flags)
      63              : 
      64              : static pretty_printer *tree_pp;
      65              : 
      66              : /* Try to print something for an unknown tree code.  */
      67              : 
      68              : static void
      69        13277 : do_niy (pretty_printer *pp, const_tree node, int spc, dump_flags_t flags)
      70              : {
      71        13277 :   int i, len;
      72              : 
      73        13277 :   pp_string (pp, "<<< Unknown tree: ");
      74        13277 :   pp_string (pp, get_tree_code_name (TREE_CODE (node)));
      75              : 
      76        13277 :   if (EXPR_P (node))
      77              :     {
      78        13061 :       len = TREE_OPERAND_LENGTH (node);
      79        43174 :       for (i = 0; i < len; ++i)
      80              :         {
      81        17052 :           newline_and_indent (pp, spc+2);
      82        17052 :           dump_generic_node (pp, TREE_OPERAND (node, i), spc+2, flags, false);
      83              :         }
      84              :     }
      85              : 
      86        13277 :   pp_string (pp, " >>>");
      87        13277 : }
      88              : 
      89              : /* Debugging function to print out a generic expression.  */
      90              : 
      91              : DEBUG_FUNCTION void
      92            1 : debug_generic_expr (tree t)
      93              : {
      94            1 :   print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS);
      95            1 :   fprintf (stderr, "\n");
      96            1 : }
      97              : 
      98              : /* Debugging function to print out a generic statement.  */
      99              : 
     100              : DEBUG_FUNCTION void
     101            0 : debug_generic_stmt (tree t)
     102              : {
     103            0 :   print_generic_stmt (stderr, t, TDF_VOPS|TDF_MEMSYMS);
     104            0 :   fprintf (stderr, "\n");
     105            0 : }
     106              : 
     107              : /* Debugging function to print out a chain of trees .  */
     108              : 
     109              : DEBUG_FUNCTION void
     110            0 : debug_tree_chain (tree t)
     111              : {
     112            0 :   hash_set<tree> seen;
     113              : 
     114            0 :   while (t)
     115              :     {
     116            0 :       print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID);
     117            0 :       fprintf (stderr, " ");
     118            0 :       t = TREE_CHAIN (t);
     119            0 :       if (seen.add (t))
     120              :         {
     121            0 :           fprintf (stderr, "... [cycled back to ");
     122            0 :           print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID);
     123            0 :           fprintf (stderr, "]");
     124            0 :           break;
     125              :         }
     126              :     }
     127            0 :   fprintf (stderr, "\n");
     128            0 : }
     129              : 
     130              : /* Prints declaration DECL to the FILE with details specified by FLAGS.  */
     131              : void
     132       291590 : print_generic_decl (FILE *file, tree decl, dump_flags_t flags)
     133              : {
     134       291590 :   maybe_init_pretty_print (file);
     135       291590 :   print_declaration (tree_pp, decl, 2, flags);
     136       291590 :   pp_write_text_to_stream (tree_pp);
     137       291590 : }
     138              : 
     139              : /* Print tree T, and its successors, on file FILE.  FLAGS specifies details
     140              :    to show in the dump.  See TDF_* in dumpfile.h.  */
     141              : 
     142              : void
     143        71353 : print_generic_stmt (FILE *file, tree t, dump_flags_t flags)
     144              : {
     145        71353 :   maybe_init_pretty_print (file);
     146        71353 :   dump_generic_node (tree_pp, t, 0, flags, true);
     147        71353 :   pp_newline_and_flush (tree_pp);
     148        71353 : }
     149              : 
     150              : /* Print tree T, and its successors, on file FILE.  FLAGS specifies details
     151              :    to show in the dump.  See TDF_* in dumpfile.h.  The output is indented by
     152              :    INDENT spaces.  */
     153              : 
     154              : void
     155         6389 : print_generic_stmt_indented (FILE *file, tree t, dump_flags_t flags, int indent)
     156              : {
     157         6389 :   int i;
     158              : 
     159         6389 :   maybe_init_pretty_print (file);
     160              : 
     161        12778 :   for (i = 0; i < indent; i++)
     162            0 :     pp_space (tree_pp);
     163         6389 :   dump_generic_node (tree_pp, t, indent, flags, true);
     164         6389 :   pp_newline_and_flush (tree_pp);
     165         6389 : }
     166              : 
     167              : /* Print a single expression T on file FILE.  FLAGS specifies details to show
     168              :    in the dump.  See TDF_* in dumpfile.h.  */
     169              : 
     170              : void
     171      5786969 : print_generic_expr (FILE *file, tree t, dump_flags_t flags)
     172              : {
     173      5786969 :   maybe_init_pretty_print (file);
     174      5786969 :   dump_generic_node (tree_pp, t, 0, flags, false);
     175      5786969 :   pp_flush (tree_pp);
     176      5786969 : }
     177              : 
     178              : /* Print a single expression T to string, and return it.  The caller
     179              :    must free the returned memory.  */
     180              : 
     181              : char *
     182        62580 : print_generic_expr_to_str (tree t)
     183              : {
     184        62580 :   pretty_printer pp;
     185        62580 :   dump_generic_node (&pp, t, 0, TDF_VOPS|TDF_MEMSYMS, false);
     186        62580 :   return xstrdup (pp_formatted_text (&pp));
     187        62580 : }
     188              : 
     189              : /* Dump NAME, an IDENTIFIER_POINTER, sanitized so that D<num> sequences
     190              :    in it are replaced with Dxxxx, as long as they are at the start or
     191              :    preceded by $ and at the end or followed by $.  See make_fancy_name
     192              :    in tree-sra.cc.  */
     193              : 
     194              : static void
     195         2540 : dump_fancy_name (pretty_printer *pp, tree name)
     196              : {
     197         2540 :   int cnt = 0;
     198         2540 :   int length = IDENTIFIER_LENGTH (name);
     199         2540 :   const char *n = IDENTIFIER_POINTER (name);
     200         2540 :   do
     201              :     {
     202         2540 :       n = strchr (n, 'D');
     203         2540 :       if (n == NULL)
     204              :         break;
     205            0 :       if (ISDIGIT (n[1])
     206            0 :           && (n == IDENTIFIER_POINTER (name) || n[-1] == '$'))
     207              :         {
     208              :           int l = 2;
     209            0 :           while (ISDIGIT (n[l]))
     210            0 :             l++;
     211            0 :           if (n[l] == '\0' || n[l] == '$')
     212              :             {
     213            0 :               cnt++;
     214            0 :               length += 5 - l;
     215              :             }
     216            0 :           n += l;
     217              :         }
     218              :       else
     219            0 :         n++;
     220              :     }
     221              :   while (1);
     222         2540 :   if (cnt == 0)
     223              :     {
     224         2540 :       pp_tree_identifier (pp, name);
     225         2540 :       return;
     226              :     }
     227              : 
     228            0 :   char *str = XNEWVEC (char, length + 1);
     229            0 :   char *p = str;
     230            0 :   const char *q;
     231            0 :   q = n = IDENTIFIER_POINTER (name);
     232            0 :   do
     233              :     {
     234            0 :       q = strchr (q, 'D');
     235            0 :       if (q == NULL)
     236              :         break;
     237            0 :       if (ISDIGIT (q[1])
     238            0 :           && (q == IDENTIFIER_POINTER (name) || q[-1] == '$'))
     239              :         {
     240              :           int l = 2;
     241            0 :           while (ISDIGIT (q[l]))
     242            0 :             l++;
     243            0 :           if (q[l] == '\0' || q[l] == '$')
     244              :             {
     245            0 :               memcpy (p, n, q - n);
     246            0 :               memcpy (p + (q - n), "Dxxxx", 5);
     247            0 :               p += (q - n) + 5;
     248            0 :               n = q + l;
     249              :             }
     250            0 :           q += l;
     251              :         }
     252              :       else
     253            0 :         q++;
     254              :     }
     255              :   while (1);
     256            0 :   memcpy (p, n, IDENTIFIER_LENGTH (name) - (n - IDENTIFIER_POINTER (name)));
     257            0 :   str[length] = '\0';
     258            0 :   if (pp_translate_identifiers (pp))
     259              :     {
     260            0 :       const char *text = identifier_to_locale (str);
     261            0 :       pp_append_text (pp, text, text + strlen (text));
     262              :     }
     263              :   else
     264            0 :     pp_append_text (pp, str, str + length);
     265            0 :   XDELETEVEC (str);
     266              : }
     267              : 
     268              : /* Dump the name of a _DECL node and its DECL_UID if TDF_UID is set
     269              :    in FLAGS.  */
     270              : 
     271              : static void
     272      5983038 : dump_decl_name (pretty_printer *pp, tree node, dump_flags_t flags)
     273              : {
     274      5983038 :   tree name = DECL_NAME (node);
     275      5983038 :   if (name)
     276              :     {
     277      5466999 :       if ((flags & TDF_ASMNAME)
     278        17315 :           && HAS_DECL_ASSEMBLER_NAME_P (node)
     279      5482302 :           && DECL_ASSEMBLER_NAME_SET_P (node))
     280         1622 :         pp_tree_identifier (pp, DECL_ASSEMBLER_NAME_RAW (node));
     281              :       /* For -fcompare-debug don't dump DECL_NAMELESS names at all,
     282              :          -g might have created more fancy names and their indexes
     283              :          could get out of sync.  Usually those should be DECL_IGNORED_P
     284              :          too, SRA can create even non-DECL_IGNORED_P DECL_NAMELESS fancy
     285              :          names, let's hope those never get out of sync after doing the
     286              :          dump_fancy_name sanitization.  */
     287      5465377 :       else if ((flags & TDF_COMPARE_DEBUG)
     288        44186 :                && DECL_NAMELESS (node)
     289      5470743 :                && DECL_IGNORED_P (node))
     290              :         name = NULL_TREE;
     291              :       /* For DECL_NAMELESS names look for embedded uids in the
     292              :          names and sanitize them for TDF_NOUID.  */
     293      5460665 :       else if ((flags & TDF_NOUID) && DECL_NAMELESS (node))
     294         1276 :         dump_fancy_name (pp, name);
     295              :       else
     296      5459389 :         pp_tree_identifier (pp, name);
     297              :     }
     298      5983038 :   char uid_sep = (flags & TDF_GIMPLE) ? '_' : '.';
     299      5983038 :   if ((flags & TDF_UID) || name == NULL_TREE)
     300              :     {
     301       538364 :       if (TREE_CODE (node) == LABEL_DECL && LABEL_DECL_UID (node) != -1)
     302              :         {
     303            3 :           pp_character (pp, 'L');
     304            3 :           pp_character (pp, uid_sep);
     305            3 :           pp_decimal_int (pp, (int) LABEL_DECL_UID (node));
     306              :         }
     307       538361 :       else if (TREE_CODE (node) == DEBUG_EXPR_DECL)
     308              :         {
     309         4496 :           if (flags & TDF_NOUID)
     310            0 :             pp_string (pp, "D#xxxx");
     311              :           else
     312              :             {
     313         4496 :               pp_string (pp, "D#");
     314         4496 :               pp_decimal_int (pp, (int) DEBUG_TEMP_UID (node));
     315              :             }
     316              :         }
     317              :       else
     318              :         {
     319       533865 :           char c = TREE_CODE (node) == CONST_DECL ? 'C' : 'D';
     320       533865 :           pp_character (pp, c);
     321       533865 :           pp_character (pp, uid_sep);
     322       533865 :           if (flags & TDF_NOUID)
     323         7495 :             pp_string (pp, "xxxx");
     324              :           else
     325       526370 :             pp_scalar (pp, "%u", DECL_UID (node));
     326              :         }
     327              :     }
     328      5983038 :   if ((flags & TDF_ALIAS) && DECL_PT_UID (node) != DECL_UID (node))
     329              :     {
     330            2 :       if (flags & TDF_NOUID)
     331            0 :         pp_string (pp, "ptD.xxxx");
     332              :       else
     333              :         {
     334            2 :           pp_string (pp, "ptD.");
     335            2 :           pp_scalar (pp, "%u", DECL_PT_UID (node));
     336              :         }
     337              :     }
     338      5983038 : }
     339              : 
     340              : /* Like the above, but used for pretty printing function calls.  */
     341              : 
     342              : static void
     343       179975 : dump_function_name (pretty_printer *pp, tree node, dump_flags_t flags)
     344              : {
     345       179975 :   if (CONVERT_EXPR_P (node))
     346            0 :     node = TREE_OPERAND (node, 0);
     347       179975 :   if (DECL_NAME (node) && (flags & TDF_ASMNAME) == 0)
     348              :     {
     349       179588 :       pp_string (pp, lang_hooks.decl_printable_name (node, 1));
     350       179588 :       if (flags & TDF_UID)
     351              :         {
     352            0 :           char uid_sep = (flags & TDF_GIMPLE) ? '_' : '.';
     353            0 :           pp_character (pp, 'D');
     354            0 :           pp_character (pp, uid_sep);
     355            0 :           pp_scalar (pp, "%u", DECL_UID (node));
     356              :         }
     357              :     }
     358              :   else
     359          387 :     dump_decl_name (pp, node, flags);
     360       179975 : }
     361              : 
     362              : /* Dump a function declaration.  NODE is the FUNCTION_TYPE.  PP, SPC and
     363              :    FLAGS are as in dump_generic_node.  */
     364              : 
     365              : static void
     366        16386 : dump_function_declaration (pretty_printer *pp, tree node,
     367              :                            int spc, dump_flags_t flags)
     368              : {
     369        16386 :   bool wrote_arg = false;
     370        16386 :   tree arg;
     371              : 
     372        16386 :   pp_space (pp);
     373        16386 :   pp_left_paren (pp);
     374              : 
     375              :   /* Print the argument types.  */
     376        16386 :   arg = TYPE_ARG_TYPES (node);
     377        44819 :   while (arg && arg != void_list_node && arg != error_mark_node)
     378              :     {
     379        28433 :       if (wrote_arg)
     380              :         {
     381        17404 :           pp_comma (pp);
     382        17404 :           pp_space (pp);
     383              :         }
     384        28433 :       wrote_arg = true;
     385        28433 :       dump_generic_node (pp, TREE_VALUE (arg), spc, flags, false);
     386        28433 :       arg = TREE_CHAIN (arg);
     387              :     }
     388              : 
     389              :   /* Drop the trailing void_type_node if we had any previous argument.  */
     390        16386 :   if (arg == void_list_node && !wrote_arg)
     391         2861 :     pp_string (pp, "void");
     392              :   /* Properly dump vararg function types.  */
     393        13525 :   else if (!arg && wrote_arg)
     394          115 :     pp_string (pp, ", ...");
     395              :   /* Avoid printing any arg for unprototyped functions.  */
     396              : 
     397        16386 :   pp_right_paren (pp);
     398        16386 : }
     399              : 
     400              : /* Dump the domain associated with an array.  */
     401              : 
     402              : static void
     403       105318 : dump_array_domain (pretty_printer *pp, tree domain, int spc, dump_flags_t flags)
     404              : {
     405       105318 :   pp_left_bracket (pp);
     406       105318 :   if (domain)
     407              :     {
     408       105000 :       tree min = TYPE_MIN_VALUE (domain);
     409       105000 :       tree max = TYPE_MAX_VALUE (domain);
     410              : 
     411       105000 :       if (min && max
     412        82141 :           && integer_zerop (min)
     413       182472 :           && tree_fits_shwi_p (max))
     414        72688 :         pp_wide_integer (pp, tree_to_shwi (max) + 1);
     415              :       else
     416              :         {
     417        32312 :           if (min)
     418        32312 :             dump_generic_node (pp, min, spc, flags, false);
     419        32312 :           pp_colon (pp);
     420        32312 :           if (max)
     421         9453 :             dump_generic_node (pp, max, spc, flags, false);
     422              :         }
     423              :     }
     424              :   else
     425          318 :     pp_string (pp, "<unknown>");
     426       105318 :   pp_right_bracket (pp);
     427       105318 : }
     428              : 
     429              : 
     430              : /* Dump OpenMP iterators ITER.  */
     431              : 
     432              : static void
     433          137 : dump_omp_iterators (pretty_printer *pp, tree iter, int spc, dump_flags_t flags)
     434              : {
     435          137 :   pp_string (pp, "iterator(");
     436          479 :   for (tree it = iter; it; it = TREE_CHAIN (it))
     437              :     {
     438          205 :       if (it != iter)
     439           68 :         pp_string (pp, ", ");
     440          205 :       dump_generic_node (pp, TREE_TYPE (OMP_ITERATOR_VAR (it)), spc, flags,
     441              :                          false);
     442          205 :       pp_space (pp);
     443          205 :       dump_generic_node (pp, OMP_ITERATOR_VAR (it), spc, flags, false);
     444          205 :       pp_equal (pp);
     445          205 :       dump_generic_node (pp, OMP_ITERATOR_BEGIN (it), spc, flags, false);
     446          205 :       pp_colon (pp);
     447          205 :       dump_generic_node (pp, OMP_ITERATOR_END (it), spc, flags, false);
     448          205 :       pp_colon (pp);
     449          205 :       dump_generic_node (pp, OMP_ITERATOR_STEP (it), spc, flags, false);
     450              :     }
     451          137 :   if (OMP_ITERATOR_EXPANDED_P (iter))
     452              :     {
     453          119 :       pp_string (pp, ", loop_label=");
     454          119 :       dump_generic_node (pp, OMP_ITERATOR_LABEL (iter), spc, flags, false);
     455          119 :       pp_string (pp, ", elems=");
     456          119 :       dump_generic_node (pp, OMP_ITERATOR_ELEMS (iter), spc, flags, false);
     457          119 :       pp_string (pp, ", index=");
     458          119 :       dump_generic_node (pp, OMP_ITERATOR_INDEX (iter), spc, flags, false);
     459              :       /* The count field is not used yet.  */
     460              :     }
     461          137 :   pp_right_paren (pp);
     462          137 : }
     463              : 
     464              : /* Dump OpenMP's prefer_type of the init clause.  */
     465              : 
     466              : static void
     467          251 : dump_omp_init_prefer_type (pretty_printer *pp, tree t)
     468              : {
     469          251 :   if (t == NULL_TREE)
     470              :     return;
     471          119 :   pp_string (pp, "prefer_type(");
     472          119 :   const char *str = TREE_STRING_POINTER (t);
     473          527 :   while (str[0] == (char) GOMP_INTEROP_IFR_SEPARATOR)
     474              :     {
     475          408 :       bool has_fr = false;
     476          408 :       pp_character (pp, '{');
     477          408 :       str++;
     478          794 :       while (str[0] != (char) GOMP_INTEROP_IFR_SEPARATOR)
     479              :         {
     480          386 :           if (has_fr)
     481            0 :             pp_character (pp, ',');
     482          386 :           has_fr = true;
     483          386 :           pp_string (pp, "fr(\"");
     484          386 :           pp_string (pp, omp_get_name_from_fr_id (str[0]));
     485          386 :           pp_string (pp, "\")");
     486          386 :           str++;
     487              :         }
     488          408 :       str++;
     489          408 :       if (has_fr && str[0] != '\0')
     490           52 :         pp_character (pp, ',');
     491          534 :       while (str[0] != '\0')
     492              :         {
     493          126 :           pp_string (pp, "attr(\"");
     494          126 :           pp_string (pp, str);
     495          126 :           pp_string (pp, "\")");
     496          126 :           str += strlen (str) + 1;
     497          126 :           if (str[0] != '\0')
     498           52 :             pp_character (pp, ',');
     499              :         }
     500          408 :       str++;
     501          408 :       pp_character (pp, '}');
     502          408 :       if (str[0] != '\0')
     503          289 :         pp_string (pp, ", ");
     504              :     }
     505          119 :   pp_right_paren (pp);
     506              : }
     507              : 
     508              : /* Dump OMP clause CLAUSE, without following OMP_CLAUSE_CHAIN.
     509              : 
     510              :    PP, CLAUSE, SPC and FLAGS are as in dump_generic_node.  */
     511              : 
     512              : static void
     513        30028 : dump_omp_clause (pretty_printer *pp, tree clause, int spc, dump_flags_t flags)
     514              : {
     515        30028 :   const char *name;
     516        30028 :   const char *modifier = NULL;
     517        30028 :   switch (OMP_CLAUSE_CODE (clause))
     518              :     {
     519         3272 :     case OMP_CLAUSE_PRIVATE:
     520         3272 :       name = "private";
     521         3272 :       goto print_remap;
     522         1119 :     case OMP_CLAUSE_SHARED:
     523         1119 :       name = "shared";
     524         1119 :       goto print_remap;
     525         1551 :     case OMP_CLAUSE_FIRSTPRIVATE:
     526         1551 :       name = "firstprivate";
     527         1551 :       goto print_remap;
     528         1166 :     case OMP_CLAUSE_LASTPRIVATE:
     529         1166 :       name = "lastprivate";
     530         1166 :       if (OMP_CLAUSE_LASTPRIVATE_CONDITIONAL (clause))
     531            7 :         modifier = "conditional:";
     532         1166 :       goto print_remap;
     533            4 :     case OMP_CLAUSE_COPYIN:
     534            4 :       name = "copyin";
     535            4 :       goto print_remap;
     536            1 :     case OMP_CLAUSE_COPYPRIVATE:
     537            1 :       name = "copyprivate";
     538            1 :       goto print_remap;
     539          747 :     case OMP_CLAUSE_UNIFORM:
     540          747 :       name = "uniform";
     541          747 :       goto print_remap;
     542          131 :     case OMP_CLAUSE_USE_DEVICE_PTR:
     543          131 :       name = "use_device_ptr";
     544          131 :       if (OMP_CLAUSE_USE_DEVICE_PTR_IF_PRESENT (clause))
     545           29 :         modifier = "if_present:";
     546          131 :       goto print_remap;
     547           30 :     case OMP_CLAUSE_USE_DEVICE_ADDR:
     548           30 :       name = "use_device_addr";
     549           30 :       goto print_remap;
     550           40 :     case OMP_CLAUSE_HAS_DEVICE_ADDR:
     551           40 :       name = "has_device_addr";
     552           40 :       goto print_remap;
     553          116 :     case OMP_CLAUSE_IS_DEVICE_PTR:
     554          116 :       name = "is_device_ptr";
     555          116 :       goto print_remap;
     556            3 :     case OMP_CLAUSE_INCLUSIVE:
     557            3 :       name = "inclusive";
     558            3 :       goto print_remap;
     559            2 :     case OMP_CLAUSE_EXCLUSIVE:
     560            2 :       name = "exclusive";
     561            2 :       goto print_remap;
     562           45 :     case OMP_CLAUSE_NOVARIANTS:
     563           45 :       pp_string (pp, "novariants");
     564           45 :       pp_left_paren (pp);
     565           45 :       gcc_assert (OMP_CLAUSE_NOVARIANTS_EXPR (clause));
     566           45 :       dump_generic_node (pp, OMP_CLAUSE_NOVARIANTS_EXPR (clause), spc, flags,
     567              :                          false);
     568           45 :       pp_right_paren (pp);
     569           45 :       break;
     570           60 :     case OMP_CLAUSE_NOCONTEXT:
     571           60 :       pp_string (pp, "nocontext");
     572           60 :       pp_left_paren (pp);
     573           60 :       gcc_assert (OMP_CLAUSE_NOCONTEXT_EXPR (clause));
     574           60 :       dump_generic_node (pp, OMP_CLAUSE_NOCONTEXT_EXPR (clause), spc, flags,
     575              :                          false);
     576           60 :       pp_right_paren (pp);
     577           60 :       break;
     578           86 :     case OMP_CLAUSE__LOOPTEMP_:
     579           86 :       name = "_looptemp_";
     580           86 :       goto print_remap;
     581           12 :     case OMP_CLAUSE__REDUCTEMP_:
     582           12 :       name = "_reductemp_";
     583           12 :       goto print_remap;
     584            0 :     case OMP_CLAUSE__CONDTEMP_:
     585            0 :       name = "_condtemp_";
     586            0 :       goto print_remap;
     587            0 :     case OMP_CLAUSE__SCANTEMP_:
     588            0 :       name = "_scantemp_";
     589            0 :       goto print_remap;
     590            0 :     case OMP_CLAUSE_ENTER:
     591            0 :       if (OMP_CLAUSE_ENTER_TO (clause))
     592              :         name = "to";
     593              :       else
     594            0 :         name = "enter";
     595            0 :       goto print_remap;
     596            0 :     case OMP_CLAUSE_LINK:
     597            0 :       name = "link";
     598            0 :       goto print_remap;
     599            3 :     case OMP_CLAUSE_NONTEMPORAL:
     600            3 :       name = "nontemporal";
     601            3 :       goto print_remap;
     602         8283 :   print_remap:
     603         8283 :       pp_string (pp, name);
     604         8283 :       pp_left_paren (pp);
     605         8283 :       if (modifier)
     606           36 :         pp_string (pp, modifier);
     607         8283 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     608              :                          spc, flags, false);
     609         8283 :       pp_right_paren (pp);
     610         8283 :       break;
     611              : 
     612           24 :     case OMP_CLAUSE_TASK_REDUCTION:
     613           24 :     case OMP_CLAUSE_IN_REDUCTION:
     614           27 :       pp_string (pp, OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_IN_REDUCTION
     615              :                      ? "in_" : "task_");
     616              :       /* FALLTHRU */
     617         1239 :     case OMP_CLAUSE_REDUCTION:
     618         1239 :       pp_string (pp, "reduction(");
     619         1239 :       if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_REDUCTION)
     620              :         {
     621         1215 :           if (OMP_CLAUSE_REDUCTION_TASK (clause))
     622           12 :             pp_string (pp, "task,");
     623         1203 :           else if (OMP_CLAUSE_REDUCTION_INSCAN (clause))
     624            6 :             pp_string (pp, "inscan,");
     625              :         }
     626         1239 :       if (OMP_CLAUSE_REDUCTION_CODE (clause) != ERROR_MARK)
     627              :         {
     628         1227 :           pp_string (pp,
     629         1227 :                      op_symbol_code (OMP_CLAUSE_REDUCTION_CODE (clause)));
     630         1227 :           pp_colon (pp);
     631              :         }
     632         1239 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     633              :                          spc, flags, false);
     634         1239 :       pp_right_paren (pp);
     635         1239 :       break;
     636              : 
     637          148 :     case OMP_CLAUSE_IF:
     638          148 :       pp_string (pp, "if(");
     639          148 :       switch (OMP_CLAUSE_IF_MODIFIER (clause))
     640              :         {
     641              :         case ERROR_MARK: break;
     642            0 :         case VOID_CST: pp_string (pp, "cancel:"); break;
     643            4 :         case OMP_PARALLEL: pp_string (pp, "parallel:"); break;
     644            2 :         case OMP_SIMD: pp_string (pp, "simd:"); break;
     645            0 :         case OMP_TASK: pp_string (pp, "task:"); break;
     646            4 :         case OMP_TASKLOOP: pp_string (pp, "taskloop:"); break;
     647            0 :         case OMP_TARGET_DATA: pp_string (pp, "target data:"); break;
     648            0 :         case OMP_TARGET: pp_string (pp, "target:"); break;
     649            0 :         case OMP_TARGET_UPDATE: pp_string (pp, "target update:"); break;
     650            0 :         case OMP_TARGET_ENTER_DATA:
     651            0 :           pp_string (pp, "target enter data:"); break;
     652            0 :         case OMP_TARGET_EXIT_DATA: pp_string (pp, "target exit data:"); break;
     653            0 :         default: gcc_unreachable ();
     654              :         }
     655          148 :       dump_generic_node (pp, OMP_CLAUSE_IF_EXPR (clause),
     656              :                          spc, flags, false);
     657          148 :       pp_right_paren (pp);
     658          148 :       break;
     659              : 
     660           52 :     case OMP_CLAUSE_DESTROY:
     661           52 :       pp_string (pp, "destroy(");
     662           52 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     663              :                          spc, flags, false);
     664           52 :       pp_right_paren (pp);
     665           52 :       break;
     666              : 
     667          251 :     case OMP_CLAUSE_INIT:
     668          251 :       pp_string (pp, "init(");
     669          251 :       dump_omp_init_prefer_type (pp, OMP_CLAUSE_INIT_PREFER_TYPE (clause));
     670          251 :       if (OMP_CLAUSE_INIT_TARGET (clause))
     671              :         {
     672          156 :           if (OMP_CLAUSE_INIT_PREFER_TYPE (clause))
     673           67 :             pp_string (pp, ", ");
     674          156 :           pp_string (pp, "target");
     675              :         }
     676          251 :       if (OMP_CLAUSE_INIT_TARGETSYNC (clause))
     677              :         {
     678          128 :           if (OMP_CLAUSE_INIT_PREFER_TYPE (clause) || OMP_CLAUSE_INIT_TARGET (clause))
     679           85 :             pp_string (pp, ", ");
     680          128 :           pp_string (pp, "targetsync");
     681              :         }
     682          251 :       if (OMP_CLAUSE_INIT_PREFER_TYPE (clause)
     683          132 :           || OMP_CLAUSE_INIT_TARGET (clause)
     684          294 :           || OMP_CLAUSE_INIT_TARGETSYNC (clause))
     685          251 :         pp_string (pp, ": ");
     686          251 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     687              :                          spc, flags, false);
     688          251 :       pp_right_paren (pp);
     689          251 :       break;
     690              : 
     691           59 :     case OMP_CLAUSE_USE:
     692           59 :       pp_string (pp, "use(");
     693           59 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     694              :                          spc, flags, false);
     695           59 :       pp_right_paren (pp);
     696           59 :       break;
     697              : 
     698           61 :     case OMP_CLAUSE_SELF:
     699           61 :       pp_string (pp, "self(");
     700           61 :       dump_generic_node (pp, OMP_CLAUSE_SELF_EXPR (clause),
     701              :                          spc, flags, false);
     702           61 :       pp_right_paren (pp);
     703           61 :       break;
     704              : 
     705          141 :     case OMP_CLAUSE_NUM_THREADS:
     706          141 :       pp_string (pp, "num_threads(");
     707          141 :       if (OMP_CLAUSE_NUM_THREADS_STRICT (clause))
     708            9 :         pp_string (pp, "strict");
     709          141 :       if (OMP_CLAUSE_NUM_THREADS_STRICT (clause)
     710          141 :           && OMP_CLAUSE_NUM_THREADS_DIMS (clause))
     711            5 :         pp_comma (pp);
     712          141 :       if (OMP_CLAUSE_NUM_THREADS_DIMS (clause))
     713           11 :         pp_string (pp, "dims()");
     714          141 :       if (OMP_CLAUSE_NUM_THREADS_STRICT (clause)
     715          141 :           || OMP_CLAUSE_NUM_THREADS_DIMS (clause))
     716           15 :         pp_colon (pp);
     717          141 :       dump_generic_node (pp, OMP_CLAUSE_NUM_THREADS_EXPR (clause),
     718              :                          spc, flags, false);
     719          141 :       pp_right_paren (pp);
     720          141 :       break;
     721              : 
     722          752 :     case OMP_CLAUSE_NOWAIT:
     723          752 :       pp_string (pp, "nowait");
     724          752 :       break;
     725           27 :     case OMP_CLAUSE_ORDERED:
     726           27 :       pp_string (pp, "ordered");
     727           27 :       if (OMP_CLAUSE_ORDERED_EXPR (clause))
     728              :         {
     729            9 :           pp_left_paren (pp);
     730            9 :           dump_generic_node (pp, OMP_CLAUSE_ORDERED_EXPR (clause),
     731              :                              spc, flags, false);
     732            9 :           pp_right_paren (pp);
     733              :         }
     734              :       break;
     735              : 
     736         1258 :     case OMP_CLAUSE_DEFAULT:
     737         1258 :       pp_string (pp, "default(");
     738         1258 :       switch (OMP_CLAUSE_DEFAULT_KIND (clause))
     739              :         {
     740              :         case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
     741              :           break;
     742           11 :         case OMP_CLAUSE_DEFAULT_SHARED:
     743           11 :           pp_string (pp, "shared");
     744           11 :           break;
     745         1192 :         case OMP_CLAUSE_DEFAULT_NONE:
     746         1192 :           pp_string (pp, "none");
     747         1192 :           break;
     748            0 :         case OMP_CLAUSE_DEFAULT_PRIVATE:
     749            0 :           pp_string (pp, "private");
     750            0 :           break;
     751            2 :         case OMP_CLAUSE_DEFAULT_FIRSTPRIVATE:
     752            2 :           pp_string (pp, "firstprivate");
     753            2 :           break;
     754           53 :         case OMP_CLAUSE_DEFAULT_PRESENT:
     755           53 :           pp_string (pp, "present");
     756           53 :           break;
     757            0 :         default:
     758            0 :           gcc_unreachable ();
     759              :         }
     760         1258 :       pp_right_paren (pp);
     761         1258 :       break;
     762              : 
     763          152 :     case OMP_CLAUSE_SCHEDULE:
     764          152 :       pp_string (pp, "schedule(");
     765          152 :       if (OMP_CLAUSE_SCHEDULE_KIND (clause)
     766              :           & (OMP_CLAUSE_SCHEDULE_MONOTONIC
     767              :              | OMP_CLAUSE_SCHEDULE_NONMONOTONIC))
     768              :         {
     769            0 :           if (OMP_CLAUSE_SCHEDULE_KIND (clause)
     770              :               & OMP_CLAUSE_SCHEDULE_MONOTONIC)
     771            0 :             pp_string (pp, "monotonic");
     772              :           else
     773            0 :             pp_string (pp, "nonmonotonic");
     774            0 :           if (OMP_CLAUSE_SCHEDULE_SIMD (clause))
     775            0 :             pp_comma (pp);
     776              :           else
     777            0 :             pp_colon (pp);
     778              :         }
     779          152 :       if (OMP_CLAUSE_SCHEDULE_SIMD (clause))
     780            0 :         pp_string (pp, "simd:");
     781              : 
     782          152 :       switch (OMP_CLAUSE_SCHEDULE_KIND (clause) & OMP_CLAUSE_SCHEDULE_MASK)
     783              :         {
     784          111 :         case OMP_CLAUSE_SCHEDULE_STATIC:
     785          111 :           pp_string (pp, "static");
     786          111 :           break;
     787            4 :         case OMP_CLAUSE_SCHEDULE_DYNAMIC:
     788            4 :           pp_string (pp, "dynamic");
     789            4 :           break;
     790           27 :         case OMP_CLAUSE_SCHEDULE_GUIDED:
     791           27 :           pp_string (pp, "guided");
     792           27 :           break;
     793            2 :         case OMP_CLAUSE_SCHEDULE_RUNTIME:
     794            2 :           pp_string (pp, "runtime");
     795            2 :           break;
     796            8 :         case OMP_CLAUSE_SCHEDULE_AUTO:
     797            8 :           pp_string (pp, "auto");
     798            8 :           break;
     799            0 :         default:
     800            0 :           gcc_unreachable ();
     801              :         }
     802          152 :       if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause))
     803              :         {
     804           16 :           pp_comma (pp);
     805           16 :           dump_generic_node (pp, OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause),
     806              :                              spc, flags, false);
     807              :         }
     808          152 :       pp_right_paren (pp);
     809          152 :       break;
     810              : 
     811            4 :     case OMP_CLAUSE_UNTIED:
     812            4 :       pp_string (pp, "untied");
     813            4 :       break;
     814              : 
     815          418 :     case OMP_CLAUSE_COLLAPSE:
     816          418 :       pp_string (pp, "collapse(");
     817          418 :       dump_generic_node (pp, OMP_CLAUSE_COLLAPSE_EXPR (clause),
     818              :                          spc, flags, false);
     819          418 :       pp_right_paren (pp);
     820          418 :       break;
     821              : 
     822            4 :     case OMP_CLAUSE_FINAL:
     823            4 :       pp_string (pp, "final(");
     824            4 :       dump_generic_node (pp, OMP_CLAUSE_FINAL_EXPR (clause),
     825              :                          spc, flags, false);
     826            4 :       pp_right_paren (pp);
     827            4 :       break;
     828              : 
     829            4 :     case OMP_CLAUSE_MERGEABLE:
     830            4 :       pp_string (pp, "mergeable");
     831            4 :       break;
     832              : 
     833           19 :     case OMP_CLAUSE_MESSAGE:
     834           19 :       if (OMP_CLAUSE_MESSAGE_EXPR (clause))
     835              :         {
     836           17 :           pp_string (pp, "message(");
     837           17 :           dump_generic_node (pp, OMP_CLAUSE_MESSAGE_EXPR (clause),
     838              :                              spc, flags, false);
     839           17 :           if (OMP_CLAUSE_MESSAGE_LEN (clause))
     840              :             {
     841           17 :               pp_string (pp, " [len:");
     842           17 :               dump_generic_node (pp, OMP_CLAUSE_MESSAGE_LEN (clause),
     843              :                                  spc, flags, false);
     844           17 :               pp_right_bracket (pp);
     845              :             }
     846           17 :           pp_right_paren (pp);
     847           17 :           if (OMP_CLAUSE_MESSAGE_SEVERITY_WARN (clause))
     848            8 :             pp_space (pp);
     849              :         }
     850           19 :       if (OMP_CLAUSE_MESSAGE_SEVERITY_WARN (clause))
     851           10 :         pp_string (pp, "severity(warning)");
     852              :       else
     853            9 :         pp_string (pp, "severity(fatal)");
     854              :       break;
     855              : 
     856         1872 :     case OMP_CLAUSE_LINEAR:
     857         1872 :       pp_string (pp, "linear(");
     858         1872 :       if (OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (clause))
     859            4 :         switch (OMP_CLAUSE_LINEAR_KIND (clause))
     860              :           {
     861              :           case OMP_CLAUSE_LINEAR_DEFAULT:
     862              :             break;
     863            4 :           case OMP_CLAUSE_LINEAR_REF:
     864            4 :             pp_string (pp, "ref(");
     865            4 :             break;
     866            0 :           case OMP_CLAUSE_LINEAR_VAL:
     867            0 :             pp_string (pp, "val(");
     868            0 :             break;
     869            0 :           case OMP_CLAUSE_LINEAR_UVAL:
     870            0 :             pp_string (pp, "uval(");
     871            0 :             break;
     872            0 :           default:
     873            0 :             gcc_unreachable ();
     874              :           }
     875         1872 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     876              :                          spc, flags, false);
     877         1872 :       if (OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (clause)
     878         1872 :           && OMP_CLAUSE_LINEAR_KIND (clause) != OMP_CLAUSE_LINEAR_DEFAULT)
     879            4 :         pp_right_paren (pp);
     880         1872 :       pp_colon (pp);
     881         1872 :       if (!OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (clause)
     882         1872 :           && OMP_CLAUSE_LINEAR_KIND (clause) != OMP_CLAUSE_LINEAR_DEFAULT)
     883           81 :         switch (OMP_CLAUSE_LINEAR_KIND (clause))
     884              :           {
     885           60 :             case OMP_CLAUSE_LINEAR_REF:
     886           60 :               pp_string (pp, "ref,step(");
     887           60 :               break;
     888           13 :             case OMP_CLAUSE_LINEAR_VAL:
     889           13 :               pp_string (pp, "val,step(");
     890           13 :               break;
     891            8 :             case OMP_CLAUSE_LINEAR_UVAL:
     892            8 :               pp_string (pp, "uval,step(");
     893            8 :               break;
     894            0 :             default:
     895            0 :               gcc_unreachable ();
     896              :           }
     897         1872 :       dump_generic_node (pp, OMP_CLAUSE_LINEAR_STEP (clause),
     898              :                          spc, flags, false);
     899         1872 :       if (!OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (clause)
     900         1872 :           && OMP_CLAUSE_LINEAR_KIND (clause) != OMP_CLAUSE_LINEAR_DEFAULT)
     901           81 :         pp_right_paren (pp);
     902         1872 :       pp_right_paren (pp);
     903         1872 :       break;
     904              : 
     905          338 :     case OMP_CLAUSE_ALIGNED:
     906          338 :       pp_string (pp, "aligned(");
     907          338 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     908              :                          spc, flags, false);
     909          338 :       if (OMP_CLAUSE_ALIGNED_ALIGNMENT (clause))
     910              :         {
     911          338 :           pp_colon (pp);
     912          338 :           dump_generic_node (pp, OMP_CLAUSE_ALIGNED_ALIGNMENT (clause),
     913              :                              spc, flags, false);
     914              :         }
     915          338 :       pp_right_paren (pp);
     916          338 :       break;
     917              : 
     918           89 :     case OMP_CLAUSE_ALLOCATE:
     919           89 :       pp_string (pp, "allocate(");
     920           89 :       if (OMP_CLAUSE_ALLOCATE_ALLOCATOR (clause))
     921              :         {
     922           88 :           pp_string (pp, "allocator(");
     923           88 :           dump_generic_node (pp, OMP_CLAUSE_ALLOCATE_ALLOCATOR (clause),
     924              :                              spc, flags, false);
     925           88 :           pp_right_paren (pp);
     926              :         }
     927           89 :       if (OMP_CLAUSE_ALLOCATE_ALIGN (clause))
     928              :         {
     929           57 :           if (OMP_CLAUSE_ALLOCATE_ALLOCATOR (clause))
     930           56 :             pp_comma (pp);
     931           57 :           pp_string (pp, "align(");
     932           57 :           dump_generic_node (pp, OMP_CLAUSE_ALLOCATE_ALIGN (clause),
     933              :                              spc, flags, false);
     934           57 :           pp_right_paren (pp);
     935              :         }
     936           89 :       if (OMP_CLAUSE_ALLOCATE_ALLOCATOR (clause)
     937           89 :           || OMP_CLAUSE_ALLOCATE_ALIGN (clause))
     938           89 :         pp_colon (pp);
     939           89 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     940              :                          spc, flags, false);
     941           89 :       pp_right_paren (pp);
     942           89 :       break;
     943              : 
     944           98 :     case OMP_CLAUSE_USES_ALLOCATORS:
     945           98 :       pp_string (pp, "uses_allocators(memspace(");
     946           98 :       dump_generic_node (pp, OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (clause),
     947              :                          spc, flags, false);
     948           98 :       pp_string (pp, "), traits(");
     949           98 :       dump_generic_node (pp, OMP_CLAUSE_USES_ALLOCATORS_TRAITS (clause),
     950              :                          spc, flags, false);
     951           98 :       pp_string (pp, ") : ");
     952           98 :       dump_generic_node (pp, OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (clause),
     953              :                          spc, flags, false);
     954           98 :       pp_right_paren (pp);
     955           98 :       break;
     956              : 
     957           68 :     case OMP_CLAUSE_AFFINITY:
     958           68 :       pp_string (pp, "affinity(");
     959           68 :       {
     960           68 :         tree t = OMP_CLAUSE_DECL (clause);
     961           68 :         if (OMP_ITERATOR_DECL_P (t))
     962              :           {
     963           18 :             dump_omp_iterators (pp, TREE_PURPOSE (t), spc, flags);
     964           18 :             pp_colon (pp);
     965           18 :             t = TREE_VALUE (t);
     966              :           }
     967           68 :         dump_generic_node (pp, t, spc, flags, false);
     968              :       }
     969           68 :       pp_right_paren (pp);
     970           68 :       break;
     971          176 :     case OMP_CLAUSE_DEPEND:
     972          176 :       pp_string (pp, "depend(");
     973          176 :       switch (OMP_CLAUSE_DEPEND_KIND (clause))
     974              :         {
     975              :         case OMP_CLAUSE_DEPEND_DEPOBJ:
     976              :           name = "depobj";
     977              :           break;
     978            5 :         case OMP_CLAUSE_DEPEND_IN:
     979            5 :           name = "in";
     980            5 :           break;
     981          123 :         case OMP_CLAUSE_DEPEND_OUT:
     982          123 :           name = "out";
     983          123 :           break;
     984           28 :         case OMP_CLAUSE_DEPEND_INOUT:
     985           28 :           name = "inout";
     986           28 :           break;
     987            0 :         case OMP_CLAUSE_DEPEND_MUTEXINOUTSET:
     988            0 :           name = "mutexinoutset";
     989            0 :           break;
     990            0 :         case OMP_CLAUSE_DEPEND_INOUTSET:
     991            0 :           name = "inoutset";
     992            0 :           break;
     993            0 :         case OMP_CLAUSE_DEPEND_LAST:
     994            0 :           name = "__internal__";
     995            0 :           break;
     996            0 :         default:
     997            0 :           gcc_unreachable ();
     998              :         }
     999          176 :       {
    1000          176 :         tree t = OMP_CLAUSE_DECL (clause);
    1001          176 :         if (OMP_ITERATOR_DECL_P (t))
    1002              :           {
    1003            0 :             dump_omp_iterators (pp, TREE_PURPOSE (t), spc, flags);
    1004            0 :             pp_colon (pp);
    1005            0 :             t = TREE_VALUE (t);
    1006              :           }
    1007          176 :         if (name[0])
    1008              :           {
    1009          176 :             pp_string (pp, name);
    1010          176 :             pp_colon (pp);
    1011              :           }
    1012          176 :         if (t == null_pointer_node)
    1013            0 :           pp_string (pp, "omp_all_memory");
    1014              :         else
    1015          176 :           dump_generic_node (pp, t, spc, flags, false);
    1016          176 :         pp_right_paren (pp);
    1017              :       }
    1018          176 :       break;
    1019              : 
    1020           22 :     case OMP_CLAUSE_DOACROSS:
    1021           22 :       pp_string (pp, OMP_CLAUSE_DOACROSS_DEPEND (clause)
    1022              :                      ? "depend(" : "doacross(");
    1023           22 :       switch (OMP_CLAUSE_DOACROSS_KIND (clause))
    1024              :         {
    1025            9 :         case OMP_CLAUSE_DOACROSS_SOURCE:
    1026            9 :           if (OMP_CLAUSE_DOACROSS_DEPEND (clause))
    1027            9 :             pp_string (pp, "source)");
    1028              :           else
    1029            0 :             pp_string (pp, "source:)");
    1030              :           break;
    1031           13 :         case OMP_CLAUSE_DOACROSS_SINK:
    1032           13 :           pp_string (pp, "sink:");
    1033           13 :           if (OMP_CLAUSE_DECL (clause) == NULL_TREE)
    1034              :             {
    1035            0 :               pp_string (pp, "omp_cur_iteration-1)");
    1036            0 :               break;
    1037              :             }
    1038           34 :           for (tree t = OMP_CLAUSE_DECL (clause); t; t = TREE_CHAIN (t))
    1039           21 :             if (TREE_CODE (t) == TREE_LIST)
    1040              :               {
    1041           21 :                 dump_generic_node (pp, TREE_VALUE (t), spc, flags, false);
    1042           21 :                 if (TREE_PURPOSE (t) != integer_zero_node)
    1043              :                   {
    1044           19 :                     if (OMP_CLAUSE_DOACROSS_SINK_NEGATIVE (t))
    1045            8 :                       pp_minus (pp);
    1046              :                     else
    1047           11 :                       pp_plus (pp);
    1048           19 :                     dump_generic_node (pp, TREE_PURPOSE (t), spc, flags,
    1049              :                                        false);
    1050              :                   }
    1051           21 :                 if (TREE_CHAIN (t))
    1052            8 :                   pp_comma (pp);
    1053              :               }
    1054              :             else
    1055            0 :               gcc_unreachable ();
    1056           13 :           pp_right_paren (pp);
    1057           13 :           break;
    1058            0 :         default:
    1059            0 :           gcc_unreachable ();
    1060              :         }
    1061              :       break;
    1062              : 
    1063         6474 :     case OMP_CLAUSE_MAP:
    1064         6474 :       pp_string (pp, "map(");
    1065         6474 :       if (OMP_CLAUSE_MAP_READONLY (clause))
    1066           70 :         pp_string (pp, "readonly,");
    1067         6474 :       if (OMP_CLAUSE_ITERATORS (clause))
    1068              :         {
    1069           84 :           dump_omp_iterators (pp, OMP_CLAUSE_ITERATORS (clause), spc, flags);
    1070           84 :           pp_colon (pp);
    1071              :         }
    1072         6474 :       switch (OMP_CLAUSE_MAP_KIND (clause))
    1073              :         {
    1074         1007 :         case GOMP_MAP_ALLOC:
    1075         1007 :         case GOMP_MAP_POINTER:
    1076         1007 :         case GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION:
    1077         1007 :           pp_string (pp, "alloc");
    1078         1007 :           break;
    1079            4 :         case GOMP_MAP_IF_PRESENT:
    1080            4 :           pp_string (pp, "no_alloc");
    1081            4 :           break;
    1082          808 :         case GOMP_MAP_TO:
    1083          808 :         case GOMP_MAP_TO_PSET:
    1084          808 :           pp_string (pp, "to");
    1085          808 :           break;
    1086          602 :         case GOMP_MAP_FROM:
    1087          602 :           pp_string (pp, "from");
    1088          602 :           break;
    1089         2224 :         case GOMP_MAP_TOFROM:
    1090         2224 :           pp_string (pp, "tofrom");
    1091         2224 :           break;
    1092            3 :         case GOMP_MAP_FORCE_ALLOC:
    1093            3 :           pp_string (pp, "force_alloc");
    1094            3 :           break;
    1095           17 :         case GOMP_MAP_FORCE_TO:
    1096           17 :           pp_string (pp, "force_to");
    1097           17 :           break;
    1098           26 :         case GOMP_MAP_FORCE_FROM:
    1099           26 :           pp_string (pp, "force_from");
    1100           26 :           break;
    1101           61 :         case GOMP_MAP_FORCE_TOFROM:
    1102           61 :           pp_string (pp, "force_tofrom");
    1103           61 :           break;
    1104          229 :         case GOMP_MAP_FORCE_PRESENT:
    1105          229 :           pp_string (pp, "force_present");
    1106          229 :           break;
    1107           83 :         case GOMP_MAP_DELETE:
    1108           83 :           pp_string (pp, "delete");
    1109           83 :           break;
    1110            8 :         case GOMP_MAP_FORCE_DEVICEPTR:
    1111            8 :           pp_string (pp, "force_deviceptr");
    1112            8 :           break;
    1113          158 :         case GOMP_MAP_ALWAYS_TO:
    1114          158 :           pp_string (pp, "always,to");
    1115          158 :           break;
    1116           40 :         case GOMP_MAP_ALWAYS_FROM:
    1117           40 :           pp_string (pp, "always,from");
    1118           40 :           break;
    1119           14 :         case GOMP_MAP_ALWAYS_TOFROM:
    1120           14 :           pp_string (pp, "always,tofrom");
    1121           14 :           break;
    1122          190 :         case GOMP_MAP_RELEASE:
    1123          190 :           pp_string (pp, "release");
    1124          190 :           break;
    1125          344 :         case GOMP_MAP_FIRSTPRIVATE_POINTER:
    1126          344 :           pp_string (pp, "firstprivate");
    1127          344 :           break;
    1128            0 :         case GOMP_MAP_FIRSTPRIVATE_REFERENCE:
    1129            0 :           pp_string (pp, "firstprivate ref");
    1130            0 :           break;
    1131          150 :         case GOMP_MAP_STRUCT:
    1132          150 :           pp_string (pp, "struct");
    1133          150 :           break;
    1134            2 :         case GOMP_MAP_STRUCT_UNORD:
    1135            2 :           pp_string (pp, "struct_unord");
    1136            2 :           break;
    1137           51 :         case GOMP_MAP_ALWAYS_POINTER:
    1138           51 :           pp_string (pp, "always_pointer");
    1139           51 :           break;
    1140            0 :         case GOMP_MAP_DEVICE_RESIDENT:
    1141            0 :           pp_string (pp, "device_resident");
    1142            0 :           break;
    1143            0 :         case GOMP_MAP_LINK:
    1144            0 :           pp_string (pp, "link");
    1145            0 :           break;
    1146          162 :         case GOMP_MAP_ATTACH:
    1147          162 :           pp_string (pp, "attach");
    1148          162 :           break;
    1149           42 :         case GOMP_MAP_DETACH:
    1150           42 :           pp_string (pp, "detach");
    1151           42 :           break;
    1152            8 :         case GOMP_MAP_FORCE_DETACH:
    1153            8 :           pp_string (pp, "force_detach");
    1154            8 :           break;
    1155           46 :         case GOMP_MAP_ATTACH_DETACH:
    1156           46 :           pp_string (pp, "attach_detach");
    1157           46 :           break;
    1158            8 :         case GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION:
    1159            8 :           pp_string (pp, "attach_zero_length_array_section");
    1160            8 :           break;
    1161           29 :         case GOMP_MAP_PRESENT_ALLOC:
    1162           29 :           pp_string (pp, "present,alloc");
    1163           29 :           break;
    1164           29 :         case GOMP_MAP_PRESENT_TO:
    1165           29 :           pp_string (pp, "present,to");
    1166           29 :           break;
    1167           16 :         case GOMP_MAP_PRESENT_FROM:
    1168           16 :           pp_string (pp, "present,from");
    1169           16 :           break;
    1170           15 :         case GOMP_MAP_PRESENT_TOFROM:
    1171           15 :           pp_string (pp, "present,tofrom");
    1172           15 :           break;
    1173           40 :         case GOMP_MAP_ALWAYS_PRESENT_TO:
    1174           40 :           pp_string (pp, "always,present,to");
    1175           40 :           break;
    1176           30 :         case GOMP_MAP_ALWAYS_PRESENT_FROM:
    1177           30 :           pp_string (pp, "always,present,from");
    1178           30 :           break;
    1179           12 :         case GOMP_MAP_ALWAYS_PRESENT_TOFROM:
    1180           12 :           pp_string (pp, "always,present,tofrom");
    1181           12 :           break;
    1182           16 :         case GOMP_MAP_UNSET:
    1183           16 :           pp_string (pp, "unset");
    1184           16 :           break;
    1185            0 :         case GOMP_MAP_PUSH_MAPPER_NAME:
    1186            0 :           pp_string (pp, "push_mapper");
    1187            0 :           break;
    1188            0 :         case GOMP_MAP_POP_MAPPER_NAME:
    1189            0 :           pp_string (pp, "pop_mapper");
    1190            0 :           break;
    1191            0 :         case GOMP_MAP_USES_ALLOCATORS:
    1192            0 :           pp_string (pp, "uses_allocators");
    1193            0 :           break;
    1194            0 :         default:
    1195            0 :           gcc_unreachable ();
    1196              :         }
    1197         6474 :       pp_colon (pp);
    1198         6474 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
    1199              :                          spc, flags, false);
    1200         6732 :      print_clause_size:
    1201         6732 :       if (OMP_CLAUSE_SIZE (clause))
    1202              :         {
    1203        11297 :           switch (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP
    1204         5719 :                   ? OMP_CLAUSE_MAP_KIND (clause) : GOMP_MAP_TO)
    1205              :             {
    1206          980 :             case GOMP_MAP_POINTER:
    1207          980 :             case GOMP_MAP_FIRSTPRIVATE_POINTER:
    1208          980 :             case GOMP_MAP_FIRSTPRIVATE_REFERENCE:
    1209          980 :             case GOMP_MAP_ALWAYS_POINTER:
    1210          980 :               pp_string (pp, " [pointer assign, bias: ");
    1211          980 :               break;
    1212            4 :             case GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION:
    1213            4 :               pp_string (pp, " [pointer assign, zero-length array section, bias: ");
    1214            4 :               break;
    1215          141 :             case GOMP_MAP_TO_PSET:
    1216          141 :               pp_string (pp, " [pointer set, len: ");
    1217          141 :               break;
    1218          266 :             case GOMP_MAP_ATTACH:
    1219          266 :             case GOMP_MAP_DETACH:
    1220          266 :             case GOMP_MAP_FORCE_DETACH:
    1221          266 :             case GOMP_MAP_ATTACH_DETACH:
    1222          266 :             case GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION:
    1223          266 :               pp_string (pp, " [bias: ");
    1224          266 :               break;
    1225          179 :             case GOMP_MAP_RELEASE:
    1226          179 :             case GOMP_MAP_DELETE:
    1227          179 :               if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP
    1228          179 :                   && OMP_CLAUSE_RELEASE_DESCRIPTOR (clause))
    1229              :                 {
    1230           25 :                   pp_string (pp, " [pointer set, len: ");
    1231           25 :                   break;
    1232              :                 }
    1233              :               /* Fallthrough.  */
    1234         4303 :             default:
    1235         4303 :               pp_string (pp, " [len: ");
    1236         4303 :               break;
    1237              :             }
    1238         5719 :           dump_generic_node (pp, OMP_CLAUSE_SIZE (clause),
    1239              :                              spc, flags, false);
    1240         5719 :           if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP
    1241         5719 :               && OMP_CLAUSE_MAP_SIZE_NEEDS_ADJUSTMENT (clause))
    1242            2 :             pp_string (pp, " (needs adjustment)");
    1243         5719 :           pp_right_bracket (pp);
    1244              :         }
    1245         6732 :       if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP)
    1246              :         {
    1247         6474 :           if (OMP_CLAUSE_MAP_RUNTIME_IMPLICIT_P (clause))
    1248          833 :             pp_string (pp, " [runtime_implicit]");
    1249         6474 :           if (OMP_CLAUSE_MAP_GIMPLE_ONLY (clause))
    1250            1 :             pp_string (pp, " [gimple only]");
    1251              :         }
    1252         6732 :       pp_right_paren (pp);
    1253         6732 :       break;
    1254              : 
    1255           91 :     case OMP_CLAUSE_FROM:
    1256           91 :       pp_string (pp, "from(");
    1257           91 :       if (OMP_CLAUSE_MOTION_PRESENT (clause))
    1258           37 :         pp_string (pp, "present:");
    1259           91 :       if (OMP_CLAUSE_ITERATORS (clause))
    1260              :         {
    1261           10 :           dump_omp_iterators (pp, OMP_CLAUSE_ITERATORS (clause), spc, flags);
    1262           10 :           pp_colon (pp);
    1263              :         }
    1264           91 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
    1265              :                          spc, flags, false);
    1266           91 :       goto print_clause_size;
    1267              : 
    1268          111 :     case OMP_CLAUSE_TO:
    1269          111 :       pp_string (pp, "to(");
    1270          111 :       if (OMP_CLAUSE_MOTION_PRESENT (clause))
    1271           37 :         pp_string (pp, "present:");
    1272          111 :       if (OMP_CLAUSE_ITERATORS (clause))
    1273              :         {
    1274           25 :           dump_omp_iterators (pp, OMP_CLAUSE_ITERATORS (clause), spc, flags);
    1275           25 :           pp_colon (pp);
    1276              :         }
    1277          111 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
    1278              :                          spc, flags, false);
    1279          111 :       goto print_clause_size;
    1280              : 
    1281           56 :     case OMP_CLAUSE__CACHE_:
    1282           56 :       pp_string (pp, "(");
    1283           56 :       if (OMP_CLAUSE__CACHE__READONLY (clause))
    1284           32 :         pp_string (pp, "readonly:");
    1285           56 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
    1286              :                          spc, flags, false);
    1287           56 :       goto print_clause_size;
    1288              : 
    1289           24 :     case OMP_CLAUSE__MAPPER_BINDING_:
    1290           24 :       pp_string (pp, "mapper_binding(");
    1291           24 :       if (OMP_CLAUSE__MAPPER_BINDING__ID (clause))
    1292              :         {
    1293            0 :           dump_generic_node (pp, OMP_CLAUSE__MAPPER_BINDING__ID (clause), spc,
    1294              :                              flags, false);
    1295            0 :           pp_comma (pp);
    1296              :         }
    1297           24 :       dump_generic_node (pp,
    1298           24 :                          TREE_TYPE (OMP_CLAUSE__MAPPER_BINDING__DECL (clause)),
    1299              :                          spc, flags, false);
    1300           24 :       pp_comma (pp);
    1301           24 :       dump_generic_node (pp, OMP_CLAUSE__MAPPER_BINDING__MAPPER (clause), spc,
    1302              :                          flags, false);
    1303           24 :       pp_right_paren (pp);
    1304           24 :       break;
    1305              : 
    1306         1190 :     case OMP_CLAUSE_NUM_TEAMS:
    1307         1190 :       pp_string (pp, "num_teams(");
    1308         1190 :       if (OMP_CLAUSE_NUM_TEAMS_DIMS (clause))
    1309           13 :         pp_string (pp, "dims():");
    1310         1190 :       if (OMP_CLAUSE_NUM_TEAMS_LOWER_EXPR (clause))
    1311              :         {
    1312            0 :           dump_generic_node (pp, OMP_CLAUSE_NUM_TEAMS_LOWER_EXPR (clause),
    1313              :                              spc, flags, false);
    1314            0 :           pp_colon (pp);
    1315              :         }
    1316         1190 :       dump_generic_node (pp, OMP_CLAUSE_NUM_TEAMS_UPPER_EXPR (clause),
    1317              :                          spc, flags, false);
    1318         1190 :       pp_right_paren (pp);
    1319         1190 :       break;
    1320              : 
    1321         1202 :     case OMP_CLAUSE_THREAD_LIMIT:
    1322         1202 :       pp_string (pp, "thread_limit(");
    1323         1202 :       if (OMP_CLAUSE_THREAD_LIMIT_STRICT (clause))
    1324           10 :         pp_string (pp, "strict");
    1325         1202 :       if (OMP_CLAUSE_THREAD_LIMIT_STRICT (clause)
    1326         1202 :           && OMP_CLAUSE_THREAD_LIMIT_DIMS (clause))
    1327            7 :         pp_comma (pp);
    1328         1202 :       if (OMP_CLAUSE_THREAD_LIMIT_DIMS (clause))
    1329           11 :         pp_string (pp, "dims()");
    1330         1202 :       if (OMP_CLAUSE_THREAD_LIMIT_STRICT (clause)
    1331         1202 :           || OMP_CLAUSE_THREAD_LIMIT_DIMS (clause))
    1332           14 :         pp_colon (pp);
    1333         1202 :       dump_generic_node (pp, OMP_CLAUSE_THREAD_LIMIT_EXPR (clause),
    1334              :                          spc, flags, false);
    1335         1202 :       pp_right_paren (pp);
    1336         1202 :       break;
    1337              : 
    1338           66 :     case OMP_CLAUSE_DEVICE:
    1339           66 :       pp_string (pp, "device(");
    1340           66 :       if (OMP_CLAUSE_DEVICE_ANCESTOR (clause))
    1341           13 :         pp_string (pp, "ancestor:");
    1342           66 :       dump_generic_node (pp, OMP_CLAUSE_DEVICE_ID (clause),
    1343              :                          spc, flags, false);
    1344           66 :       pp_right_paren (pp);
    1345           66 :       break;
    1346              : 
    1347            0 :     case OMP_CLAUSE_DIST_SCHEDULE:
    1348            0 :       pp_string (pp, "dist_schedule(static");
    1349            0 :       if (OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (clause))
    1350              :         {
    1351            0 :           pp_comma (pp);
    1352            0 :           dump_generic_node (pp,
    1353            0 :                              OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (clause),
    1354              :                              spc, flags, false);
    1355              :         }
    1356            0 :       pp_right_paren (pp);
    1357            0 :       break;
    1358              : 
    1359            4 :     case OMP_CLAUSE_PROC_BIND:
    1360            4 :       pp_string (pp, "proc_bind(");
    1361            4 :       switch (OMP_CLAUSE_PROC_BIND_KIND (clause))
    1362              :         {
    1363            0 :         case OMP_CLAUSE_PROC_BIND_MASTER:
    1364              :           /* Same enum value: case OMP_CLAUSE_PROC_BIND_PRIMARY: */
    1365              :           /* TODO: Change to 'primary' for OpenMP 5.1.  */
    1366            0 :           pp_string (pp, "master");
    1367            0 :           break;
    1368            0 :         case OMP_CLAUSE_PROC_BIND_CLOSE:
    1369            0 :           pp_string (pp, "close");
    1370            0 :           break;
    1371            4 :         case OMP_CLAUSE_PROC_BIND_SPREAD:
    1372            4 :           pp_string (pp, "spread");
    1373            4 :           break;
    1374            0 :         default:
    1375            0 :           gcc_unreachable ();
    1376              :         }
    1377            4 :       pp_right_paren (pp);
    1378            4 :       break;
    1379              : 
    1380           32 :     case OMP_CLAUSE_DEVICE_TYPE:
    1381           32 :       pp_string (pp, "device_type(");
    1382           32 :       switch (OMP_CLAUSE_DEVICE_TYPE_KIND (clause))
    1383              :         {
    1384            7 :         case OMP_CLAUSE_DEVICE_TYPE_HOST:
    1385            7 :           pp_string (pp, "host");
    1386            7 :           break;
    1387            8 :         case OMP_CLAUSE_DEVICE_TYPE_NOHOST:
    1388            8 :           pp_string (pp, "nohost");
    1389            8 :           break;
    1390           17 :         case OMP_CLAUSE_DEVICE_TYPE_ANY:
    1391           17 :           pp_string (pp, "any");
    1392           17 :           break;
    1393            0 :         default:
    1394            0 :           gcc_unreachable ();
    1395              :         }
    1396           32 :       pp_right_paren (pp);
    1397           32 :       break;
    1398              : 
    1399           25 :     case OMP_CLAUSE_DYN_GROUPPRIVATE:
    1400           25 :       pp_string (pp, "dyn_groupprivate(");
    1401           25 :       switch (OMP_CLAUSE_DYN_GROUPPRIVATE_KIND (clause))
    1402              :         {
    1403            5 :         case OMP_CLAUSE_FALLBACK_ABORT:
    1404            5 :           pp_string (pp, "fallback(abort):");
    1405            5 :           break;
    1406            5 :         case OMP_CLAUSE_FALLBACK_DEFAULT_MEM:
    1407            5 :           pp_string (pp, "fallback(default_mem):");
    1408            5 :           break;
    1409            5 :         case OMP_CLAUSE_FALLBACK_NULL:
    1410            5 :           pp_string (pp, "fallback(null):");
    1411            5 :           break;
    1412              :         case OMP_CLAUSE_FALLBACK_UNSPECIFIED:
    1413              :           break;
    1414              :         }
    1415           25 :       dump_generic_node (pp, OMP_CLAUSE_DYN_GROUPPRIVATE_EXPR (clause),
    1416              :                          spc, flags, false);
    1417           25 :       pp_right_paren (pp);
    1418           25 :       break;
    1419              : 
    1420           23 :     case OMP_CLAUSE_SAFELEN:
    1421           23 :       pp_string (pp, "safelen(");
    1422           23 :       dump_generic_node (pp, OMP_CLAUSE_SAFELEN_EXPR (clause),
    1423              :                          spc, flags, false);
    1424           23 :       pp_right_paren (pp);
    1425           23 :       break;
    1426              : 
    1427          424 :     case OMP_CLAUSE_SIMDLEN:
    1428          424 :       pp_string (pp, "simdlen(");
    1429          424 :       dump_generic_node (pp, OMP_CLAUSE_SIMDLEN_EXPR (clause),
    1430              :                          spc, flags, false);
    1431          424 :       pp_right_paren (pp);
    1432          424 :       break;
    1433              : 
    1434            4 :     case OMP_CLAUSE_PRIORITY:
    1435            4 :       pp_string (pp, "priority(");
    1436            4 :       dump_generic_node (pp, OMP_CLAUSE_PRIORITY_EXPR (clause),
    1437              :                          spc, flags, false);
    1438            4 :       pp_right_paren (pp);
    1439            4 :       break;
    1440              : 
    1441           10 :     case OMP_CLAUSE_GRAINSIZE:
    1442           10 :       pp_string (pp, "grainsize(");
    1443           10 :       if (OMP_CLAUSE_GRAINSIZE_STRICT (clause))
    1444            0 :         pp_string (pp, "strict:");
    1445           10 :       dump_generic_node (pp, OMP_CLAUSE_GRAINSIZE_EXPR (clause),
    1446              :                          spc, flags, false);
    1447           10 :       pp_right_paren (pp);
    1448           10 :       break;
    1449              : 
    1450            0 :     case OMP_CLAUSE_NUM_TASKS:
    1451            0 :       pp_string (pp, "num_tasks(");
    1452            0 :       if (OMP_CLAUSE_NUM_TASKS_STRICT (clause))
    1453            0 :         pp_string (pp, "strict:");
    1454            0 :       dump_generic_node (pp, OMP_CLAUSE_NUM_TASKS_EXPR (clause),
    1455              :                          spc, flags, false);
    1456            0 :       pp_right_paren (pp);
    1457            0 :       break;
    1458              : 
    1459           24 :     case OMP_CLAUSE_HINT:
    1460           24 :       pp_string (pp, "hint(");
    1461           24 :       dump_generic_node (pp, OMP_CLAUSE_HINT_EXPR (clause),
    1462              :                          spc, flags, false);
    1463           24 :       pp_right_paren (pp);
    1464           24 :       break;
    1465              : 
    1466           43 :     case OMP_CLAUSE_FILTER:
    1467           43 :       pp_string (pp, "filter(");
    1468           43 :       dump_generic_node (pp, OMP_CLAUSE_FILTER_EXPR (clause),
    1469              :                          spc, flags, false);
    1470           43 :       pp_right_paren (pp);
    1471           43 :       break;
    1472              : 
    1473          582 :     case OMP_CLAUSE_DEFAULTMAP:
    1474          582 :       pp_string (pp, "defaultmap(");
    1475          582 :       switch (OMP_CLAUSE_DEFAULTMAP_BEHAVIOR (clause))
    1476              :         {
    1477           12 :         case OMP_CLAUSE_DEFAULTMAP_ALLOC:
    1478           12 :           pp_string (pp, "alloc");
    1479           12 :           break;
    1480           13 :         case OMP_CLAUSE_DEFAULTMAP_TO:
    1481           13 :           pp_string (pp, "to");
    1482           13 :           break;
    1483            4 :         case OMP_CLAUSE_DEFAULTMAP_FROM:
    1484            4 :           pp_string (pp, "from");
    1485            4 :           break;
    1486           37 :         case OMP_CLAUSE_DEFAULTMAP_TOFROM:
    1487           37 :           pp_string (pp, "tofrom");
    1488           37 :           break;
    1489           53 :         case OMP_CLAUSE_DEFAULTMAP_FIRSTPRIVATE:
    1490           53 :           pp_string (pp, "firstprivate");
    1491           53 :           break;
    1492          438 :         case OMP_CLAUSE_DEFAULTMAP_NONE:
    1493          438 :           pp_string (pp, "none");
    1494          438 :           break;
    1495           11 :         case OMP_CLAUSE_DEFAULTMAP_PRESENT:
    1496           11 :           pp_string (pp, "present");
    1497           11 :           break;
    1498           14 :         case OMP_CLAUSE_DEFAULTMAP_DEFAULT:
    1499           14 :           pp_string (pp, "default");
    1500           14 :           break;
    1501            0 :         default:
    1502            0 :           gcc_unreachable ();
    1503              :         }
    1504          582 :       switch (OMP_CLAUSE_DEFAULTMAP_CATEGORY (clause))
    1505              :         {
    1506              :         case OMP_CLAUSE_DEFAULTMAP_CATEGORY_UNSPECIFIED:
    1507              :           break;
    1508           20 :         case OMP_CLAUSE_DEFAULTMAP_CATEGORY_ALL:
    1509           20 :           pp_string (pp, ":all");
    1510           20 :           break;
    1511           41 :         case OMP_CLAUSE_DEFAULTMAP_CATEGORY_SCALAR:
    1512           41 :           pp_string (pp, ":scalar");
    1513           41 :           break;
    1514           46 :         case OMP_CLAUSE_DEFAULTMAP_CATEGORY_AGGREGATE:
    1515           46 :           pp_string (pp, ":aggregate");
    1516           46 :           break;
    1517           12 :         case OMP_CLAUSE_DEFAULTMAP_CATEGORY_ALLOCATABLE:
    1518           12 :           pp_string (pp, ":allocatable");
    1519           12 :           break;
    1520           30 :         case OMP_CLAUSE_DEFAULTMAP_CATEGORY_POINTER:
    1521           30 :           pp_string (pp, ":pointer");
    1522           30 :           break;
    1523            0 :         default:
    1524            0 :           gcc_unreachable ();
    1525              :         }
    1526          582 :       pp_right_paren (pp);
    1527          582 :       break;
    1528              : 
    1529          302 :     case OMP_CLAUSE_ORDER:
    1530          302 :       pp_string (pp, "order(");
    1531          302 :       if (OMP_CLAUSE_ORDER_UNCONSTRAINED (clause))
    1532           20 :         pp_string (pp, "unconstrained:");
    1533          282 :       else if (OMP_CLAUSE_ORDER_REPRODUCIBLE (clause))
    1534           20 :         pp_string (pp, "reproducible:");
    1535          302 :       pp_string (pp, "concurrent)");
    1536          302 :       break;
    1537              : 
    1538          260 :     case OMP_CLAUSE_BIND:
    1539          260 :       pp_string (pp, "bind(");
    1540          260 :       switch (OMP_CLAUSE_BIND_KIND (clause))
    1541              :         {
    1542          143 :         case OMP_CLAUSE_BIND_TEAMS:
    1543          143 :           pp_string (pp, "teams");
    1544          143 :           break;
    1545           97 :         case OMP_CLAUSE_BIND_PARALLEL:
    1546           97 :           pp_string (pp, "parallel");
    1547           97 :           break;
    1548           20 :         case OMP_CLAUSE_BIND_THREAD:
    1549           20 :           pp_string (pp, "thread");
    1550           20 :           break;
    1551            0 :         default:
    1552            0 :           gcc_unreachable ();
    1553              :         }
    1554          260 :       pp_right_paren (pp);
    1555          260 :       break;
    1556              : 
    1557            8 :     case OMP_CLAUSE__SIMDUID_:
    1558            8 :       pp_string (pp, "_simduid_(");
    1559            8 :       dump_generic_node (pp, OMP_CLAUSE__SIMDUID__DECL (clause),
    1560              :                          spc, flags, false);
    1561            8 :       pp_right_paren (pp);
    1562            8 :       break;
    1563              : 
    1564            0 :     case OMP_CLAUSE__SIMT_:
    1565            0 :       pp_string (pp, "_simt_");
    1566            0 :       break;
    1567              : 
    1568          349 :     case OMP_CLAUSE_GANG:
    1569          349 :       pp_string (pp, "gang");
    1570          349 :       if (OMP_CLAUSE_GANG_EXPR (clause) != NULL_TREE)
    1571              :         {
    1572           64 :           pp_string (pp, "(num: ");
    1573           64 :           dump_generic_node (pp, OMP_CLAUSE_GANG_EXPR (clause),
    1574              :                              spc, flags, false);
    1575              :         }
    1576          349 :       if (OMP_CLAUSE_GANG_STATIC_EXPR (clause) != NULL_TREE)
    1577              :         {
    1578           12 :           if (OMP_CLAUSE_GANG_EXPR (clause) == NULL_TREE)
    1579           10 :             pp_left_paren (pp);
    1580              :           else
    1581            2 :             pp_space (pp);
    1582           12 :           pp_string (pp, "static:");
    1583           12 :           if (OMP_CLAUSE_GANG_STATIC_EXPR (clause)
    1584           12 :               == integer_minus_one_node)
    1585            3 :             pp_character (pp, '*');
    1586              :           else
    1587            9 :             dump_generic_node (pp, OMP_CLAUSE_GANG_STATIC_EXPR (clause),
    1588              :                                spc, flags, false);
    1589              :         }
    1590          349 :       if (OMP_CLAUSE_GANG_EXPR (clause) != NULL_TREE
    1591          349 :           || OMP_CLAUSE_GANG_STATIC_EXPR (clause) != NULL_TREE)
    1592           74 :         pp_right_paren (pp);
    1593              :       break;
    1594              : 
    1595           97 :     case OMP_CLAUSE_ASYNC:
    1596           97 :       pp_string (pp, "async");
    1597           97 :       if (OMP_CLAUSE_ASYNC_EXPR (clause))
    1598              :         {
    1599           97 :           pp_character(pp, '(');
    1600           97 :           dump_generic_node (pp, OMP_CLAUSE_ASYNC_EXPR (clause),
    1601              :                              spc, flags, false);
    1602           97 :           pp_character(pp, ')');
    1603              :         }
    1604              :       break;
    1605              : 
    1606           58 :     case OMP_CLAUSE_AUTO:
    1607           58 :     case OMP_CLAUSE_SEQ:
    1608           58 :       pp_string (pp, omp_clause_code_name[OMP_CLAUSE_CODE (clause)]);
    1609           58 :       break;
    1610              : 
    1611          100 :     case OMP_CLAUSE_WAIT:
    1612          100 :       pp_string (pp, "wait(");
    1613          100 :       dump_generic_node (pp, OMP_CLAUSE_WAIT_EXPR (clause),
    1614              :                          spc, flags, false);
    1615          100 :       pp_character(pp, ')');
    1616          100 :       break;
    1617              : 
    1618          192 :     case OMP_CLAUSE_WORKER:
    1619          192 :       pp_string (pp, "worker");
    1620          192 :       if (OMP_CLAUSE_WORKER_EXPR (clause) != NULL_TREE)
    1621              :         {
    1622           62 :           pp_left_paren (pp);
    1623           62 :           dump_generic_node (pp, OMP_CLAUSE_WORKER_EXPR (clause),
    1624              :                              spc, flags, false);
    1625           62 :           pp_right_paren (pp);
    1626              :         }
    1627              :       break;
    1628              : 
    1629          179 :     case OMP_CLAUSE_VECTOR:
    1630          179 :       pp_string (pp, "vector");
    1631          179 :       if (OMP_CLAUSE_VECTOR_EXPR (clause) != NULL_TREE)
    1632              :         {
    1633           62 :           pp_left_paren (pp);
    1634           62 :           dump_generic_node (pp, OMP_CLAUSE_VECTOR_EXPR (clause),
    1635              :                              spc, flags, false);
    1636           62 :           pp_right_paren (pp);
    1637              :         }
    1638              :       break;
    1639              : 
    1640           25 :     case OMP_CLAUSE_NUM_GANGS:
    1641           25 :       pp_string (pp, "num_gangs(");
    1642           25 :       dump_generic_node (pp, OMP_CLAUSE_NUM_GANGS_EXPR (clause),
    1643              :                          spc, flags, false);
    1644           25 :       pp_character (pp, ')');
    1645           25 :       break;
    1646              : 
    1647            2 :     case OMP_CLAUSE_NUM_WORKERS:
    1648            2 :       pp_string (pp, "num_workers(");
    1649            2 :       dump_generic_node (pp, OMP_CLAUSE_NUM_WORKERS_EXPR (clause),
    1650              :                          spc, flags, false);
    1651            2 :       pp_character (pp, ')');
    1652            2 :       break;
    1653              : 
    1654            2 :     case OMP_CLAUSE_VECTOR_LENGTH:
    1655            2 :       pp_string (pp, "vector_length(");
    1656            2 :       dump_generic_node (pp, OMP_CLAUSE_VECTOR_LENGTH_EXPR (clause),
    1657              :                          spc, flags, false);
    1658            2 :       pp_character (pp, ')');
    1659            2 :       break;
    1660              : 
    1661          166 :     case OMP_CLAUSE_INBRANCH:
    1662          166 :       pp_string (pp, "inbranch");
    1663          166 :       break;
    1664          925 :     case OMP_CLAUSE_NOTINBRANCH:
    1665          925 :       pp_string (pp, "notinbranch");
    1666          925 :       break;
    1667            0 :     case OMP_CLAUSE_FOR:
    1668            0 :       pp_string (pp, "for");
    1669            0 :       break;
    1670            0 :     case OMP_CLAUSE_PARALLEL:
    1671            0 :       pp_string (pp, "parallel");
    1672            0 :       break;
    1673            0 :     case OMP_CLAUSE_SECTIONS:
    1674            0 :       pp_string (pp, "sections");
    1675            0 :       break;
    1676            0 :     case OMP_CLAUSE_TASKGROUP:
    1677            0 :       pp_string (pp, "taskgroup");
    1678            0 :       break;
    1679            0 :     case OMP_CLAUSE_NOGROUP:
    1680            0 :       pp_string (pp, "nogroup");
    1681            0 :       break;
    1682            0 :     case OMP_CLAUSE_THREADS:
    1683            0 :       pp_string (pp, "threads");
    1684            0 :       break;
    1685           10 :     case OMP_CLAUSE_SIMD:
    1686           10 :       pp_string (pp, "simd");
    1687           10 :       break;
    1688          431 :     case OMP_CLAUSE_INDEPENDENT:
    1689          431 :       pp_string (pp, "independent");
    1690          431 :       break;
    1691           55 :     case OMP_CLAUSE_TILE:
    1692           55 :       pp_string (pp, "tile(");
    1693           55 :       dump_generic_node (pp, OMP_CLAUSE_TILE_LIST (clause),
    1694              :                          spc, flags, false);
    1695           55 :       pp_right_paren (pp);
    1696           55 :       break;
    1697          135 :     case OMP_CLAUSE_PARTIAL:
    1698          135 :       pp_string (pp, "partial");
    1699          135 :       if (OMP_CLAUSE_PARTIAL_EXPR (clause))
    1700              :         {
    1701          130 :           pp_left_paren (pp);
    1702          130 :           dump_generic_node (pp, OMP_CLAUSE_PARTIAL_EXPR (clause),
    1703              :                              spc, flags, false);
    1704          130 :           pp_right_paren (pp);
    1705              :         }
    1706              :       break;
    1707           55 :     case OMP_CLAUSE_FULL:
    1708           55 :       pp_string (pp, "full");
    1709           55 :       break;
    1710          188 :     case OMP_CLAUSE_SIZES:
    1711          188 :       pp_string (pp, "sizes(");
    1712          188 :       dump_generic_node (pp, OMP_CLAUSE_SIZES_LIST (clause),
    1713              :                          spc, flags, false);
    1714          188 :       pp_right_paren (pp);
    1715          188 :       break;
    1716          351 :     case OMP_CLAUSE_INTEROP:
    1717          351 :       pp_string (pp, "interop(");
    1718          351 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause), spc, flags, false);
    1719          351 :       pp_right_paren (pp);
    1720          351 :       break;
    1721           58 :     case OMP_CLAUSE_IF_PRESENT:
    1722           58 :       pp_string (pp, "if_present");
    1723           58 :       break;
    1724           50 :     case OMP_CLAUSE_FINALIZE:
    1725           50 :       pp_string (pp, "finalize");
    1726           50 :       break;
    1727            5 :     case OMP_CLAUSE_NOHOST:
    1728            5 :       pp_string (pp, "nohost");
    1729            5 :       break;
    1730            0 :     case OMP_CLAUSE_DETACH:
    1731            0 :       pp_string (pp, "detach(");
    1732            0 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause), spc, flags,
    1733              :                          false);
    1734            0 :       pp_right_paren (pp);
    1735            0 :       break;
    1736            0 :     default:
    1737            0 :       gcc_unreachable ();
    1738              :     }
    1739        30028 : }
    1740              : 
    1741              : 
    1742              : /* Dump chain of OMP clauses.
    1743              : 
    1744              :    PP, SPC and FLAGS are as in dump_generic_node.  */
    1745              : 
    1746              : void
    1747        13008 : dump_omp_clauses (pretty_printer *pp, tree clause, int spc, dump_flags_t flags,
    1748              :                   bool leading_space)
    1749              : {
    1750        43036 :   while (clause)
    1751              :     {
    1752        30028 :       if (leading_space)
    1753        28463 :         pp_space (pp);
    1754        30028 :       dump_omp_clause (pp, clause, spc, flags);
    1755        30028 :       leading_space = true;
    1756              : 
    1757        30028 :       clause = OMP_CLAUSE_CHAIN (clause);
    1758              :     }
    1759        13008 : }
    1760              : 
    1761              : /* Dump an OpenMP context selector CTX to PP.  */
    1762              : static void
    1763          409 : dump_omp_context_selector (pretty_printer *pp, tree ctx, int spc,
    1764              :                            dump_flags_t flags)
    1765              : {
    1766          922 :   for (tree set = ctx; set && set != error_mark_node; set = TREE_CHAIN (set))
    1767              :     {
    1768          513 :       pp_string (pp, OMP_TSS_NAME (set));
    1769          513 :       pp_string (pp, " = {");
    1770          513 :       for (tree sel = OMP_TSS_TRAIT_SELECTORS (set);
    1771         1108 :            sel && sel != error_mark_node; sel = TREE_CHAIN (sel))
    1772              :         {
    1773          595 :           if (OMP_TS_CODE (sel) == OMP_TRAIT_INVALID)
    1774            0 :             pp_string (pp, "<unknown selector>");
    1775              :           else
    1776          595 :             pp_string (pp, OMP_TS_NAME (sel));
    1777          595 :           tree score = OMP_TS_SCORE (sel);
    1778          595 :           tree props = OMP_TS_PROPERTIES (sel);
    1779          595 :           if (props)
    1780              :             {
    1781          288 :               pp_string (pp, " (");
    1782          288 :               if (score)
    1783              :                 {
    1784           55 :                   pp_string (pp, "score(");
    1785           55 :                   dump_generic_node (pp, score, spc + 4, flags, false);
    1786           55 :                   pp_string (pp, "): ");
    1787              :                 }
    1788          592 :               for (tree prop = props; prop; prop = TREE_CHAIN (prop))
    1789              :                 {
    1790          304 :                   if (OMP_TP_NAME (prop) == OMP_TP_NAMELIST_NODE)
    1791              :                     {
    1792          169 :                       const char *str = omp_context_name_list_prop (prop);
    1793          169 :                       pp_string (pp, "\"");
    1794          169 :                       pretty_print_string (pp, str, strlen (str) + 1);
    1795          169 :                       pp_string (pp, "\"");
    1796              :                     }
    1797          135 :                   else if (OMP_TP_NAME (prop))
    1798            6 :                     dump_generic_node (pp, OMP_TP_NAME (prop), spc + 4,
    1799              :                                        flags, false);
    1800          129 :                   else if (OMP_TP_VALUE (prop))
    1801          129 :                     dump_generic_node (pp, OMP_TP_VALUE (prop), spc + 4,
    1802              :                                        flags, false);
    1803          304 :                   if (TREE_CHAIN (prop))
    1804              :                     {
    1805           16 :                       pp_comma (pp);
    1806           16 :                       pp_space (pp);
    1807              :                     }
    1808              :                 }
    1809          288 :               pp_string (pp, ")");
    1810              :             }
    1811          595 :           if (TREE_CHAIN (sel))
    1812              :             {
    1813           82 :               pp_comma (pp);
    1814           82 :               pp_space (pp);
    1815              :             }
    1816              :         }
    1817          513 :       pp_string (pp, "}");
    1818          513 :       if (TREE_CHAIN (set))
    1819              :         {
    1820          116 :           pp_comma (pp);
    1821          116 :           newline_and_indent (pp, spc);
    1822              :         }
    1823              :     }
    1824          409 : }
    1825              : 
    1826              : /* Wrapper for above, used for "declare variant".  Compare to
    1827              :    print_generic_expr.  */
    1828              : void
    1829          309 : print_omp_context_selector (FILE *file, tree t, dump_flags_t flags)
    1830              : {
    1831          309 :   maybe_init_pretty_print (file);
    1832          309 :   dump_omp_context_selector (tree_pp, t, 0, flags);
    1833          309 :   pp_flush (tree_pp);
    1834          309 : }
    1835              : 
    1836              : /* Dump location LOC to PP.  */
    1837              : 
    1838              : void
    1839         2329 : dump_location (pretty_printer *pp, location_t loc, dump_flags_t flags)
    1840              : {
    1841         2329 :   expanded_location xloc = expand_location (loc);
    1842         2329 :   int discriminator = get_discriminator_from_loc (loc);
    1843              : 
    1844         2329 :   pp_left_bracket (pp);
    1845         2329 :   if (xloc.file)
    1846              :     {
    1847         2329 :       pp_string (pp, xloc.file);
    1848         2329 :       pp_string (pp, ":");
    1849              :     }
    1850         2329 :   pp_decimal_int (pp, xloc.line);
    1851         2329 :   pp_colon (pp);
    1852         2329 :   pp_decimal_int (pp, xloc.column);
    1853         2329 :   if (discriminator && (flags & TDF_COMPARE_DEBUG) == 0)
    1854              :   {
    1855           12 :     pp_string (pp, " discrim ");
    1856           12 :     pp_decimal_int (pp, discriminator);
    1857              :   }
    1858         2329 :   pp_string (pp, "] ");
    1859         2329 : }
    1860              : 
    1861              : 
    1862              : /* Dump lexical block BLOCK.  PP, SPC and FLAGS are as in
    1863              :    dump_generic_node.  */
    1864              : 
    1865              : static void
    1866            6 : dump_block_node (pretty_printer *pp, tree block, int spc, dump_flags_t flags)
    1867              : {
    1868            6 :   tree t;
    1869              : 
    1870            6 :   pp_string (pp, "BLOCK #");
    1871            6 :   pp_decimal_int (pp, BLOCK_NUMBER (block));
    1872            6 :   pp_character (pp, ' ');
    1873              : 
    1874            6 :   if (flags & TDF_ADDRESS)
    1875              :     {
    1876            0 :       pp_character (pp, '[');
    1877            0 :       pp_scalar (pp, "%p", (void *) block);
    1878            0 :       pp_string (pp, "] ");
    1879              :     }
    1880              : 
    1881            6 :   if (TREE_ASM_WRITTEN (block))
    1882            0 :     pp_string (pp, "[written] ");
    1883              : 
    1884            6 :   if (flags & TDF_SLIM)
    1885            6 :     return;
    1886              : 
    1887            0 :   if (BLOCK_SOURCE_LOCATION (block))
    1888            0 :     dump_location (pp, BLOCK_SOURCE_LOCATION (block), flags);
    1889              : 
    1890            0 :   newline_and_indent (pp, spc + 2);
    1891              : 
    1892            0 :   if (BLOCK_SUPERCONTEXT (block))
    1893              :     {
    1894            0 :       pp_string (pp, "SUPERCONTEXT: ");
    1895            0 :       dump_generic_node (pp, BLOCK_SUPERCONTEXT (block), 0,
    1896              :                          flags | TDF_SLIM, false);
    1897            0 :       newline_and_indent (pp, spc + 2);
    1898              :     }
    1899              : 
    1900            0 :   if (BLOCK_SUBBLOCKS (block)
    1901            0 :       && (!lang_GNU_Fortran ()
    1902            0 :           || TREE_CODE (BLOCK_SUBBLOCKS (block)) != STATEMENT_LIST))
    1903              :     {
    1904            0 :       pp_string (pp, "SUBBLOCKS: ");
    1905            0 :       for (t = BLOCK_SUBBLOCKS (block); t; t = BLOCK_CHAIN (t))
    1906              :         {
    1907            0 :           dump_generic_node (pp, t, 0, flags | TDF_SLIM, false);
    1908            0 :           pp_space (pp);
    1909              :         }
    1910            0 :       newline_and_indent (pp, spc + 2);
    1911              :     }
    1912              : 
    1913            0 :   if (BLOCK_CHAIN (block))
    1914              :     {
    1915            0 :       pp_string (pp, "SIBLINGS: ");
    1916            0 :       for (t = BLOCK_CHAIN (block); t; t = BLOCK_CHAIN (t))
    1917              :         {
    1918            0 :           dump_generic_node (pp, t, 0, flags | TDF_SLIM, false);
    1919            0 :           pp_space (pp);
    1920              :         }
    1921            0 :       newline_and_indent (pp, spc + 2);
    1922              :     }
    1923              : 
    1924            0 :   if (BLOCK_VARS (block))
    1925              :     {
    1926            0 :       pp_string (pp, "VARS: ");
    1927            0 :       for (t = BLOCK_VARS (block); t; t = TREE_CHAIN (t))
    1928              :         {
    1929            0 :           dump_generic_node (pp, t, 0, flags, false);
    1930            0 :           pp_space (pp);
    1931              :         }
    1932            0 :       newline_and_indent (pp, spc + 2);
    1933              :     }
    1934              : 
    1935            0 :   if (vec_safe_length (BLOCK_NONLOCALIZED_VARS (block)) > 0)
    1936              :     {
    1937            0 :       unsigned i;
    1938            0 :       vec<tree, va_gc> *nlv = BLOCK_NONLOCALIZED_VARS (block);
    1939              : 
    1940            0 :       pp_string (pp, "NONLOCALIZED_VARS: ");
    1941            0 :       FOR_EACH_VEC_ELT (*nlv, i, t)
    1942              :         {
    1943            0 :           dump_generic_node (pp, t, 0, flags, false);
    1944            0 :           pp_space (pp);
    1945              :         }
    1946            0 :       newline_and_indent (pp, spc + 2);
    1947              :     }
    1948              : 
    1949            0 :   if (BLOCK_ABSTRACT_ORIGIN (block))
    1950              :     {
    1951            0 :       pp_string (pp, "ABSTRACT_ORIGIN: ");
    1952            0 :       dump_generic_node (pp, BLOCK_ABSTRACT_ORIGIN (block), 0,
    1953              :                          flags | TDF_SLIM, false);
    1954            0 :       newline_and_indent (pp, spc + 2);
    1955              :     }
    1956              : 
    1957            0 :   if (BLOCK_FRAGMENT_ORIGIN (block))
    1958              :     {
    1959            0 :       pp_string (pp, "FRAGMENT_ORIGIN: ");
    1960            0 :       dump_generic_node (pp, BLOCK_FRAGMENT_ORIGIN (block), 0,
    1961              :                          flags | TDF_SLIM, false);
    1962            0 :       newline_and_indent (pp, spc + 2);
    1963              :     }
    1964              : 
    1965            0 :   if (BLOCK_FRAGMENT_CHAIN (block))
    1966              :     {
    1967            0 :       pp_string (pp, "FRAGMENT_CHAIN: ");
    1968            0 :       for (t = BLOCK_FRAGMENT_CHAIN (block); t; t = BLOCK_FRAGMENT_CHAIN (t))
    1969              :         {
    1970            0 :           dump_generic_node (pp, t, 0, flags | TDF_SLIM, false);
    1971            0 :           pp_space (pp);
    1972              :         }
    1973            0 :       newline_and_indent (pp, spc + 2);
    1974              :     }
    1975              : }
    1976              : 
    1977              : /* Dump #pragma omp atomic memory order clause.  */
    1978              : 
    1979              : void
    1980         1343 : dump_omp_atomic_memory_order (pretty_printer *pp, enum omp_memory_order mo)
    1981              : {
    1982         1343 :   switch (mo & OMP_MEMORY_ORDER_MASK)
    1983              :     {
    1984         1158 :     case OMP_MEMORY_ORDER_RELAXED:
    1985         1158 :       pp_string (pp, " relaxed");
    1986         1158 :       break;
    1987           52 :     case OMP_MEMORY_ORDER_SEQ_CST:
    1988           52 :       pp_string (pp, " seq_cst");
    1989           52 :       break;
    1990           37 :     case OMP_MEMORY_ORDER_ACQ_REL:
    1991           37 :       pp_string (pp, " acq_rel");
    1992           37 :       break;
    1993           32 :     case OMP_MEMORY_ORDER_ACQUIRE:
    1994           32 :       pp_string (pp, " acquire");
    1995           32 :       break;
    1996           64 :     case OMP_MEMORY_ORDER_RELEASE:
    1997           64 :       pp_string (pp, " release");
    1998           64 :       break;
    1999              :     case OMP_MEMORY_ORDER_UNSPECIFIED:
    2000              :       break;
    2001            0 :     default:
    2002            0 :       gcc_unreachable ();
    2003              :     }
    2004         1343 :   switch (mo & OMP_FAIL_MEMORY_ORDER_MASK)
    2005              :     {
    2006            0 :     case OMP_FAIL_MEMORY_ORDER_RELAXED:
    2007            0 :       pp_string (pp, " fail(relaxed)");
    2008            0 :       break;
    2009            0 :     case OMP_FAIL_MEMORY_ORDER_SEQ_CST:
    2010            0 :       pp_string (pp, " fail(seq_cst)");
    2011            0 :       break;
    2012            0 :     case OMP_FAIL_MEMORY_ORDER_ACQUIRE:
    2013            0 :       pp_string (pp, " fail(acquire)");
    2014            0 :       break;
    2015              :     case OMP_FAIL_MEMORY_ORDER_UNSPECIFIED:
    2016              :       break;
    2017            0 :     default:
    2018            0 :       gcc_unreachable ();
    2019              :     }
    2020         1343 : }
    2021              : 
    2022              : /* Helper to dump a MEM_REF node.  */
    2023              : 
    2024              : static void
    2025      1316303 : dump_mem_ref (pretty_printer *pp, tree node, int spc, dump_flags_t flags)
    2026              : {
    2027      1316303 :   if ((TREE_CODE (node) == MEM_REF
    2028      1316303 :        || TREE_CODE (node) == TARGET_MEM_REF)
    2029      1316303 :       && (flags & TDF_GIMPLE))
    2030              :     {
    2031            3 :       pp_string (pp, "__MEM <");
    2032            3 :       dump_generic_node (pp, TREE_TYPE (node),
    2033              :                          spc, flags | TDF_SLIM, false);
    2034            6 :       if (TYPE_ALIGN (TREE_TYPE (node))
    2035            3 :           != TYPE_ALIGN (TYPE_MAIN_VARIANT (TREE_TYPE (node))))
    2036              :         {
    2037            3 :           pp_string (pp, ", ");
    2038            3 :           pp_decimal_int (pp, TYPE_ALIGN (TREE_TYPE (node)));
    2039              :         }
    2040            3 :       pp_greater (pp);
    2041            3 :       pp_string (pp, " (");
    2042            3 :       if (TREE_TYPE (TREE_OPERAND (node, 0))
    2043            3 :           != TREE_TYPE (TREE_OPERAND (node, 1)))
    2044              :         {
    2045            3 :           pp_left_paren (pp);
    2046            3 :           dump_generic_node (pp, TREE_TYPE (TREE_OPERAND (node, 1)),
    2047              :                              spc, flags | TDF_SLIM, false);
    2048            3 :           pp_right_paren (pp);
    2049              :         }
    2050            3 :       dump_generic_node (pp, TREE_OPERAND (node, 0),
    2051              :                          spc, flags | TDF_SLIM, false);
    2052            3 :       if (! integer_zerop (TREE_OPERAND (node, 1)))
    2053              :         {
    2054            0 :           pp_string (pp, " + ");
    2055            0 :           dump_generic_node (pp, TREE_OPERAND (node, 1),
    2056              :                              spc, flags | TDF_SLIM, false);
    2057              :         }
    2058            3 :       if (TREE_CODE (node) == TARGET_MEM_REF)
    2059              :         {
    2060            0 :           if (TREE_OPERAND (node, 2))
    2061              :             {
    2062              :               /* INDEX * STEP  */
    2063            0 :               pp_string (pp, " + ");
    2064            0 :               dump_generic_node (pp, TREE_OPERAND (node, 2),
    2065              :                                  spc, flags | TDF_SLIM, false);
    2066            0 :               pp_string (pp, " * ");
    2067            0 :               dump_generic_node (pp, TREE_OPERAND (node, 3),
    2068              :                                  spc, flags | TDF_SLIM, false);
    2069              :             }
    2070            0 :           if (TREE_OPERAND (node, 4))
    2071              :             {
    2072              :               /* INDEX2  */
    2073            0 :               pp_string (pp, " + ");
    2074            0 :               dump_generic_node (pp, TREE_OPERAND (node, 4),
    2075              :                                  spc, flags | TDF_SLIM, false);
    2076              :             }
    2077              :         }
    2078            3 :       if (TREE_CODE (node) == MEM_REF
    2079            3 :           && REF_REVERSE_STORAGE_ORDER (node))
    2080              :         {
    2081            0 :           pp_string (pp, ", ");
    2082            0 :           pp_decimal_int (pp, REF_REVERSE_STORAGE_ORDER (node));
    2083              :         }
    2084            3 :       if (MR_DEPENDENCE_CLIQUE (node) != 0)
    2085              :         {
    2086            0 :           pp_string (pp, ", ");
    2087            0 :           pp_decimal_int (pp, MR_DEPENDENCE_CLIQUE (node));
    2088            0 :           pp_colon (pp);
    2089            0 :           pp_decimal_int (pp, MR_DEPENDENCE_BASE (node));
    2090              :         }
    2091            3 :       pp_right_paren (pp);
    2092              :     }
    2093      1316300 :   else if (TREE_CODE (node) == MEM_REF
    2094      1289513 :            && integer_zerop (TREE_OPERAND (node, 1))
    2095              :            /* Dump the types of INTEGER_CSTs explicitly, for we can't
    2096              :               infer them and MEM_ATTR caching will share MEM_REFs
    2097              :               with differently-typed op0s.  */
    2098       965558 :            && TREE_CODE (TREE_OPERAND (node, 0)) != INTEGER_CST
    2099              :            /* Released SSA_NAMES have no TREE_TYPE.  */
    2100       965419 :            && TREE_TYPE (TREE_OPERAND (node, 0)) != NULL_TREE
    2101              :            /* Same pointer types, but ignoring POINTER_TYPE vs.
    2102              :               REFERENCE_TYPE.  */
    2103       965419 :            && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 0)))
    2104       965419 :                == TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1))))
    2105      1535608 :            && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 0)))
    2106       767804 :                == TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 1))))
    2107       767804 :            && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 0)))
    2108       767804 :                == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 1))))
    2109              :            /* Same value types ignoring qualifiers.  */
    2110       767655 :            && (TYPE_MAIN_VARIANT (TREE_TYPE (node))
    2111       767655 :                == TYPE_MAIN_VARIANT
    2112              :                (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1)))))
    2113      2067588 :            && (!(flags & TDF_ALIAS)
    2114         1480 :                || MR_DEPENDENCE_CLIQUE (node) == 0))
    2115              :     {
    2116       749974 :       if (TREE_CODE (TREE_OPERAND (node, 0)) != ADDR_EXPR)
    2117              :         {
    2118              :           /* Enclose pointers to arrays in parentheses.  */
    2119       656814 :           tree op0 = TREE_OPERAND (node, 0);
    2120       656814 :           tree op0type = TREE_TYPE (op0);
    2121       656814 :           if (POINTER_TYPE_P (op0type)
    2122       656814 :               && TREE_CODE (TREE_TYPE (op0type)) == ARRAY_TYPE)
    2123        30291 :             pp_left_paren (pp);
    2124       656814 :           pp_star (pp);
    2125       656814 :           dump_generic_node (pp, op0, spc, flags, false);
    2126       656814 :           if (POINTER_TYPE_P (op0type)
    2127       656814 :               && TREE_CODE (TREE_TYPE (op0type)) == ARRAY_TYPE)
    2128        30291 :             pp_right_paren (pp);
    2129              :         }
    2130              :       else
    2131        93160 :         dump_generic_node (pp,
    2132        93160 :                            TREE_OPERAND (TREE_OPERAND (node, 0), 0),
    2133              :                            spc, flags, false);
    2134              :     }
    2135              :   else
    2136              :     {
    2137       566326 :       pp_string (pp, "MEM");
    2138              : 
    2139       566326 :       tree nodetype = TREE_TYPE (node);
    2140       566326 :       tree op0 = TREE_OPERAND (node, 0);
    2141       566326 :       tree op1 = TREE_OPERAND (node, 1);
    2142       566326 :       tree op1type = TYPE_MAIN_VARIANT (TREE_TYPE (op1));
    2143              : 
    2144       566326 :       tree op0size = TYPE_SIZE (nodetype);
    2145       566326 :       tree op1size = TYPE_SIZE (TREE_TYPE (op1type));
    2146              : 
    2147       566326 :       if (!op0size || !op1size
    2148       566326 :           || !operand_equal_p (op0size, op1size, 0))
    2149              :         {
    2150       224617 :           pp_string (pp, " <");
    2151              :           /* If the size of the type of the operand is not the same
    2152              :              as the size of the MEM_REF expression include the type
    2153              :              of the latter similar to the TDF_GIMPLE output to make
    2154              :              it clear how many bytes of memory are being accessed.  */
    2155       224617 :           dump_generic_node (pp, nodetype, spc, flags | TDF_SLIM, false);
    2156       224617 :           pp_string (pp, "> ");
    2157              :         }
    2158              : 
    2159       566326 :       pp_string (pp, "[(");
    2160       566326 :       dump_generic_node (pp, op1type, spc, flags | TDF_SLIM, false);
    2161       566326 :       pp_right_paren (pp);
    2162       566326 :       dump_generic_node (pp, op0, spc, flags, false);
    2163       566326 :       if (!integer_zerop (op1))
    2164              :         {
    2165       326667 :           pp_string (pp, " + ");
    2166       326667 :           dump_generic_node (pp, op1, spc, flags, false);
    2167              :         }
    2168       566326 :       if (TREE_CODE (node) == TARGET_MEM_REF)
    2169              :         {
    2170        26787 :           tree tmp = TMR_INDEX2 (node);
    2171        26787 :           if (tmp)
    2172              :             {
    2173          291 :               pp_string (pp, " + ");
    2174          291 :               dump_generic_node (pp, tmp, spc, flags, false);
    2175              :             }
    2176        26787 :           tmp = TMR_INDEX (node);
    2177        26787 :           if (tmp)
    2178              :             {
    2179        22327 :               pp_string (pp, " + ");
    2180        22327 :               dump_generic_node (pp, tmp, spc, flags, false);
    2181        22327 :               tmp = TMR_STEP (node);
    2182        22327 :               pp_string (pp, " * ");
    2183        22327 :               if (tmp)
    2184        22314 :                 dump_generic_node (pp, tmp, spc, flags, false);
    2185              :               else
    2186           13 :                 pp_string (pp, "1");
    2187              :             }
    2188              :         }
    2189       566326 :       if ((flags & TDF_ALIAS)
    2190       566326 :           && MR_DEPENDENCE_CLIQUE (node) != 0)
    2191              :         {
    2192         1347 :           pp_string (pp, " clique ");
    2193         1347 :           pp_unsigned_wide_integer (pp, MR_DEPENDENCE_CLIQUE (node));
    2194         1347 :           pp_string (pp, " base ");
    2195         1347 :           pp_unsigned_wide_integer (pp, MR_DEPENDENCE_BASE (node));
    2196              :         }
    2197       566326 :       pp_right_bracket (pp);
    2198              :     }
    2199      1316303 : }
    2200              : 
    2201              : /* Helper function for dump_generic_node.  Dump INIT or COND expression for
    2202              :    OpenMP loop non-rectangular iterators.  */
    2203              : 
    2204              : void
    2205           88 : dump_omp_loop_non_rect_expr (pretty_printer *pp, tree node, int spc,
    2206              :                              dump_flags_t flags)
    2207              : {
    2208           88 :   gcc_assert (TREE_CODE (node) == TREE_VEC);
    2209           88 :   dump_generic_node (pp, TREE_VEC_ELT (node, 0), spc, flags, false);
    2210           88 :   pp_string (pp, " * ");
    2211           88 :   if (op_prio (TREE_VEC_ELT (node, 1)) <= op_code_prio (MULT_EXPR))
    2212              :     {
    2213            0 :       pp_left_paren (pp);
    2214            0 :       dump_generic_node (pp, TREE_VEC_ELT (node, 1), spc, flags, false);
    2215            0 :       pp_right_paren (pp);
    2216              :     }
    2217              :   else
    2218           88 :     dump_generic_node (pp, TREE_VEC_ELT (node, 1), spc, flags, false);
    2219           88 :   pp_string (pp, " + ");
    2220           88 :   if (op_prio (TREE_VEC_ELT (node, 1)) <= op_code_prio (PLUS_EXPR))
    2221              :     {
    2222            0 :       pp_left_paren (pp);
    2223            0 :       dump_generic_node (pp, TREE_VEC_ELT (node, 2), spc, flags, false);
    2224            0 :       pp_right_paren (pp);
    2225              :     }
    2226              :   else
    2227           88 :     dump_generic_node (pp, TREE_VEC_ELT (node, 2), spc, flags, false);
    2228           88 : }
    2229              : 
    2230              : /* Dump the node NODE on the pretty_printer PP, SPC spaces of
    2231              :    indent.  FLAGS specifies details to show in the dump (see TDF_* in
    2232              :    dumpfile.h).  If IS_STMT is true, the object printed is considered
    2233              :    to be a statement and it is terminated by ';' if appropriate.  */
    2234              : 
    2235              : int
    2236     46596225 : dump_generic_node (pretty_printer *pp, tree node, int spc, dump_flags_t flags,
    2237              :                    bool is_stmt)
    2238              : {
    2239     46596225 :   tree type;
    2240     46596225 :   tree op0, op1;
    2241     46596225 :   const char *str;
    2242     46596225 :   bool is_expr;
    2243     46596225 :   enum tree_code code;
    2244              : 
    2245     46596225 :   if (node == NULL_TREE)
    2246              :     return spc;
    2247              : 
    2248     46575246 :   is_expr = EXPR_P (node);
    2249              : 
    2250     46575246 :   if (is_stmt && (flags & TDF_STMTADDR))
    2251              :     {
    2252            4 :       pp_string (pp, "<&");
    2253            4 :       pp_scalar (pp, "%p", (void *)node);
    2254            4 :       pp_string (pp, "> ");
    2255              :     }
    2256              : 
    2257     46575246 :   if ((flags & TDF_LINENO) && EXPR_HAS_LOCATION (node))
    2258          931 :     dump_location (pp, EXPR_LOCATION (node), flags);
    2259              : 
    2260     46575246 :   code = TREE_CODE (node);
    2261     46575246 :   switch (code)
    2262              :     {
    2263           12 :     case ERROR_MARK:
    2264           12 :       pp_string (pp, "<<< error >>>");
    2265           12 :       break;
    2266              : 
    2267      9077690 :     case IDENTIFIER_NODE:
    2268      9077690 :       pp_tree_identifier (pp, node);
    2269      9077690 :       break;
    2270              : 
    2271              :     case TREE_LIST:
    2272        58349 :       while (node && node != error_mark_node)
    2273              :         {
    2274        58349 :           if (TREE_PURPOSE (node))
    2275              :             {
    2276        21992 :               dump_generic_node (pp, TREE_PURPOSE (node), spc, flags, false);
    2277        21992 :               pp_space (pp);
    2278              :             }
    2279        58349 :           dump_generic_node (pp, TREE_VALUE (node), spc, flags, false);
    2280        58349 :           node = TREE_CHAIN (node);
    2281        58349 :           if (node && TREE_CODE (node) == TREE_LIST)
    2282              :             {
    2283         2450 :               pp_comma (pp);
    2284         2450 :               pp_space (pp);
    2285              :             }
    2286              :         }
    2287              :       break;
    2288              : 
    2289            0 :     case TREE_BINFO:
    2290            0 :       dump_generic_node (pp, BINFO_TYPE (node), spc, flags, false);
    2291            0 :       break;
    2292              : 
    2293          153 :     case TREE_VEC:
    2294          153 :       {
    2295          153 :         size_t i;
    2296          153 :         pp_left_brace (pp);
    2297          153 :         if (TREE_VEC_LENGTH (node) > 0)
    2298              :           {
    2299          153 :             size_t len = TREE_VEC_LENGTH (node);
    2300          459 :             for (i = 0; i < len - 1; i++)
    2301              :               {
    2302          306 :                 dump_generic_node (pp, TREE_VEC_ELT (node, i), spc, flags,
    2303              :                                    false);
    2304          306 :                 pp_comma (pp);
    2305          306 :                 pp_space (pp);
    2306              :               }
    2307          153 :             dump_generic_node (pp, TREE_VEC_ELT (node, len - 1), spc,
    2308              :                                flags, false);
    2309              :           }
    2310          153 :         pp_right_brace (pp);
    2311              :       }
    2312          153 :       break;
    2313              : 
    2314      4535741 :     case VOID_TYPE:
    2315      4535741 :     case INTEGER_TYPE:
    2316      4535741 :     case REAL_TYPE:
    2317      4535741 :     case FIXED_POINT_TYPE:
    2318      4535741 :     case COMPLEX_TYPE:
    2319      4535741 :     case VECTOR_TYPE:
    2320      4535741 :     case ENUMERAL_TYPE:
    2321      4535741 :     case BOOLEAN_TYPE:
    2322      4535741 :     case BITINT_TYPE:
    2323      4535741 :     case OPAQUE_TYPE:
    2324      4535741 :       {
    2325      4535741 :         unsigned int quals = TYPE_QUALS (node);
    2326      4535741 :         enum tree_code_class tclass;
    2327              : 
    2328      4535741 :         if (quals & TYPE_QUAL_ATOMIC)
    2329          534 :           pp_string (pp, "atomic ");
    2330      4535741 :         if (quals & TYPE_QUAL_CONST)
    2331        38419 :           pp_string (pp, "const ");
    2332      4535741 :         if (quals & TYPE_QUAL_VOLATILE)
    2333         3759 :           pp_string (pp, "volatile ");
    2334      4535741 :         if (quals & TYPE_QUAL_RESTRICT)
    2335            0 :           pp_string (pp, "restrict ");
    2336              : 
    2337      4535741 :         if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
    2338              :           {
    2339          157 :             pp_string (pp, "<address-space-");
    2340          157 :             pp_decimal_int (pp, TYPE_ADDR_SPACE (node));
    2341          157 :             pp_string (pp, "> ");
    2342              :           }
    2343              : 
    2344      4535741 :         tclass = TREE_CODE_CLASS (TREE_CODE (node));
    2345              : 
    2346      4535741 :         if (tclass == tcc_declaration)
    2347              :           {
    2348            0 :             if (DECL_NAME (node))
    2349            0 :               dump_decl_name (pp, node, flags);
    2350              :             else
    2351            0 :               pp_string (pp, "<unnamed type decl>");
    2352              :           }
    2353      4535741 :         else if (tclass == tcc_type)
    2354              :           {
    2355      4535741 :             if ((flags & TDF_GIMPLE) && node == sizetype)
    2356            0 :               pp_string (pp, "__SIZETYPE__");
    2357      4535741 :             else if (TYPE_NAME (node))
    2358              :               {
    2359      3014158 :                 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
    2360       851460 :                   pp_tree_identifier (pp, TYPE_NAME (node));
    2361      2162698 :                 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
    2362      2162698 :                          && DECL_NAME (TYPE_NAME (node)))
    2363      2162698 :                   dump_decl_name (pp, TYPE_NAME (node), flags);
    2364              :                 else
    2365            0 :                   pp_string (pp, "<unnamed type>");
    2366              :               }
    2367      1521583 :             else if (TREE_CODE (node) == VECTOR_TYPE)
    2368              :               {
    2369      1019146 :                 if (flags & TDF_GIMPLE)
    2370              :                   {
    2371            0 :                     dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2372            0 :                     pp_string (pp, " [[gnu::vector_size(");
    2373            0 :                     pp_wide_integer
    2374            0 :                       (pp, tree_to_poly_uint64 (TYPE_SIZE_UNIT (node)));
    2375            0 :                     pp_string (pp, ")]]");
    2376              :                   }
    2377              :                 else
    2378              :                   {
    2379      1019146 :                     pp_string (pp, "vector");
    2380      1019146 :                     pp_left_paren (pp);
    2381      1019146 :                     pp_wide_integer (pp, TYPE_VECTOR_SUBPARTS (node));
    2382      1019146 :                     pp_string (pp, ") ");
    2383      1019146 :                     dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2384              :                   }
    2385              :               }
    2386              :             else if (TREE_CODE (node) == INTEGER_TYPE)
    2387              :               {
    2388       431401 :                 if (TYPE_PRECISION (node) == CHAR_TYPE_SIZE)
    2389        55470 :                   pp_string (pp, (TYPE_UNSIGNED (node)
    2390              :                                       ? "unsigned char"
    2391              :                                       : "signed char"));
    2392       381998 :                 else if (TYPE_PRECISION (node) == SHORT_TYPE_SIZE)
    2393       180117 :                   pp_string (pp, (TYPE_UNSIGNED (node)
    2394              :                                       ? "unsigned short"
    2395              :                                       : "signed short"));
    2396       235160 :                 else if (TYPE_PRECISION (node) == INT_TYPE_SIZE)
    2397       192465 :                   pp_string (pp, (TYPE_UNSIGNED (node)
    2398              :                                       ? "unsigned int"
    2399              :                                       : "signed int"));
    2400        46355 :                 else if (TYPE_PRECISION (node) == LONG_TYPE_SIZE)
    2401        44037 :                   pp_string (pp, (TYPE_UNSIGNED (node)
    2402              :                                       ? "unsigned long"
    2403              :                                       : "signed long"));
    2404         4221 :                 else if (TYPE_PRECISION (node) == LONG_LONG_TYPE_SIZE)
    2405            0 :                   pp_string (pp, (TYPE_UNSIGNED (node)
    2406              :                                       ? "unsigned long long"
    2407              :                                       : "signed long long"));
    2408         4221 :                 else if (TYPE_PRECISION (node) >= CHAR_TYPE_SIZE
    2409         4221 :                          && pow2p_hwi (TYPE_PRECISION (node)))
    2410              :                   {
    2411         6139 :                     pp_string (pp, (TYPE_UNSIGNED (node) ? "uint" : "int"));
    2412         3676 :                     pp_decimal_int (pp, TYPE_PRECISION (node));
    2413         3676 :                     pp_string (pp, "_t");
    2414              :                   }
    2415              :                 else
    2416              :                   {
    2417          714 :                     pp_string (pp, (TYPE_UNSIGNED (node)
    2418              :                                         ? "<unnamed-unsigned:"
    2419              :                                         : "<unnamed-signed:"));
    2420          545 :                     pp_decimal_int (pp, TYPE_PRECISION (node));
    2421          545 :                     pp_greater (pp);
    2422              :                   }
    2423              :               }
    2424              :             else if (TREE_CODE (node) == COMPLEX_TYPE)
    2425              :               {
    2426         6975 :                 pp_string (pp, "__complex__ ");
    2427         6975 :                 dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2428              :               }
    2429              :             else if (TREE_CODE (node) == REAL_TYPE)
    2430              :               {
    2431            0 :                 pp_string (pp, "<float:");
    2432            0 :                 pp_decimal_int (pp, TYPE_PRECISION (node));
    2433            0 :                 pp_greater (pp);
    2434              :               }
    2435              :             else if (TREE_CODE (node) == FIXED_POINT_TYPE)
    2436              :               {
    2437            0 :                 pp_string (pp, "<fixed-point-");
    2438            0 :                 pp_string (pp, TYPE_SATURATING (node) ? "sat:" : "nonsat:");
    2439            0 :                 pp_decimal_int (pp, TYPE_PRECISION (node));
    2440            0 :                 pp_greater (pp);
    2441              :               }
    2442              :             else if (TREE_CODE (node) == BOOLEAN_TYPE)
    2443              :               {
    2444       127488 :                 pp_string (pp, (TYPE_UNSIGNED (node)
    2445              :                                 ? "<unsigned-boolean:"
    2446              :                                 : "<signed-boolean:"));
    2447        63744 :                 pp_decimal_int (pp, TYPE_PRECISION (node));
    2448        63744 :                 pp_greater (pp);
    2449              :               }
    2450              :             else if (TREE_CODE (node) == BITINT_TYPE)
    2451              :               {
    2452          246 :                 if (TYPE_UNSIGNED (node))
    2453           49 :                   pp_string (pp, "unsigned ");
    2454          246 :                 pp_string (pp, "_BitInt(");
    2455          246 :                 pp_decimal_int (pp, TYPE_PRECISION (node));
    2456          246 :                 pp_right_paren (pp);
    2457              :               }
    2458              :             else if (TREE_CODE (node) == VOID_TYPE)
    2459           13 :               pp_string (pp, "void");
    2460              :             else
    2461           58 :               pp_string (pp, "<unnamed type>");
    2462              :           }
    2463              :         break;
    2464              :       }
    2465              : 
    2466       865659 :     case POINTER_TYPE:
    2467       865659 :     case REFERENCE_TYPE:
    2468       865659 :       str = (TREE_CODE (node) == POINTER_TYPE ? "*" : "&");
    2469              : 
    2470       865659 :       if (TREE_TYPE (node) == NULL)
    2471              :         {
    2472            0 :           pp_string (pp, str);
    2473            0 :           pp_string (pp, "<null type>");
    2474              :         }
    2475       865659 :       else if (TREE_CODE (TREE_TYPE (node)) == FUNCTION_TYPE)
    2476              :         {
    2477         7423 :           tree fnode = TREE_TYPE (node);
    2478              : 
    2479         7423 :           dump_generic_node (pp, TREE_TYPE (fnode), spc, flags, false);
    2480         7423 :           pp_space (pp);
    2481         7423 :           pp_left_paren (pp);
    2482         7423 :           pp_string (pp, str);
    2483         7423 :           if (TYPE_IDENTIFIER (node))
    2484         2448 :             dump_generic_node (pp, TYPE_NAME (node), spc, flags, false);
    2485         4975 :           else if (flags & TDF_NOUID)
    2486          128 :             pp_string (pp, "<Txxxx>");
    2487              :           else
    2488              :             {
    2489         4847 :               pp_string (pp, "<T");
    2490         4847 :               pp_scalar (pp, "%x", TYPE_UID (node));
    2491         4847 :               pp_character (pp, '>');
    2492              :             }
    2493              : 
    2494         7423 :           pp_right_paren (pp);
    2495         7423 :           dump_function_declaration (pp, fnode, spc, flags);
    2496              :         }
    2497              :       else
    2498              :         {
    2499       858236 :           unsigned int quals = TYPE_QUALS (node);
    2500              : 
    2501       858236 :           dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2502       858236 :           pp_space (pp);
    2503       858236 :           pp_string (pp, str);
    2504              : 
    2505       858236 :           if (quals & TYPE_QUAL_CONST)
    2506         3609 :             pp_string (pp, " const");
    2507       858236 :           if (quals & TYPE_QUAL_VOLATILE)
    2508          209 :             pp_string (pp, " volatile");
    2509       858236 :           if (quals & TYPE_QUAL_RESTRICT)
    2510        45965 :             pp_string (pp, " restrict");
    2511              : 
    2512       858236 :           if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
    2513              :             {
    2514            0 :               pp_string (pp, " <address-space-");
    2515            0 :               pp_decimal_int (pp, TYPE_ADDR_SPACE (node));
    2516            0 :               pp_greater (pp);
    2517              :             }
    2518              : 
    2519       858236 :           if (TYPE_REF_CAN_ALIAS_ALL (node))
    2520         5039 :             pp_string (pp, " {ref-all}");
    2521              :         }
    2522              :       break;
    2523              : 
    2524            0 :     case OFFSET_TYPE:
    2525            0 :       NIY;
    2526            0 :       break;
    2527              : 
    2528      1316303 :     case MEM_REF:
    2529      1316303 :     case TARGET_MEM_REF:
    2530      1316303 :       dump_mem_ref (pp, node, spc, flags);
    2531      1316303 :       break;
    2532              : 
    2533        73186 :     case ARRAY_TYPE:
    2534        73186 :       {
    2535        73186 :         unsigned int quals = TYPE_QUALS (node);
    2536        73186 :         tree tmp;
    2537              : 
    2538        73186 :         if (quals & TYPE_QUAL_ATOMIC)
    2539            0 :           pp_string (pp, "atomic ");
    2540        73186 :         if (quals & TYPE_QUAL_CONST)
    2541            1 :           pp_string (pp, "const ");
    2542        73186 :         if (quals & TYPE_QUAL_VOLATILE)
    2543            0 :           pp_string (pp, "volatile ");
    2544              : 
    2545              :         /* Print the innermost component type.  */
    2546        78070 :         for (tmp = TREE_TYPE (node); TREE_CODE (tmp) == ARRAY_TYPE;
    2547         4884 :              tmp = TREE_TYPE (tmp))
    2548              :           ;
    2549              : 
    2550              :         /* Avoid to print recursively the array.  */
    2551              :         /* FIXME : Not implemented correctly, see print_struct_decl.  */
    2552        73186 :         if (TREE_CODE (tmp) != POINTER_TYPE || TREE_TYPE (tmp) != node)
    2553        73186 :           dump_generic_node (pp, tmp, spc, flags, false);
    2554              : 
    2555              :         /* Print the dimensions.  */
    2556       151256 :         for (tmp = node; TREE_CODE (tmp) == ARRAY_TYPE; tmp = TREE_TYPE (tmp))
    2557        78070 :           dump_array_domain (pp, TYPE_DOMAIN (tmp), spc, flags);
    2558              :         break;
    2559              :       }
    2560              : 
    2561       125834 :     case RECORD_TYPE:
    2562       125834 :     case UNION_TYPE:
    2563       125834 :     case QUAL_UNION_TYPE:
    2564       125834 :       {
    2565       125834 :         unsigned int quals = TYPE_QUALS (node);
    2566              : 
    2567       125834 :         if (quals & TYPE_QUAL_ATOMIC)
    2568            0 :           pp_string (pp, "atomic ");
    2569       125834 :         if (quals & TYPE_QUAL_CONST)
    2570        11742 :           pp_string (pp, "const ");
    2571       125834 :         if (quals & TYPE_QUAL_VOLATILE)
    2572           63 :           pp_string (pp, "volatile ");
    2573              : 
    2574       125834 :         if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
    2575              :           {
    2576            1 :             pp_string (pp, "<address-space-");
    2577            1 :             pp_decimal_int (pp, TYPE_ADDR_SPACE (node));
    2578            1 :             pp_string (pp, "> ");
    2579              :           }
    2580              : 
    2581              :         /* Print the name of the structure.  */
    2582       125834 :         if (TREE_CODE (node) == RECORD_TYPE)
    2583       123990 :           pp_string (pp, "struct ");
    2584         1844 :         else if (TREE_CODE (node) == UNION_TYPE)
    2585         1844 :           pp_string (pp, "union ");
    2586              : 
    2587       125834 :         if (TYPE_NAME (node))
    2588       122712 :           dump_generic_node (pp, TYPE_NAME (node), spc, flags, false);
    2589         3122 :         else if (!(flags & TDF_SLIM))
    2590              :           /* FIXME: If we eliminate the 'else' above and attempt
    2591              :              to show the fields for named types, we may get stuck
    2592              :              following a cycle of pointers to structs.  The alleged
    2593              :              self-reference check in print_struct_decl will not detect
    2594              :              cycles involving more than one pointer or struct type.  */
    2595          576 :           print_struct_decl (pp, node, spc, flags);
    2596              :         break;
    2597              :       }
    2598              : 
    2599            0 :     case LANG_TYPE:
    2600            0 :       NIY;
    2601            0 :       break;
    2602              : 
    2603      5564266 :     case INTEGER_CST:
    2604      5564266 :       if (flags & TDF_GIMPLE
    2605      5564266 :           && (POINTER_TYPE_P (TREE_TYPE (node))
    2606           47 :               || (TYPE_PRECISION (TREE_TYPE (node))
    2607           47 :                   < TYPE_PRECISION (integer_type_node))
    2608           47 :               || exact_log2 (TYPE_PRECISION (TREE_TYPE (node))) == -1
    2609           47 :               || tree_int_cst_sgn (node) < 0))
    2610              :         {
    2611            0 :           pp_string (pp, "_Literal (");
    2612            0 :           dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2613            0 :           pp_string (pp, ") ");
    2614              :         }
    2615      5564266 :       if (TREE_CODE (TREE_TYPE (node)) == POINTER_TYPE
    2616      5564266 :           && ! (flags & TDF_GIMPLE))
    2617              :         {
    2618              :           /* In the case of a pointer, one may want to divide by the
    2619              :              size of the pointed-to type.  Unfortunately, this not
    2620              :              straightforward.  The C front-end maps expressions
    2621              : 
    2622              :              (int *) 5
    2623              :              int *p; (p + 5)
    2624              : 
    2625              :              in such a way that the two INTEGER_CST nodes for "5" have
    2626              :              different values but identical types.  In the latter
    2627              :              case, the 5 is multiplied by sizeof (int) in c-common.cc
    2628              :              (pointer_int_sum) to convert it to a byte address, and
    2629              :              yet the type of the node is left unchanged.  Argh.  What
    2630              :              is consistent though is that the number value corresponds
    2631              :              to bytes (UNITS) offset.
    2632              : 
    2633              :              NB: Neither of the following divisors can be trivially
    2634              :              used to recover the original literal:
    2635              : 
    2636              :              TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (node)))
    2637              :              TYPE_PRECISION (TREE_TYPE (TREE_TYPE (node)))  */
    2638       449326 :           pp_wide_integer (pp, TREE_INT_CST_LOW (node));
    2639       449326 :           pp_string (pp, "B"); /* pseudo-unit */
    2640              :         }
    2641      5114940 :       else if (tree_fits_shwi_p (node))
    2642      5097445 :         pp_wide_integer (pp, tree_to_shwi (node));
    2643        17495 :       else if (tree_fits_uhwi_p (node))
    2644        16940 :         pp_unsigned_wide_integer (pp, tree_to_uhwi (node));
    2645              :       else
    2646              :         {
    2647          555 :           wide_int val = wi::to_wide (node);
    2648              : 
    2649          555 :           if (wi::neg_p (val, TYPE_SIGN (TREE_TYPE (node))))
    2650              :             {
    2651           11 :               pp_minus (pp);
    2652           11 :               val = -val;
    2653              :             }
    2654          555 :           unsigned int len;
    2655          555 :           print_hex_buf_size (val, &len);
    2656          555 :           if (UNLIKELY (len > sizeof (pp_buffer (pp)->m_digit_buffer)))
    2657              :             {
    2658            0 :               char *buf = XALLOCAVEC (char, len);
    2659            0 :               print_hex (val, buf);
    2660            0 :               pp_string (pp, buf);
    2661              :             }
    2662              :           else
    2663              :             {
    2664          555 :               print_hex (val, pp_buffer (pp)->m_digit_buffer);
    2665          555 :               pp_string (pp, pp_buffer (pp)->m_digit_buffer);
    2666              :             }
    2667          555 :         }
    2668      5564266 :       if ((flags & TDF_GIMPLE)
    2669      5564266 :           && ! (POINTER_TYPE_P (TREE_TYPE (node))
    2670           47 :                 || (TYPE_PRECISION (TREE_TYPE (node))
    2671           47 :                     < TYPE_PRECISION (integer_type_node))
    2672           47 :                 || exact_log2 (TYPE_PRECISION (TREE_TYPE (node))) == -1))
    2673              :         {
    2674           47 :           if (TYPE_UNSIGNED (TREE_TYPE (node)))
    2675            0 :             pp_character (pp, 'u');
    2676           47 :           if (TYPE_PRECISION (TREE_TYPE (node))
    2677           47 :               == TYPE_PRECISION (unsigned_type_node))
    2678              :             ;
    2679            0 :           else if (TYPE_PRECISION (TREE_TYPE (node))
    2680            0 :                    == TYPE_PRECISION (long_unsigned_type_node))
    2681            0 :             pp_character (pp, 'l');
    2682            0 :           else if (TYPE_PRECISION (TREE_TYPE (node))
    2683            0 :                    == TYPE_PRECISION (long_long_unsigned_type_node))
    2684            0 :             pp_string (pp, "ll");
    2685              :         }
    2686      5564266 :       if (TREE_OVERFLOW (node))
    2687           77 :         pp_string (pp, "(OVF)");
    2688              :       break;
    2689              : 
    2690            0 :     case POLY_INT_CST:
    2691            0 :       pp_string (pp, "POLY_INT_CST [");
    2692            0 :       dump_generic_node (pp, POLY_INT_CST_COEFF (node, 0), spc, flags, false);
    2693            0 :       for (unsigned int i = 1; i < NUM_POLY_INT_COEFFS; ++i)
    2694              :         {
    2695              :           pp_string (pp, ", ");
    2696              :           dump_generic_node (pp, POLY_INT_CST_COEFF (node, i),
    2697              :                              spc, flags, false);
    2698              :         }
    2699            0 :       pp_string (pp, "]");
    2700            0 :       break;
    2701              : 
    2702       147349 :     case REAL_CST:
    2703              :       /* Code copied from print_node.  */
    2704       147349 :       {
    2705       147349 :         REAL_VALUE_TYPE d;
    2706       147349 :         if (TREE_OVERFLOW (node))
    2707            0 :           pp_string (pp, " overflow");
    2708              : 
    2709       147349 :         d = TREE_REAL_CST (node);
    2710       147349 :         if (REAL_VALUE_ISINF (d))
    2711         6509 :           pp_string (pp, REAL_VALUE_NEGATIVE (d) ? " -Inf" : " Inf");
    2712       141316 :         else if (REAL_VALUE_ISNAN (d))
    2713         2180 :           pp_string (pp, " Nan");
    2714              :         else
    2715              :           {
    2716       139136 :             char string[100];
    2717       139136 :             real_to_decimal (string, &d, sizeof (string), 0, 1);
    2718       139136 :             pp_string (pp, string);
    2719              :           }
    2720       147349 :         break;
    2721              :       }
    2722              : 
    2723            0 :     case FIXED_CST:
    2724            0 :       {
    2725            0 :         char string[100];
    2726            0 :         fixed_to_decimal (string, TREE_FIXED_CST_PTR (node), sizeof (string));
    2727            0 :         pp_string (pp, string);
    2728            0 :         break;
    2729              :       }
    2730              : 
    2731         1588 :     case COMPLEX_CST:
    2732         1588 :       pp_string (pp, "__complex__ (");
    2733         1588 :       dump_generic_node (pp, TREE_REALPART (node), spc, flags, false);
    2734         1588 :       pp_string (pp, ", ");
    2735         1588 :       dump_generic_node (pp, TREE_IMAGPART (node), spc, flags, false);
    2736         1588 :       pp_right_paren (pp);
    2737         1588 :       break;
    2738              : 
    2739        61608 :     case STRING_CST:
    2740        61608 :       {
    2741        61608 :         pp_string (pp, "\"");
    2742        61608 :         if (unsigned nbytes = TREE_STRING_LENGTH (node))
    2743        61369 :           pretty_print_string (pp, TREE_STRING_POINTER (node), nbytes);
    2744        61608 :         pp_string (pp, "\"");
    2745        61608 :         break;
    2746              :       }
    2747              : 
    2748       145234 :     case VECTOR_CST:
    2749       145234 :       {
    2750       145234 :         unsigned i;
    2751       145234 :         if (flags & TDF_GIMPLE)
    2752              :           {
    2753            0 :             pp_string (pp, "_Literal (");
    2754            0 :             dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2755            0 :             pp_string (pp, ") ");
    2756              :           }
    2757       145234 :         pp_string (pp, "{ ");
    2758       145234 :         unsigned HOST_WIDE_INT nunits;
    2759       145234 :         if (!VECTOR_CST_NELTS (node).is_constant (&nunits))
    2760              :           nunits = vector_cst_encoded_nelts (node);
    2761      1058731 :         for (i = 0; i < nunits; ++i)
    2762              :           {
    2763       913497 :             if (i != 0)
    2764       768263 :               pp_string (pp, ", ");
    2765       913497 :             dump_generic_node (pp, VECTOR_CST_ELT (node, i),
    2766              :                                spc, flags, false);
    2767              :           }
    2768       145234 :         if (!VECTOR_CST_NELTS (node).is_constant ())
    2769              :           pp_string (pp, ", ...");
    2770       145234 :         pp_string (pp, " }");
    2771              :       }
    2772       145234 :       break;
    2773              : 
    2774              :     case RAW_DATA_CST:
    2775            0 :       for (unsigned i = 0; i < (unsigned) RAW_DATA_LENGTH (node); ++i)
    2776              :         {
    2777            0 :           if (TYPE_UNSIGNED (TREE_TYPE (node))
    2778            0 :               || TYPE_PRECISION (TREE_TYPE (node)) > CHAR_BIT)
    2779            0 :             pp_decimal_int (pp, RAW_DATA_UCHAR_ELT (node, i));
    2780              :           else
    2781            0 :             pp_decimal_int (pp, RAW_DATA_SCHAR_ELT (node, i));
    2782            0 :           if (i == RAW_DATA_LENGTH (node) - 1U)
    2783              :             break;
    2784            0 :           else if (i == 9 && RAW_DATA_LENGTH (node) > 20)
    2785              :             {
    2786            0 :               pp_string (pp, ", ..., ");
    2787            0 :               i = RAW_DATA_LENGTH (node) - 11;
    2788              :             }
    2789              :           else
    2790            0 :             pp_string (pp, ", ");
    2791              :         }
    2792              :       break;
    2793              : 
    2794           70 :     case FUNCTION_TYPE:
    2795           70 :     case METHOD_TYPE:
    2796           70 :       dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2797           70 :       pp_space (pp);
    2798           70 :       if (TREE_CODE (node) == METHOD_TYPE)
    2799              :         {
    2800           70 :           if (TYPE_METHOD_BASETYPE (node))
    2801           70 :             dump_generic_node (pp, TYPE_NAME (TYPE_METHOD_BASETYPE (node)),
    2802              :                                spc, flags, false);
    2803              :           else
    2804            0 :             pp_string (pp, "<null method basetype>");
    2805           70 :           pp_colon_colon (pp);
    2806              :         }
    2807           70 :       if (TYPE_IDENTIFIER (node))
    2808            0 :         dump_generic_node (pp, TYPE_NAME (node), spc, flags, false);
    2809           70 :       else if (TYPE_NAME (node) && DECL_NAME (TYPE_NAME (node)))
    2810            0 :         dump_decl_name (pp, TYPE_NAME (node), flags);
    2811           70 :       else if (flags & TDF_NOUID)
    2812            0 :         pp_string (pp, "<Txxxx>");
    2813              :       else
    2814              :         {
    2815           70 :           pp_string (pp, "<T");
    2816           70 :           pp_scalar (pp, "%x", TYPE_UID (node));
    2817           70 :           pp_character (pp, '>');
    2818              :         }
    2819           70 :       dump_function_declaration (pp, node, spc, flags);
    2820           70 :       break;
    2821              : 
    2822        23367 :     case FUNCTION_DECL:
    2823        23367 :     case CONST_DECL:
    2824        23367 :       dump_decl_name (pp, node, flags);
    2825        23367 :       break;
    2826              : 
    2827       123844 :     case LABEL_DECL:
    2828       123844 :       if (DECL_NAME (node))
    2829        54474 :         dump_decl_name (pp, node, flags);
    2830        69370 :       else if (LABEL_DECL_UID (node) != -1)
    2831              :         {
    2832        24517 :           if (flags & TDF_GIMPLE)
    2833              :             {
    2834           35 :               pp_character (pp, 'L');
    2835           35 :               pp_decimal_int (pp, (int) LABEL_DECL_UID (node));
    2836              :             }
    2837              :           else
    2838              :             {
    2839        24482 :               pp_string (pp, "<L");
    2840        24482 :               pp_decimal_int (pp, (int) LABEL_DECL_UID (node));
    2841        24482 :               pp_character (pp, '>');
    2842              :             }
    2843              :         }
    2844              :       else
    2845              :         {
    2846        44853 :           if (flags & TDF_NOUID)
    2847            6 :             pp_string (pp, "<D.xxxx>");
    2848              :           else
    2849              :             {
    2850        44847 :               if (flags & TDF_GIMPLE)
    2851              :                 {
    2852            6 :                   pp_character (pp, 'D');
    2853            6 :                   pp_scalar (pp, "%u", DECL_UID (node));
    2854              :                 }
    2855              :               else
    2856              :                 {
    2857        44841 :                   pp_string (pp, "<D.");
    2858        44841 :                   pp_scalar (pp, "%u", DECL_UID (node));
    2859        44841 :                   pp_character (pp, '>');
    2860              :                 }
    2861              :             }
    2862              :         }
    2863              :       break;
    2864              : 
    2865        72364 :     case TYPE_DECL:
    2866        72364 :       if (DECL_IS_UNDECLARED_BUILTIN (node))
    2867              :         {
    2868              :           /* Don't print the declaration of built-in types.  */
    2869              :           break;
    2870              :         }
    2871        67181 :       if (DECL_NAME (node))
    2872        67126 :         dump_decl_name (pp, node, flags);
    2873           55 :       else if (TYPE_NAME (TREE_TYPE (node)) != node)
    2874              :         {
    2875           95 :           pp_string (pp, (TREE_CODE (TREE_TYPE (node)) == UNION_TYPE
    2876              :                           ? "union" : "struct "));
    2877           49 :           dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2878              :         }
    2879              :       else
    2880            6 :         pp_string (pp, "<anon>");
    2881              :       break;
    2882              : 
    2883      3665952 :     case VAR_DECL:
    2884      3665952 :     case PARM_DECL:
    2885      3665952 :     case FIELD_DECL:
    2886      3665952 :     case DEBUG_EXPR_DECL:
    2887      3665952 :     case NAMESPACE_DECL:
    2888      3665952 :     case NAMELIST_DECL:
    2889      3665952 :       dump_decl_name (pp, node, flags);
    2890      3665952 :       break;
    2891              : 
    2892        22965 :     case RESULT_DECL:
    2893        22965 :       pp_string (pp, "<retval>");
    2894        22965 :       break;
    2895              : 
    2896       634521 :     case COMPONENT_REF:
    2897       634521 :       op0 = TREE_OPERAND (node, 0);
    2898       634521 :       str = ".";
    2899       634521 :       if (op0
    2900       634521 :           && (TREE_CODE (op0) == INDIRECT_REF
    2901       593787 :               || (TREE_CODE (op0) == MEM_REF
    2902       196078 :                   && TREE_CODE (TREE_OPERAND (op0, 0)) != ADDR_EXPR
    2903       163897 :                   && integer_zerop (TREE_OPERAND (op0, 1))
    2904              :                   /* Dump the types of INTEGER_CSTs explicitly, for we
    2905              :                      can't infer them and MEM_ATTR caching will share
    2906              :                      MEM_REFs with differently-typed op0s.  */
    2907       158559 :                   && TREE_CODE (TREE_OPERAND (op0, 0)) != INTEGER_CST
    2908              :                   /* Released SSA_NAMES have no TREE_TYPE.  */
    2909       158523 :                   && TREE_TYPE (TREE_OPERAND (op0, 0)) != NULL_TREE
    2910              :                   /* Same pointer types, but ignoring POINTER_TYPE vs.
    2911              :                      REFERENCE_TYPE.  */
    2912       158523 :                   && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0, 0)))
    2913       158523 :                       == TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0, 1))))
    2914       305690 :                   && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0, 0)))
    2915       152845 :                       == TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0, 1))))
    2916       152845 :                   && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0, 0)))
    2917       152845 :                       == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0, 1))))
    2918              :                   /* Same value types ignoring qualifiers.  */
    2919       152845 :                   && (TYPE_MAIN_VARIANT (TREE_TYPE (op0))
    2920       152845 :                       == TYPE_MAIN_VARIANT
    2921              :                           (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0, 1)))))
    2922       152845 :                   && MR_DEPENDENCE_CLIQUE (op0) == 0)))
    2923              :         {
    2924       180430 :           op0 = TREE_OPERAND (op0, 0);
    2925       180430 :           str = "->";
    2926              :         }
    2927       634521 :       if (op_prio (op0) < op_prio (node))
    2928         7111 :         pp_left_paren (pp);
    2929       634521 :       dump_generic_node (pp, op0, spc, flags, false);
    2930       634521 :       if (op_prio (op0) < op_prio (node))
    2931         7111 :         pp_right_paren (pp);
    2932       634521 :       pp_string (pp, str);
    2933       634521 :       op1 = TREE_OPERAND (node, 1);
    2934       634521 :       dump_generic_node (pp, op1, spc, flags, false);
    2935       634521 :       if (DECL_P (op1)) /* Not always a decl in the C++ FE.  */
    2936       634521 :         if (tree off = component_ref_field_offset (node))
    2937       634447 :           if (TREE_CODE (off) != INTEGER_CST)
    2938              :             {
    2939           20 :               pp_string (pp, "{off: ");
    2940           20 :               dump_generic_node (pp, off, spc, flags, false);
    2941           20 :               pp_right_brace (pp);
    2942              :             }
    2943              :       break;
    2944              : 
    2945        23551 :     case BIT_FIELD_REF:
    2946        23551 :       if (flags & TDF_GIMPLE)
    2947              :         {
    2948            0 :           pp_string (pp, "__BIT_FIELD_REF <");
    2949            0 :           dump_generic_node (pp, TREE_TYPE (node),
    2950              :                              spc, flags | TDF_SLIM, false);
    2951            0 :           if (TYPE_ALIGN (TREE_TYPE (node))
    2952            0 :               != TYPE_ALIGN (TYPE_MAIN_VARIANT (TREE_TYPE (node))))
    2953              :             {
    2954            0 :               pp_string (pp, ", ");
    2955            0 :               pp_decimal_int (pp, TYPE_ALIGN (TREE_TYPE (node)));
    2956              :             }
    2957            0 :           pp_greater (pp);
    2958            0 :           pp_string (pp, " (");
    2959            0 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc,
    2960              :                              flags | TDF_SLIM, false);
    2961            0 :           pp_string (pp, ", ");
    2962            0 :           dump_generic_node (pp, TREE_OPERAND (node, 1), spc,
    2963              :                              flags | TDF_SLIM, false);
    2964            0 :           pp_string (pp, ", ");
    2965            0 :           dump_generic_node (pp, TREE_OPERAND (node, 2), spc,
    2966              :                              flags | TDF_SLIM, false);
    2967            0 :           pp_right_paren (pp);
    2968              :         }
    2969              :       else
    2970              :         {
    2971        23551 :           pp_string (pp, "BIT_FIELD_REF <");
    2972        23551 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    2973        23551 :           pp_string (pp, ", ");
    2974        23551 :           dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    2975        23551 :           pp_string (pp, ", ");
    2976        23551 :           dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    2977        23551 :           pp_greater (pp);
    2978              :         }
    2979              :       break;
    2980              : 
    2981            0 :     case BIT_INSERT_EXPR:
    2982            0 :       pp_string (pp, "BIT_INSERT_EXPR <");
    2983            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    2984            0 :       pp_string (pp, ", ");
    2985            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    2986            0 :       pp_string (pp, ", ");
    2987            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    2988            0 :       pp_string (pp, " (");
    2989            0 :       if (INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (node, 1))))
    2990            0 :         pp_decimal_int (pp,
    2991              :                         TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (node, 1))));
    2992              :       else
    2993            0 :         dump_generic_node (pp, TYPE_SIZE (TREE_TYPE (TREE_OPERAND (node, 1))),
    2994              :                            spc, flags, false);
    2995            0 :       pp_string (pp, " bits)>");
    2996            0 :       break;
    2997              : 
    2998      2014157 :     case ARRAY_REF:
    2999      2014157 :     case ARRAY_RANGE_REF:
    3000      2014157 :       op0 = TREE_OPERAND (node, 0);
    3001      2014157 :       if (op_prio (op0) < op_prio (node))
    3002         9619 :         pp_left_paren (pp);
    3003      2014157 :       dump_generic_node (pp, op0, spc, flags, false);
    3004      2014157 :       if (op_prio (op0) < op_prio (node))
    3005         9619 :         pp_right_paren (pp);
    3006      2014157 :       pp_left_bracket (pp);
    3007      2014157 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3008      2014157 :       if (TREE_CODE (node) == ARRAY_RANGE_REF)
    3009          122 :         pp_string (pp, " ...");
    3010      2014157 :       pp_right_bracket (pp);
    3011              : 
    3012      2014157 :       op0 = array_ref_low_bound (node);
    3013      2014157 :       op1 = array_ref_element_size (node);
    3014              : 
    3015      2014157 :       if (!integer_zerop (op0)
    3016      1993168 :           || TREE_OPERAND (node, 2)
    3017      4007325 :           || TREE_OPERAND (node, 3))
    3018              :         {
    3019        21037 :           pp_string (pp, "{lb: ");
    3020        21037 :           dump_generic_node (pp, op0, spc, flags, false);
    3021        21037 :           pp_string (pp, " sz: ");
    3022        21037 :           dump_generic_node (pp, op1, spc, flags, false);
    3023        21037 :           pp_right_brace (pp);
    3024              :         }
    3025              :       break;
    3026              : 
    3027           13 :     case OMP_ARRAY_SECTION:
    3028           13 :       op0 = TREE_OPERAND (node, 0);
    3029           13 :       if (op_prio (op0) < op_prio (node))
    3030           13 :         pp_left_paren (pp);
    3031           13 :       dump_generic_node (pp, op0, spc, flags, false);
    3032           13 :       if (op_prio (op0) < op_prio (node))
    3033           13 :         pp_right_paren (pp);
    3034           13 :       pp_left_bracket (pp);
    3035           13 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3036           13 :       pp_colon (pp);
    3037           13 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3038           13 :       pp_right_bracket (pp);
    3039           13 :       break;
    3040              : 
    3041        56093 :     case CONSTRUCTOR:
    3042        56093 :       {
    3043        56093 :         unsigned HOST_WIDE_INT ix;
    3044        56093 :         tree field, val;
    3045        56093 :         bool is_struct_init = false;
    3046        56093 :         bool is_array_init = false;
    3047        56093 :         widest_int curidx;
    3048        56093 :         if (flags & TDF_GIMPLE)
    3049              :           {
    3050            0 :             if (TREE_CLOBBER_P (node))
    3051              :               {
    3052            0 :                 pp_string (pp, "__CLOBBER");
    3053            0 :                 switch (CLOBBER_KIND (node))
    3054              :                   {
    3055            0 :                   case CLOBBER_STORAGE_BEGIN:
    3056            0 :                     pp_string (pp, "(bos)");
    3057            0 :                     break;
    3058            0 :                   case CLOBBER_STORAGE_END:
    3059            0 :                     pp_string (pp, "(eos)");
    3060            0 :                     break;
    3061            0 :                   case CLOBBER_OBJECT_BEGIN:
    3062            0 :                     pp_string (pp, "(bob)");
    3063            0 :                     break;
    3064            0 :                   case CLOBBER_OBJECT_END:
    3065            0 :                     pp_string (pp, "(eob)");
    3066            0 :                     break;
    3067              :                   default:
    3068              :                     break;
    3069              :                   }
    3070            0 :                 break;
    3071              :               }
    3072            0 :             pp_string (pp, "_Literal (");
    3073            0 :             dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    3074            0 :             pp_string (pp, ") ");
    3075              :           }
    3076        56093 :         pp_left_brace (pp);
    3077        56093 :         if (TREE_CLOBBER_P (node))
    3078              :           {
    3079        20408 :             pp_string (pp, "CLOBBER");
    3080        20408 :             switch (CLOBBER_KIND (node))
    3081              :               {
    3082            0 :               case CLOBBER_STORAGE_BEGIN:
    3083            0 :                 pp_string (pp, "(bos)");
    3084            0 :                 break;
    3085        13435 :               case CLOBBER_STORAGE_END:
    3086        13435 :                 pp_string (pp, "(eos)");
    3087        13435 :                 break;
    3088          658 :               case CLOBBER_OBJECT_BEGIN:
    3089          658 :                 pp_string (pp, "(bob)");
    3090          658 :                 break;
    3091          763 :               case CLOBBER_OBJECT_END:
    3092          763 :                 pp_string (pp, "(eob)");
    3093          763 :                 break;
    3094              :               default:
    3095              :                 break;
    3096              :               }
    3097              :           }
    3098        35685 :         else if (TREE_CODE (TREE_TYPE (node)) == RECORD_TYPE
    3099        35685 :                  || TREE_CODE (TREE_TYPE (node)) == UNION_TYPE)
    3100              :           is_struct_init = true;
    3101        25299 :         else if (TREE_CODE (TREE_TYPE (node)) == ARRAY_TYPE
    3102         6683 :                  && TYPE_DOMAIN (TREE_TYPE (node))
    3103         6683 :                  && TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node)))
    3104        31982 :                  && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node))))
    3105              :                     == INTEGER_CST)
    3106              :           {
    3107         6683 :             tree minv = TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node)));
    3108         6683 :             is_array_init = true;
    3109         6683 :             curidx = wi::to_widest (minv);
    3110              :           }
    3111       226030 :         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (node), ix, field, val)
    3112              :           {
    3113       169937 :             if (field)
    3114              :               {
    3115        79392 :                 if (is_struct_init)
    3116              :                   {
    3117        35932 :                     pp_dot (pp);
    3118        35932 :                     dump_generic_node (pp, field, spc, flags, false);
    3119        35932 :                     pp_equal (pp);
    3120              :                   }
    3121        43460 :                 else if (is_array_init
    3122        43460 :                          && (TREE_CODE (field) != INTEGER_CST
    3123        43460 :                              || curidx != wi::to_widest (field)))
    3124              :                   {
    3125           94 :                     pp_left_bracket (pp);
    3126           94 :                     if (TREE_CODE (field) == RANGE_EXPR)
    3127              :                       {
    3128           94 :                         dump_generic_node (pp, TREE_OPERAND (field, 0), spc,
    3129              :                                            flags, false);
    3130           94 :                         pp_string (pp, " ... ");
    3131           94 :                         dump_generic_node (pp, TREE_OPERAND (field, 1), spc,
    3132              :                                            flags, false);
    3133           94 :                         if (TREE_CODE (TREE_OPERAND (field, 1)) == INTEGER_CST)
    3134           94 :                           curidx = wi::to_widest (TREE_OPERAND (field, 1));
    3135              :                       }
    3136              :                     else
    3137            0 :                       dump_generic_node (pp, field, spc, flags, false);
    3138           94 :                     if (TREE_CODE (field) == INTEGER_CST)
    3139            0 :                       curidx = wi::to_widest (field);
    3140           94 :                     pp_string (pp, "]=");
    3141              :                   }
    3142              :               }
    3143       169937 :             if (is_array_init)
    3144        53168 :               curidx += 1;
    3145       169937 :             if (val && TREE_CODE (val) == ADDR_EXPR)
    3146         2610 :               if (TREE_CODE (TREE_OPERAND (val, 0)) == FUNCTION_DECL)
    3147          140 :                 val = TREE_OPERAND (val, 0);
    3148       169937 :             if (val && TREE_CODE (val) == FUNCTION_DECL)
    3149          140 :                 dump_decl_name (pp, val, flags);
    3150              :             else
    3151       169797 :                 dump_generic_node (pp, val, spc, flags, false);
    3152       339874 :             if (ix != CONSTRUCTOR_NELTS (node) - 1)
    3153              :               {
    3154       136214 :                 pp_comma (pp);
    3155       136214 :                 pp_space (pp);
    3156              :               }
    3157              :           }
    3158        56093 :         pp_right_brace (pp);
    3159            0 :       }
    3160        56093 :       break;
    3161              : 
    3162          604 :     case COMPOUND_EXPR:
    3163          604 :       {
    3164          604 :         tree *tp;
    3165          604 :         if (flags & TDF_SLIM)
    3166              :           {
    3167            0 :             pp_string (pp, "<COMPOUND_EXPR>");
    3168            0 :             break;
    3169              :           }
    3170              : 
    3171          604 :         dump_generic_node (pp, TREE_OPERAND (node, 0),
    3172              :                            spc, flags, false);
    3173          604 :         pp_comma (pp);
    3174          604 :         pp_space (pp);
    3175              : 
    3176          604 :         for (tp = &TREE_OPERAND (node, 1);
    3177          627 :              TREE_CODE (*tp) == COMPOUND_EXPR;
    3178           23 :              tp = &TREE_OPERAND (*tp, 1))
    3179              :           {
    3180           23 :             dump_generic_node (pp, TREE_OPERAND (*tp, 0),
    3181              :                                spc, flags, false);
    3182           23 :             pp_comma (pp);
    3183           23 :             pp_space (pp);
    3184              :           }
    3185              : 
    3186          604 :         dump_generic_node (pp, *tp, spc, flags, false);
    3187              :       }
    3188          604 :       break;
    3189              : 
    3190        65860 :     case STATEMENT_LIST:
    3191        65860 :       {
    3192        65860 :         tree_stmt_iterator si;
    3193        65860 :         bool first = true;
    3194              : 
    3195        65860 :         if (flags & TDF_SLIM)
    3196              :           {
    3197            1 :             pp_string (pp, "<STATEMENT_LIST>");
    3198            1 :             break;
    3199              :           }
    3200              : 
    3201       433674 :         for (si = tsi_start (node); !tsi_end_p (si); tsi_next (&si))
    3202              :           {
    3203       367815 :             if (!first)
    3204       302690 :               newline_and_indent (pp, spc);
    3205              :             else
    3206              :               first = false;
    3207       367815 :             dump_generic_node (pp, tsi_stmt (si), spc, flags, true);
    3208              :           }
    3209              :       }
    3210        65859 :       break;
    3211              : 
    3212       211027 :     case MODIFY_EXPR:
    3213       211027 :     case INIT_EXPR:
    3214       211027 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags,
    3215              :                          false);
    3216       211027 :       pp_space (pp);
    3217       211027 :       pp_equal (pp);
    3218       211027 :       pp_space (pp);
    3219       211027 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags,
    3220              :                          false);
    3221       211027 :       break;
    3222              : 
    3223         2156 :     case TARGET_EXPR:
    3224         2156 :       pp_string (pp, "TARGET_EXPR <");
    3225         2156 :       dump_generic_node (pp, TARGET_EXPR_SLOT (node), spc, flags, false);
    3226         2156 :       pp_comma (pp);
    3227         2156 :       pp_space (pp);
    3228         2156 :       dump_generic_node (pp, TARGET_EXPR_INITIAL (node), spc, flags, false);
    3229         2156 :       pp_greater (pp);
    3230         2156 :       break;
    3231              : 
    3232        12237 :     case DECL_EXPR:
    3233        12237 :       print_declaration (pp, DECL_EXPR_DECL (node), spc, flags);
    3234        12237 :       is_stmt = false;
    3235        12237 :       break;
    3236              : 
    3237        48651 :     case COND_EXPR:
    3238        48651 :       if (TREE_TYPE (node) == NULL || TREE_TYPE (node) == void_type_node)
    3239              :         {
    3240        43871 :           pp_string (pp, "if (");
    3241        43871 :           dump_generic_node (pp, COND_EXPR_COND (node), spc, flags, false);
    3242        43871 :           pp_right_paren (pp);
    3243              :           /* The lowered cond_exprs should always be printed in full.  */
    3244        43871 :           if (COND_EXPR_THEN (node)
    3245        43871 :               && (IS_EMPTY_STMT (COND_EXPR_THEN (node))
    3246        42997 :                   || TREE_CODE (COND_EXPR_THEN (node)) == GOTO_EXPR)
    3247        15973 :               && COND_EXPR_ELSE (node)
    3248        59843 :               && (IS_EMPTY_STMT (COND_EXPR_ELSE (node))
    3249         2382 :                   || TREE_CODE (COND_EXPR_ELSE (node)) == GOTO_EXPR))
    3250              :             {
    3251        15084 :               pp_space (pp);
    3252        15084 :               dump_generic_node (pp, COND_EXPR_THEN (node),
    3253              :                                  0, flags, true);
    3254        15084 :               if (!IS_EMPTY_STMT (COND_EXPR_ELSE (node)))
    3255              :                 {
    3256         1494 :                   pp_string (pp, " else ");
    3257         1494 :                   dump_generic_node (pp, COND_EXPR_ELSE (node),
    3258              :                                      0, flags, true);
    3259              :                 }
    3260              :             }
    3261        28787 :           else if (!(flags & TDF_SLIM))
    3262              :             {
    3263              :               /* Output COND_EXPR_THEN.  */
    3264        28787 :               if (COND_EXPR_THEN (node))
    3265              :                 {
    3266        28787 :                   newline_and_indent (pp, spc+2);
    3267        28787 :                   pp_left_brace (pp);
    3268        28787 :                   newline_and_indent (pp, spc+4);
    3269        28787 :                   dump_generic_node (pp, COND_EXPR_THEN (node), spc+4,
    3270              :                                      flags, true);
    3271        28787 :                   newline_and_indent (pp, spc+2);
    3272        28787 :                   pp_right_brace (pp);
    3273              :                 }
    3274              : 
    3275              :               /* Output COND_EXPR_ELSE.  */
    3276        28787 :               if (COND_EXPR_ELSE (node)
    3277        28787 :                   && !IS_EMPTY_STMT (COND_EXPR_ELSE (node)))
    3278              :                 {
    3279         8022 :                   newline_and_indent (pp, spc);
    3280         8022 :                   pp_string (pp, "else");
    3281         8022 :                   newline_and_indent (pp, spc+2);
    3282         8022 :                   pp_left_brace (pp);
    3283         8022 :                   newline_and_indent (pp, spc+4);
    3284         8022 :                   dump_generic_node (pp, COND_EXPR_ELSE (node), spc+4,
    3285              :                                      flags, true);
    3286         8022 :                   newline_and_indent (pp, spc+2);
    3287         8022 :                   pp_right_brace (pp);
    3288              :                 }
    3289              :             }
    3290              :           is_expr = false;
    3291              :         }
    3292              :       else
    3293              :         {
    3294         4780 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3295         4780 :           pp_space (pp);
    3296         4780 :           pp_question (pp);
    3297         4780 :           pp_space (pp);
    3298         4780 :           dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3299         4780 :           pp_space (pp);
    3300         4780 :           pp_colon (pp);
    3301         4780 :           pp_space (pp);
    3302         4780 :           dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3303              :         }
    3304              :       break;
    3305              : 
    3306        43139 :     case BIND_EXPR:
    3307        43139 :       pp_left_brace (pp);
    3308        43139 :       if (!(flags & TDF_SLIM))
    3309              :         {
    3310        43139 :           if (BIND_EXPR_VARS (node))
    3311              :             {
    3312        35399 :               pp_newline (pp);
    3313              : 
    3314       151099 :               for (op0 = BIND_EXPR_VARS (node); op0; op0 = DECL_CHAIN (op0))
    3315              :                 {
    3316       115700 :                   print_declaration (pp, op0, spc+2, flags);
    3317       115700 :                   pp_newline (pp);
    3318              :                 }
    3319              :             }
    3320              : 
    3321        43139 :           newline_and_indent (pp, spc+2);
    3322        43139 :           dump_generic_node (pp, BIND_EXPR_BODY (node), spc+2, flags, true);
    3323        43139 :           newline_and_indent (pp, spc);
    3324        43139 :           pp_right_brace (pp);
    3325              :         }
    3326              :       is_expr = false;
    3327              :       break;
    3328              : 
    3329        66332 :     case CALL_EXPR:
    3330        66332 :       if (CALL_EXPR_FN (node) != NULL_TREE)
    3331        66178 :         print_call_name (pp, CALL_EXPR_FN (node), flags);
    3332              :       else
    3333              :         {
    3334          154 :           pp_dot (pp);
    3335          154 :           pp_string (pp, internal_fn_name (CALL_EXPR_IFN (node)));
    3336              :         }
    3337              : 
    3338              :       /* Print parameters.  */
    3339        66332 :       pp_space (pp);
    3340        66332 :       pp_left_paren (pp);
    3341        66332 :       {
    3342        66332 :         tree arg;
    3343        66332 :         call_expr_arg_iterator iter;
    3344       254663 :         FOR_EACH_CALL_EXPR_ARG (arg, iter, node)
    3345              :           {
    3346       121999 :             dump_generic_node (pp, arg, spc, flags, false);
    3347       121999 :             if (more_call_expr_args_p (&iter))
    3348              :               {
    3349        62985 :                 pp_comma (pp);
    3350        62985 :                 pp_space (pp);
    3351              :               }
    3352              :           }
    3353              :       }
    3354        66332 :       if (CALL_EXPR_VA_ARG_PACK (node))
    3355              :         {
    3356            0 :           if (call_expr_nargs (node) > 0)
    3357              :             {
    3358            0 :               pp_comma (pp);
    3359            0 :               pp_space (pp);
    3360              :             }
    3361            0 :           pp_string (pp, "__builtin_va_arg_pack ()");
    3362              :         }
    3363        66332 :       pp_right_paren (pp);
    3364              : 
    3365        66332 :       op1 = CALL_EXPR_STATIC_CHAIN (node);
    3366        66332 :       if (op1)
    3367              :         {
    3368            0 :           pp_string (pp, " [static-chain: ");
    3369            0 :           dump_generic_node (pp, op1, spc, flags, false);
    3370            0 :           pp_right_bracket (pp);
    3371              :         }
    3372              : 
    3373        66332 :       if (CALL_EXPR_RETURN_SLOT_OPT (node))
    3374            0 :         pp_string (pp, " [return slot optimization]");
    3375        66332 :       if (CALL_EXPR_TAILCALL (node))
    3376            0 :         pp_string (pp, " [tail call]");
    3377        66332 :       if (CALL_EXPR_MUST_TAIL_CALL (node))
    3378            0 :         pp_string (pp, " [must tail call]");
    3379              :       break;
    3380              : 
    3381            0 :     case WITH_CLEANUP_EXPR:
    3382            0 :       NIY;
    3383            0 :       break;
    3384              : 
    3385        16820 :     case CLEANUP_POINT_EXPR:
    3386        16820 :       pp_string (pp, "<<cleanup_point ");
    3387        16820 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3388        16820 :       pp_string (pp, ">>");
    3389        16820 :       break;
    3390              : 
    3391            0 :     case PLACEHOLDER_EXPR:
    3392            0 :       pp_string (pp, "<PLACEHOLDER_EXPR ");
    3393            0 :       dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    3394            0 :       pp_greater (pp);
    3395            0 :       break;
    3396              : 
    3397              :       /* Binary arithmetic and logic expressions.  */
    3398       256102 :     case WIDEN_SUM_EXPR:
    3399       256102 :     case WIDEN_MULT_EXPR:
    3400       256102 :     case MULT_EXPR:
    3401       256102 :     case MULT_HIGHPART_EXPR:
    3402       256102 :     case PLUS_EXPR:
    3403       256102 :     case POINTER_PLUS_EXPR:
    3404       256102 :     case POINTER_DIFF_EXPR:
    3405       256102 :     case MINUS_EXPR:
    3406       256102 :     case TRUNC_DIV_EXPR:
    3407       256102 :     case CEIL_DIV_EXPR:
    3408       256102 :     case FLOOR_DIV_EXPR:
    3409       256102 :     case ROUND_DIV_EXPR:
    3410       256102 :     case TRUNC_MOD_EXPR:
    3411       256102 :     case CEIL_MOD_EXPR:
    3412       256102 :     case FLOOR_MOD_EXPR:
    3413       256102 :     case ROUND_MOD_EXPR:
    3414       256102 :     case RDIV_EXPR:
    3415       256102 :     case EXACT_DIV_EXPR:
    3416       256102 :     case LSHIFT_EXPR:
    3417       256102 :     case RSHIFT_EXPR:
    3418       256102 :     case LROTATE_EXPR:
    3419       256102 :     case RROTATE_EXPR:
    3420       256102 :     case WIDEN_LSHIFT_EXPR:
    3421       256102 :     case BIT_IOR_EXPR:
    3422       256102 :     case BIT_XOR_EXPR:
    3423       256102 :     case BIT_AND_EXPR:
    3424       256102 :     case TRUTH_ANDIF_EXPR:
    3425       256102 :     case TRUTH_ORIF_EXPR:
    3426       256102 :     case TRUTH_AND_EXPR:
    3427       256102 :     case TRUTH_OR_EXPR:
    3428       256102 :     case TRUTH_XOR_EXPR:
    3429       256102 :     case LT_EXPR:
    3430       256102 :     case LE_EXPR:
    3431       256102 :     case GT_EXPR:
    3432       256102 :     case GE_EXPR:
    3433       256102 :     case EQ_EXPR:
    3434       256102 :     case NE_EXPR:
    3435       256102 :     case UNLT_EXPR:
    3436       256102 :     case UNLE_EXPR:
    3437       256102 :     case UNGT_EXPR:
    3438       256102 :     case UNGE_EXPR:
    3439       256102 :     case UNEQ_EXPR:
    3440       256102 :     case LTGT_EXPR:
    3441       256102 :     case ORDERED_EXPR:
    3442       256102 :     case UNORDERED_EXPR:
    3443       256102 :       {
    3444       512204 :         const char *op = op_symbol (node);
    3445       256102 :         op0 = TREE_OPERAND (node, 0);
    3446       256102 :         op1 = TREE_OPERAND (node, 1);
    3447              : 
    3448              :         /* When the operands are expressions with less priority,
    3449              :            keep semantics of the tree representation.  */
    3450       256102 :         if (op_prio (op0) <= op_prio (node))
    3451              :           {
    3452        35099 :             pp_left_paren (pp);
    3453        35099 :             dump_generic_node (pp, op0, spc, flags, false);
    3454        35099 :             pp_right_paren (pp);
    3455              :           }
    3456              :         else
    3457       221003 :           dump_generic_node (pp, op0, spc, flags, false);
    3458              : 
    3459       256102 :         pp_space (pp);
    3460       256102 :         pp_string (pp, op);
    3461       256102 :         pp_space (pp);
    3462              : 
    3463              :         /* When the operands are expressions with less priority,
    3464              :            keep semantics of the tree representation.  */
    3465       256102 :         if (op_prio (op1) <= op_prio (node))
    3466              :           {
    3467         3118 :             pp_left_paren (pp);
    3468         3118 :             dump_generic_node (pp, op1, spc, flags, false);
    3469         3118 :             pp_right_paren (pp);
    3470              :           }
    3471              :         else
    3472       252984 :           dump_generic_node (pp, op1, spc, flags, false);
    3473              :       }
    3474              :       break;
    3475              : 
    3476              :       /* Unary arithmetic and logic expressions.  */
    3477       327008 :     case ADDR_EXPR:
    3478       327008 :       if (flags & TDF_GIMPLE_VAL)
    3479              :         {
    3480            0 :           pp_string (pp, "_Literal (");
    3481            0 :           dump_generic_node (pp, TREE_TYPE (node), spc,
    3482              :                              flags & ~TDF_GIMPLE_VAL, false);
    3483            0 :           pp_character (pp, ')');
    3484              :         }
    3485              :       /* Fallthru.  */
    3486       353344 :     case NEGATE_EXPR:
    3487       353344 :     case BIT_NOT_EXPR:
    3488       353344 :     case TRUTH_NOT_EXPR:
    3489       353344 :     case PREDECREMENT_EXPR:
    3490       353344 :     case PREINCREMENT_EXPR:
    3491       353344 :     case INDIRECT_REF:
    3492       353344 :       if (!(flags & TDF_GIMPLE)
    3493       353344 :           && TREE_CODE (node) == ADDR_EXPR
    3494       680352 :           && (TREE_CODE (TREE_OPERAND (node, 0)) == STRING_CST
    3495       320208 :               || TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL))
    3496              :         /* Do not output '&' for strings and function pointers when not
    3497              :            dumping GIMPLE FE syntax.  */
    3498              :         ;
    3499              :       else
    3500       336766 :         pp_string (pp, op_symbol (node));
    3501              : 
    3502       353344 :       if (op_prio (TREE_OPERAND (node, 0)) < op_prio (node))
    3503              :         {
    3504         3978 :           pp_left_paren (pp);
    3505         3978 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3506         3978 :           pp_right_paren (pp);
    3507              :         }
    3508              :       else
    3509       349366 :         dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3510              :       break;
    3511              : 
    3512         1523 :     case POSTDECREMENT_EXPR:
    3513         1523 :     case POSTINCREMENT_EXPR:
    3514         1523 :       if (op_prio (TREE_OPERAND (node, 0)) < op_prio (node))
    3515              :         {
    3516            0 :           pp_left_paren (pp);
    3517            0 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3518            0 :           pp_right_paren (pp);
    3519              :         }
    3520              :       else
    3521         1523 :         dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3522         3046 :       pp_string (pp, op_symbol (node));
    3523         1523 :       break;
    3524              : 
    3525          366 :     case MIN_EXPR:
    3526          366 :       pp_string (pp, "MIN_EXPR <");
    3527          366 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3528          366 :       pp_string (pp, ", ");
    3529          366 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3530          366 :       pp_greater (pp);
    3531          366 :       break;
    3532              : 
    3533         6065 :     case MAX_EXPR:
    3534         6065 :       pp_string (pp, "MAX_EXPR <");
    3535         6065 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3536         6065 :       pp_string (pp, ", ");
    3537         6065 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3538         6065 :       pp_greater (pp);
    3539         6065 :       break;
    3540              : 
    3541          529 :     case ABS_EXPR:
    3542          529 :       pp_string (pp, "ABS_EXPR <");
    3543          529 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3544          529 :       pp_greater (pp);
    3545          529 :       break;
    3546              : 
    3547           24 :     case ABSU_EXPR:
    3548           24 :       pp_string (pp, "ABSU_EXPR <");
    3549           24 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3550           24 :       pp_greater (pp);
    3551           24 :       break;
    3552              : 
    3553            0 :     case RANGE_EXPR:
    3554            0 :       NIY;
    3555            0 :       break;
    3556              : 
    3557       178543 :     case ADDR_SPACE_CONVERT_EXPR:
    3558       178543 :     case FIXED_CONVERT_EXPR:
    3559       178543 :     case FIX_TRUNC_EXPR:
    3560       178543 :     case FLOAT_EXPR:
    3561       178543 :     CASE_CONVERT:
    3562       178543 :       type = TREE_TYPE (node);
    3563       178543 :       op0 = TREE_OPERAND (node, 0);
    3564       178543 :       if (type != TREE_TYPE (op0))
    3565              :         {
    3566       178521 :           pp_left_paren (pp);
    3567       178521 :           dump_generic_node (pp, type, spc, flags, false);
    3568       178521 :           pp_string (pp, ") ");
    3569              :         }
    3570       178543 :       if (op_prio (op0) < op_prio (node))
    3571        38857 :         pp_left_paren (pp);
    3572       178543 :       dump_generic_node (pp, op0, spc, flags, false);
    3573       178543 :       if (op_prio (op0) < op_prio (node))
    3574        38857 :         pp_right_paren (pp);
    3575              :       break;
    3576              : 
    3577        38413 :     case VIEW_CONVERT_EXPR:
    3578        38413 :       if (flags & TDF_GIMPLE)
    3579            0 :         pp_string (pp, "__VIEW_CONVERT <");
    3580              :       else
    3581        38413 :         pp_string (pp, "VIEW_CONVERT_EXPR<");
    3582        38413 :       dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    3583        38413 :       pp_string (pp, ">(");
    3584        38413 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3585        38413 :       pp_right_paren (pp);
    3586        38413 :       break;
    3587              : 
    3588           14 :     case PAREN_EXPR:
    3589           14 :       pp_string (pp, "((");
    3590           14 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3591           14 :       pp_string (pp, "))");
    3592           14 :       break;
    3593              : 
    3594        17241 :     case NON_LVALUE_EXPR:
    3595        17241 :       pp_string (pp, "NON_LVALUE_EXPR <");
    3596        17241 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3597        17241 :       pp_greater (pp);
    3598        17241 :       break;
    3599              : 
    3600         1582 :     case SAVE_EXPR:
    3601         1582 :       pp_string (pp, "SAVE_EXPR <");
    3602         1582 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3603         1582 :       pp_greater (pp);
    3604         1582 :       break;
    3605              : 
    3606           26 :     case COMPLEX_EXPR:
    3607           26 :       pp_string (pp, "COMPLEX_EXPR <");
    3608           26 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3609           26 :       pp_string (pp, ", ");
    3610           26 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3611           26 :       pp_greater (pp);
    3612           26 :       break;
    3613              : 
    3614            0 :     case CONJ_EXPR:
    3615            0 :       pp_string (pp, "CONJ_EXPR <");
    3616            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3617            0 :       pp_greater (pp);
    3618            0 :       break;
    3619              : 
    3620        51180 :     case REALPART_EXPR:
    3621        51180 :       if (flags & TDF_GIMPLE)
    3622              :         {
    3623            1 :           pp_string (pp, "__real ");
    3624            1 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3625              :         }
    3626              :       else
    3627              :         {
    3628        51179 :           pp_string (pp, "REALPART_EXPR <");
    3629        51179 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3630        51179 :           pp_greater (pp);
    3631              :         }
    3632              :       break;
    3633              : 
    3634        41366 :     case IMAGPART_EXPR:
    3635        41366 :       if (flags & TDF_GIMPLE)
    3636              :         {
    3637            1 :           pp_string (pp, "__imag ");
    3638            1 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3639              :         }
    3640              :       else
    3641              :         {
    3642        41365 :           pp_string (pp, "IMAGPART_EXPR <");
    3643        41365 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3644        41365 :           pp_greater (pp);
    3645              :         }
    3646              :       break;
    3647              : 
    3648            0 :     case VA_ARG_EXPR:
    3649            0 :       pp_string (pp, "VA_ARG_EXPR <");
    3650            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3651            0 :       pp_greater (pp);
    3652            0 :       break;
    3653              : 
    3654         1615 :     case TRY_FINALLY_EXPR:
    3655         1615 :     case TRY_CATCH_EXPR:
    3656         1615 :       pp_string (pp, "try");
    3657         1615 :       newline_and_indent (pp, spc+2);
    3658         1615 :       pp_left_brace (pp);
    3659         1615 :       newline_and_indent (pp, spc+4);
    3660         1615 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc+4, flags, true);
    3661         1615 :       newline_and_indent (pp, spc+2);
    3662         1615 :       pp_right_brace (pp);
    3663         1615 :       newline_and_indent (pp, spc);
    3664         1615 :       if (TREE_CODE (node) == TRY_CATCH_EXPR)
    3665              :         {
    3666           79 :           node = TREE_OPERAND (node, 1);
    3667           79 :           pp_string (pp, "catch");
    3668              :         }
    3669              :       else
    3670              :         {
    3671         1536 :           gcc_assert (TREE_CODE (node) == TRY_FINALLY_EXPR);
    3672         1536 :           node = TREE_OPERAND (node, 1);
    3673         1536 :           pp_string (pp, "finally");
    3674         1536 :           if (TREE_CODE (node) == EH_ELSE_EXPR)
    3675              :             {
    3676            0 :               newline_and_indent (pp, spc+2);
    3677            0 :               pp_left_brace (pp);
    3678            0 :               newline_and_indent (pp, spc+4);
    3679            0 :               dump_generic_node (pp, TREE_OPERAND (node, 0), spc+4,
    3680              :                                  flags, true);
    3681            0 :               newline_and_indent (pp, spc+2);
    3682            0 :               pp_right_brace (pp);
    3683            0 :               newline_and_indent (pp, spc);
    3684            0 :               node = TREE_OPERAND (node, 1);
    3685            0 :               pp_string (pp, "else");
    3686              :             }
    3687              :         }
    3688         1615 :       newline_and_indent (pp, spc+2);
    3689         1615 :       pp_left_brace (pp);
    3690         1615 :       newline_and_indent (pp, spc+4);
    3691         1615 :       dump_generic_node (pp, node, spc+4, flags, true);
    3692         1615 :       newline_and_indent (pp, spc+2);
    3693         1615 :       pp_right_brace (pp);
    3694         1615 :       is_expr = false;
    3695         1615 :       break;
    3696              : 
    3697            0 :     case CATCH_EXPR:
    3698            0 :       pp_string (pp, "catch (");
    3699            0 :       dump_generic_node (pp, CATCH_TYPES (node), spc+2, flags, false);
    3700            0 :       pp_right_paren (pp);
    3701            0 :       newline_and_indent (pp, spc+2);
    3702            0 :       pp_left_brace (pp);
    3703            0 :       newline_and_indent (pp, spc+4);
    3704            0 :       dump_generic_node (pp, CATCH_BODY (node), spc+4, flags, true);
    3705            0 :       newline_and_indent (pp, spc+2);
    3706            0 :       pp_right_brace (pp);
    3707            0 :       is_expr = false;
    3708            0 :       break;
    3709              : 
    3710            0 :     case EH_FILTER_EXPR:
    3711            0 :       pp_string (pp, "<<<eh_filter (");
    3712            0 :       dump_generic_node (pp, EH_FILTER_TYPES (node), spc+2, flags, false);
    3713            0 :       pp_string (pp, ")>>>");
    3714            0 :       newline_and_indent (pp, spc+2);
    3715            0 :       pp_left_brace (pp);
    3716            0 :       newline_and_indent (pp, spc+4);
    3717            0 :       dump_generic_node (pp, EH_FILTER_FAILURE (node), spc+4, flags, true);
    3718            0 :       newline_and_indent (pp, spc+2);
    3719            0 :       pp_right_brace (pp);
    3720            0 :       is_expr = false;
    3721            0 :       break;
    3722              : 
    3723        32866 :     case LABEL_EXPR:
    3724        32866 :       op0 = TREE_OPERAND (node, 0);
    3725              :       /* If this is for break or continue, don't bother printing it.  */
    3726        32866 :       if (DECL_NAME (op0))
    3727              :         {
    3728        28353 :           const char *name = IDENTIFIER_POINTER (DECL_NAME (op0));
    3729        28353 :           if (strcmp (name, "break") == 0
    3730        28353 :               || strcmp (name, "continue") == 0)
    3731              :             break;
    3732              :         }
    3733        32866 :       dump_generic_node (pp, op0, spc, flags, false);
    3734        32866 :       pp_colon (pp);
    3735        32866 :       if (DECL_NONLOCAL (op0))
    3736            0 :         pp_string (pp, " [non-local]");
    3737              :       break;
    3738              : 
    3739        10628 :     case LOOP_EXPR:
    3740        10628 :       pp_string (pp, "while (1)");
    3741        10628 :       if (!(flags & TDF_SLIM))
    3742              :         {
    3743        10628 :           newline_and_indent (pp, spc+2);
    3744        10628 :           pp_left_brace (pp);
    3745        10628 :           newline_and_indent (pp, spc+4);
    3746        10628 :           dump_generic_node (pp, LOOP_EXPR_BODY (node), spc+4, flags, true);
    3747        10628 :           newline_and_indent (pp, spc+2);
    3748        10628 :           pp_right_brace (pp);
    3749              :         }
    3750              :       is_expr = false;
    3751              :       break;
    3752              : 
    3753           26 :     case PREDICT_EXPR:
    3754           26 :       pp_string (pp, "// predicted ");
    3755           26 :       if (PREDICT_EXPR_OUTCOME (node))
    3756            7 :         pp_string (pp, "likely by ");
    3757              :       else
    3758           19 :         pp_string (pp, "unlikely by ");
    3759           26 :       pp_string (pp, predictor_name (PREDICT_EXPR_PREDICTOR (node)));
    3760           26 :       pp_string (pp, " predictor.");
    3761           26 :       break;
    3762              : 
    3763           52 :     case ANNOTATE_EXPR:
    3764           52 :       pp_string (pp, "ANNOTATE_EXPR <");
    3765           52 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3766           52 :       switch ((enum annot_expr_kind) TREE_INT_CST_LOW (TREE_OPERAND (node, 1)))
    3767              :         {
    3768           44 :         case annot_expr_ivdep_kind:
    3769           44 :           pp_string (pp, ", ivdep");
    3770           44 :           break;
    3771            2 :         case annot_expr_unroll_kind:
    3772            2 :           {
    3773            2 :             pp_string (pp, ", unroll ");
    3774            2 :             pp_decimal_int (pp,
    3775              :                             (int) TREE_INT_CST_LOW (TREE_OPERAND (node, 2)));
    3776            2 :             break;
    3777              :           }
    3778            3 :         case annot_expr_no_vector_kind:
    3779            3 :           pp_string (pp, ", no-vector");
    3780            3 :           break;
    3781            3 :         case annot_expr_vector_kind:
    3782            3 :           pp_string (pp, ", vector");
    3783            3 :           break;
    3784            0 :         case annot_expr_parallel_kind:
    3785            0 :           pp_string (pp, ", parallel");
    3786            0 :           break;
    3787            0 :         case annot_expr_maybe_infinite_kind:
    3788            0 :           pp_string (pp, ", maybe-infinite");
    3789            0 :           break;
    3790            0 :         default:
    3791            0 :           gcc_unreachable ();
    3792              :         }
    3793           52 :       pp_greater (pp);
    3794           52 :       break;
    3795              : 
    3796         9751 :     case RETURN_EXPR:
    3797         9751 :       pp_string (pp, "return");
    3798         9751 :       op0 = TREE_OPERAND (node, 0);
    3799         9751 :       if (op0)
    3800              :         {
    3801         9564 :           pp_space (pp);
    3802         9564 :           if (TREE_CODE (op0) == MODIFY_EXPR)
    3803         2824 :             dump_generic_node (pp, TREE_OPERAND (op0, 1),
    3804              :                                spc, flags, false);
    3805              :           else
    3806         6740 :             dump_generic_node (pp, op0, spc, flags, false);
    3807              :         }
    3808              :       break;
    3809              : 
    3810            0 :     case EXIT_EXPR:
    3811            0 :       pp_string (pp, "if (");
    3812            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3813            0 :       pp_string (pp, ") break");
    3814            0 :       break;
    3815              : 
    3816           66 :     case SWITCH_EXPR:
    3817           66 :       pp_string (pp, "switch (");
    3818           66 :       dump_generic_node (pp, SWITCH_COND (node), spc, flags, false);
    3819           66 :       pp_right_paren (pp);
    3820           66 :       if (!(flags & TDF_SLIM))
    3821              :         {
    3822           66 :           newline_and_indent (pp, spc+2);
    3823           66 :           pp_left_brace (pp);
    3824           66 :           if (SWITCH_BODY (node))
    3825              :             {
    3826           66 :               newline_and_indent (pp, spc+4);
    3827           66 :               dump_generic_node (pp, SWITCH_BODY (node), spc+4, flags,
    3828              :                                  true);
    3829              :             }
    3830           66 :           newline_and_indent (pp, spc+2);
    3831           66 :           pp_right_brace (pp);
    3832              :         }
    3833              :       is_expr = false;
    3834              :       break;
    3835              : 
    3836        22682 :     case GOTO_EXPR:
    3837        22682 :       op0 = GOTO_DESTINATION (node);
    3838        22682 :       if (TREE_CODE (op0) != SSA_NAME && DECL_P (op0) && DECL_NAME (op0))
    3839              :         {
    3840        17897 :           const char *name = IDENTIFIER_POINTER (DECL_NAME (op0));
    3841        17897 :           if (strcmp (name, "break") == 0
    3842        17897 :               || strcmp (name, "continue") == 0)
    3843              :             {
    3844            0 :               pp_string (pp, name);
    3845            0 :               break;
    3846              :             }
    3847              :         }
    3848        22682 :       pp_string (pp, "goto ");
    3849        22682 :       dump_generic_node (pp, op0, spc, flags, false);
    3850        22682 :       break;
    3851              : 
    3852          292 :     case ASM_EXPR:
    3853          292 :       pp_string (pp, "__asm__");
    3854          292 :       if (ASM_VOLATILE_P (node))
    3855          292 :         pp_string (pp, " __volatile__");
    3856          292 :       pp_left_paren (pp);
    3857          292 :       dump_generic_node (pp, ASM_STRING (node), spc, flags, false);
    3858          292 :       pp_colon (pp);
    3859          292 :       dump_generic_node (pp, ASM_OUTPUTS (node), spc, flags, false);
    3860          292 :       pp_colon (pp);
    3861          292 :       dump_generic_node (pp, ASM_INPUTS (node), spc, flags, false);
    3862          292 :       if (ASM_CLOBBERS (node))
    3863              :         {
    3864          292 :           pp_colon (pp);
    3865          292 :           dump_generic_node (pp, ASM_CLOBBERS (node), spc, flags, false);
    3866              :         }
    3867          292 :       pp_right_paren (pp);
    3868          292 :       break;
    3869              : 
    3870         8963 :     case CASE_LABEL_EXPR:
    3871         8963 :       if (CASE_LOW (node) && CASE_HIGH (node))
    3872              :         {
    3873          121 :           pp_string (pp, "case ");
    3874          121 :           dump_generic_node (pp, CASE_LOW (node), spc, flags, false);
    3875          121 :           pp_string (pp, " ... ");
    3876          121 :           dump_generic_node (pp, CASE_HIGH (node), spc, flags, false);
    3877              :         }
    3878         8842 :       else if (CASE_LOW (node))
    3879              :         {
    3880         7301 :           pp_string (pp, "case ");
    3881         7301 :           dump_generic_node (pp, CASE_LOW (node), spc, flags, false);
    3882              :         }
    3883              :       else
    3884         1541 :         pp_string (pp, "default");
    3885         8963 :       pp_colon (pp);
    3886         8963 :       break;
    3887              : 
    3888         1782 :     case OBJ_TYPE_REF:
    3889         1782 :       pp_string (pp, "OBJ_TYPE_REF(");
    3890         1782 :       dump_generic_node (pp, OBJ_TYPE_REF_EXPR (node), spc, flags, false);
    3891         1782 :       pp_semicolon (pp);
    3892              :       /* We omit the class type for -fcompare-debug because we may
    3893              :          drop TYPE_BINFO early depending on debug info, and then
    3894              :          virtual_method_call_p would return false, whereas when
    3895              :          TYPE_BINFO is preserved it may still return true and then
    3896              :          we'd print the class type.  Compare tree and rtl dumps for
    3897              :          libstdc++-prettyprinters/shared_ptr.cc with and without -g,
    3898              :          for example, at occurrences of OBJ_TYPE_REF.  */
    3899         1782 :       if (!(flags & (TDF_SLIM | TDF_COMPARE_DEBUG))
    3900         1782 :           && virtual_method_call_p (node, true))
    3901              :         {
    3902         1479 :           pp_string (pp, "(");
    3903         1479 :           dump_generic_node (pp, obj_type_ref_class (node, true),
    3904              :                              spc, flags, false);
    3905         1479 :           pp_string (pp, ")");
    3906              :         }
    3907         1782 :       dump_generic_node (pp, OBJ_TYPE_REF_OBJECT (node), spc, flags, false);
    3908         1782 :       pp_arrow (pp);
    3909         1782 :       dump_generic_node (pp, OBJ_TYPE_REF_TOKEN (node), spc, flags, false);
    3910         1782 :       pp_right_paren (pp);
    3911         1782 :       break;
    3912              : 
    3913     16293406 :     case SSA_NAME:
    3914     16293406 :       if (SSA_NAME_IDENTIFIER (node))
    3915              :         {
    3916      8979786 :           if ((flags & TDF_NOUID)
    3917         7711 :               && SSA_NAME_VAR (node)
    3918      8984620 :               && DECL_NAMELESS (SSA_NAME_VAR (node)))
    3919         1264 :             dump_fancy_name (pp, SSA_NAME_IDENTIFIER (node));
    3920      8978522 :           else if (! (flags & TDF_GIMPLE)
    3921      8978522 :                    || SSA_NAME_VAR (node))
    3922      8978522 :             dump_generic_node (pp, SSA_NAME_IDENTIFIER (node),
    3923              :                                spc, flags, false);
    3924              :         }
    3925     16293406 :       pp_underscore (pp);
    3926     16293406 :       pp_decimal_int (pp, SSA_NAME_VERSION (node));
    3927     16293406 :       if (SSA_NAME_IS_DEFAULT_DEF (node))
    3928       706380 :         pp_string (pp, "(D)");
    3929     16293406 :       if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (node))
    3930          399 :         pp_string (pp, "(ab)");
    3931              :       break;
    3932              : 
    3933            0 :     case WITH_SIZE_EXPR:
    3934            0 :       pp_string (pp, "WITH_SIZE_EXPR <");
    3935            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3936            0 :       pp_string (pp, ", ");
    3937            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3938            0 :       pp_greater (pp);
    3939            0 :       break;
    3940              : 
    3941            0 :     case SCEV_KNOWN:
    3942            0 :       pp_string (pp, "scev_known");
    3943            0 :       break;
    3944              : 
    3945         4781 :     case SCEV_NOT_KNOWN:
    3946         4781 :       pp_string (pp, "scev_not_known");
    3947         4781 :       break;
    3948              : 
    3949       148628 :     case POLYNOMIAL_CHREC:
    3950       148628 :       pp_left_brace (pp);
    3951       148628 :       dump_generic_node (pp, CHREC_LEFT (node), spc, flags, false);
    3952       148628 :       pp_string (pp, ", +, ");
    3953       148628 :       dump_generic_node (pp, CHREC_RIGHT (node), spc, flags, false);
    3954       192072 :       pp_string (pp, !CHREC_NOWRAP (node) ? "}_" : "}<nw>_");
    3955       148628 :       pp_scalar (pp, "%u", CHREC_VARIABLE (node));
    3956       148628 :       is_stmt = false;
    3957       148628 :       break;
    3958              : 
    3959            0 :     case REALIGN_LOAD_EXPR:
    3960            0 :       pp_string (pp, "REALIGN_LOAD <");
    3961            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3962            0 :       pp_string (pp, ", ");
    3963            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3964            0 :       pp_string (pp, ", ");
    3965            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3966            0 :       pp_greater (pp);
    3967            0 :       break;
    3968              : 
    3969            0 :     case VEC_COND_EXPR:
    3970            0 :       pp_string (pp, " VEC_COND_EXPR < ");
    3971            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3972            0 :       pp_string (pp, " , ");
    3973            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3974            0 :       pp_string (pp, " , ");
    3975            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3976            0 :       pp_string (pp, " > ");
    3977            0 :       break;
    3978              : 
    3979            0 :     case VEC_PERM_EXPR:
    3980            0 :       pp_string (pp, " VEC_PERM_EXPR < ");
    3981            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3982            0 :       pp_string (pp, " , ");
    3983            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3984            0 :       pp_string (pp, " , ");
    3985            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3986            0 :       pp_string (pp, " > ");
    3987            0 :       break;
    3988              : 
    3989            0 :     case DOT_PROD_EXPR:
    3990            0 :       pp_string (pp, " DOT_PROD_EXPR < ");
    3991            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3992            0 :       pp_string (pp, ", ");
    3993            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3994            0 :       pp_string (pp, ", ");
    3995            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3996            0 :       pp_string (pp, " > ");
    3997            0 :       break;
    3998              : 
    3999            0 :     case WIDEN_MULT_PLUS_EXPR:
    4000            0 :       pp_string (pp, " WIDEN_MULT_PLUS_EXPR < ");
    4001            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4002            0 :       pp_string (pp, ", ");
    4003            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4004            0 :       pp_string (pp, ", ");
    4005            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    4006            0 :       pp_string (pp, " > ");
    4007            0 :       break;
    4008              : 
    4009            0 :     case WIDEN_MULT_MINUS_EXPR:
    4010            0 :       pp_string (pp, " WIDEN_MULT_MINUS_EXPR < ");
    4011            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4012            0 :       pp_string (pp, ", ");
    4013            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4014            0 :       pp_string (pp, ", ");
    4015            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    4016            0 :       pp_string (pp, " > ");
    4017            0 :       break;
    4018              : 
    4019          117 :     case OACC_PARALLEL:
    4020          117 :       pp_string (pp, "#pragma acc parallel");
    4021          117 :       goto dump_omp_clauses_body;
    4022              : 
    4023           57 :     case OACC_KERNELS:
    4024           57 :       pp_string (pp, "#pragma acc kernels");
    4025           57 :       goto dump_omp_clauses_body;
    4026              : 
    4027           58 :     case OACC_SERIAL:
    4028           58 :       pp_string (pp, "#pragma acc serial");
    4029           58 :       goto dump_omp_clauses_body;
    4030              : 
    4031           21 :     case OACC_DATA:
    4032           21 :       pp_string (pp, "#pragma acc data");
    4033           21 :       dump_omp_clauses (pp, OACC_DATA_CLAUSES (node), spc, flags);
    4034           21 :       goto dump_omp_body;
    4035              : 
    4036           35 :     case OACC_HOST_DATA:
    4037           35 :       pp_string (pp, "#pragma acc host_data");
    4038           35 :       dump_omp_clauses (pp, OACC_HOST_DATA_CLAUSES (node), spc, flags);
    4039           35 :       goto dump_omp_body;
    4040              : 
    4041            4 :     case OACC_DECLARE:
    4042            4 :       pp_string (pp, "#pragma acc declare");
    4043            4 :       dump_omp_clauses (pp, OACC_DECLARE_CLAUSES (node), spc, flags);
    4044            4 :       break;
    4045              : 
    4046            0 :     case OACC_UPDATE:
    4047            0 :       pp_string (pp, "#pragma acc update");
    4048            0 :       dump_omp_clauses (pp, OACC_UPDATE_CLAUSES (node), spc, flags);
    4049            0 :       break;
    4050              : 
    4051           13 :     case OACC_ENTER_DATA:
    4052           13 :       pp_string (pp, "#pragma acc enter data");
    4053           13 :       dump_omp_clauses (pp, OACC_ENTER_DATA_CLAUSES (node), spc, flags);
    4054           13 :       break;
    4055              : 
    4056           38 :     case OACC_EXIT_DATA:
    4057           38 :       pp_string (pp, "#pragma acc exit data");
    4058           38 :       dump_omp_clauses (pp, OACC_EXIT_DATA_CLAUSES (node), spc, flags);
    4059           38 :       break;
    4060              : 
    4061           48 :     case OACC_CACHE:
    4062           48 :       pp_string (pp, "#pragma acc cache");
    4063           48 :       dump_omp_clauses (pp, OACC_CACHE_CLAUSES (node), spc, flags);
    4064           48 :       break;
    4065              : 
    4066          218 :     case OMP_PARALLEL:
    4067          218 :       pp_string (pp, "#pragma omp parallel");
    4068          218 :       dump_omp_clauses (pp, OMP_PARALLEL_CLAUSES (node), spc, flags);
    4069          218 :       goto dump_omp_body;
    4070              : 
    4071          232 :     dump_omp_clauses_body:
    4072          232 :       dump_omp_clauses (pp, OMP_CLAUSES (node), spc, flags);
    4073          232 :       goto dump_omp_body;
    4074              : 
    4075         1465 :     dump_omp_body:
    4076         1465 :       if (!(flags & TDF_SLIM) && OMP_BODY (node))
    4077              :         {
    4078         1464 :           newline_and_indent (pp, spc + 2);
    4079         1464 :           pp_left_brace (pp);
    4080         1464 :           newline_and_indent (pp, spc + 4);
    4081         1464 :           dump_generic_node (pp, OMP_BODY (node), spc + 4, flags, false);
    4082         1464 :           newline_and_indent (pp, spc + 2);
    4083         1464 :           pp_right_brace (pp);
    4084              :         }
    4085              :       is_expr = false;
    4086              :       break;
    4087              : 
    4088          161 :     case OMP_TASK:
    4089          162 :       pp_string (pp, OMP_TASK_BODY (node) ? "#pragma omp task"
    4090              :                                           : "#pragma omp taskwait");
    4091          161 :       dump_omp_clauses (pp, OMP_TASK_CLAUSES (node), spc, flags);
    4092          161 :       goto dump_omp_body;
    4093              : 
    4094          242 :     case OMP_FOR:
    4095          242 :       pp_string (pp, "#pragma omp for");
    4096          242 :       goto dump_omp_loop;
    4097              : 
    4098          210 :     case OMP_SIMD:
    4099          210 :       pp_string (pp, "#pragma omp simd");
    4100          210 :       goto dump_omp_loop;
    4101              : 
    4102           50 :     case OMP_DISTRIBUTE:
    4103           50 :       pp_string (pp, "#pragma omp distribute");
    4104           50 :       goto dump_omp_loop;
    4105              : 
    4106            5 :     case OMP_TASKLOOP:
    4107            5 :       pp_string (pp, "#pragma omp taskloop");
    4108            5 :       goto dump_omp_loop;
    4109              : 
    4110           21 :     case OMP_LOOP:
    4111           21 :       pp_string (pp, "#pragma omp loop");
    4112           21 :       goto dump_omp_loop;
    4113              : 
    4114          188 :     case OMP_TILE:
    4115          188 :       pp_string (pp, "#pragma omp tile");
    4116          188 :       goto dump_omp_loop;
    4117              : 
    4118          196 :     case OMP_UNROLL:
    4119          196 :       pp_string (pp, "#pragma omp unroll");
    4120          196 :       goto dump_omp_loop;
    4121              : 
    4122          307 :     case OACC_LOOP:
    4123          307 :       pp_string (pp, "#pragma acc loop");
    4124          307 :       goto dump_omp_loop;
    4125              : 
    4126           75 :     case OMP_TEAMS:
    4127           75 :       pp_string (pp, "#pragma omp teams");
    4128           75 :       dump_omp_clauses (pp, OMP_TEAMS_CLAUSES (node), spc, flags);
    4129           75 :       goto dump_omp_body;
    4130              : 
    4131           70 :     case OMP_TARGET_DATA:
    4132           70 :       pp_string (pp, "#pragma omp target data");
    4133           70 :       dump_omp_clauses (pp, OMP_TARGET_DATA_CLAUSES (node), spc, flags);
    4134           70 :       goto dump_omp_body;
    4135              : 
    4136           71 :     case OMP_TARGET_ENTER_DATA:
    4137           71 :       pp_string (pp, "#pragma omp target enter data");
    4138           71 :       dump_omp_clauses (pp, OMP_TARGET_ENTER_DATA_CLAUSES (node), spc, flags);
    4139           71 :       is_expr = false;
    4140           71 :       break;
    4141              : 
    4142           57 :     case OMP_TARGET_EXIT_DATA:
    4143           57 :       pp_string (pp, "#pragma omp target exit data");
    4144           57 :       dump_omp_clauses (pp, OMP_TARGET_EXIT_DATA_CLAUSES (node), spc, flags);
    4145           57 :       is_expr = false;
    4146           57 :       break;
    4147              : 
    4148          478 :     case OMP_TARGET:
    4149          478 :       pp_string (pp, "#pragma omp target");
    4150          478 :       dump_omp_clauses (pp, OMP_TARGET_CLAUSES (node), spc, flags);
    4151          478 :       goto dump_omp_body;
    4152              : 
    4153           42 :     case OMP_TARGET_UPDATE:
    4154           42 :       pp_string (pp, "#pragma omp target update");
    4155           42 :       dump_omp_clauses (pp, OMP_TARGET_UPDATE_CLAUSES (node), spc, flags);
    4156           42 :       is_expr = false;
    4157           42 :       break;
    4158              : 
    4159         1219 :     dump_omp_loop:
    4160         1219 :       dump_omp_clauses (pp, OMP_FOR_CLAUSES (node), spc, flags);
    4161         1219 :       if (!(flags & TDF_SLIM))
    4162              :         {
    4163         1219 :           int i;
    4164              : 
    4165         1219 :           if (OMP_FOR_PRE_BODY (node))
    4166              :             {
    4167          366 :               newline_and_indent (pp, spc + 2);
    4168          366 :               pp_left_brace (pp);
    4169          366 :               spc += 4;
    4170          366 :               newline_and_indent (pp, spc);
    4171          366 :               dump_generic_node (pp, OMP_FOR_PRE_BODY (node),
    4172              :                                  spc, flags, false);
    4173              :             }
    4174         1219 :           if (OMP_FOR_INIT (node))
    4175              :             {
    4176         1123 :               spc -= 2;
    4177         2504 :               for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (node)); i++)
    4178              :                 {
    4179         1381 :                   if (TREE_VEC_ELT (OMP_FOR_INIT (node), i) == NULL_TREE)
    4180          297 :                     continue;
    4181         1084 :                   spc += 2;
    4182         1084 :                   newline_and_indent (pp, spc);
    4183         1084 :                   pp_string (pp, "for (");
    4184         1084 :                   tree init = TREE_VEC_ELT (OMP_FOR_INIT (node), i);
    4185         1084 :                   if (TREE_CODE (init) != MODIFY_EXPR
    4186         1084 :                       || TREE_CODE (TREE_OPERAND (init, 1)) != TREE_VEC)
    4187         1037 :                     dump_generic_node (pp, init, spc, flags, false);
    4188              :                   else
    4189              :                     {
    4190           47 :                       dump_generic_node (pp, TREE_OPERAND (init, 0),
    4191              :                                          spc, flags, false);
    4192           47 :                       pp_string (pp, " = ");
    4193           47 :                       dump_omp_loop_non_rect_expr (pp, TREE_OPERAND (init, 1),
    4194              :                                                    spc, flags);
    4195              :                     }
    4196         1084 :                   pp_string (pp, "; ");
    4197         1084 :                   tree cond = TREE_VEC_ELT (OMP_FOR_COND (node), i);
    4198         1084 :                   if (!COMPARISON_CLASS_P (cond)
    4199         1084 :                       || TREE_CODE (TREE_OPERAND (cond, 1)) != TREE_VEC)
    4200         1043 :                     dump_generic_node (pp, cond, spc, flags, false);
    4201              :                   else
    4202              :                     {
    4203           41 :                       dump_generic_node (pp, TREE_OPERAND (cond, 0),
    4204              :                                          spc, flags, false);
    4205           82 :                       const char *op = op_symbol (cond);
    4206           41 :                       pp_space (pp);
    4207           41 :                       pp_string (pp, op);
    4208           41 :                       pp_space (pp);
    4209           41 :                       dump_omp_loop_non_rect_expr (pp, TREE_OPERAND (cond, 1),
    4210              :                                                    spc, flags);
    4211              :                     }
    4212         1084 :                   pp_string (pp, "; ");
    4213         1084 :                   dump_generic_node (pp,
    4214         1084 :                                      TREE_VEC_ELT (OMP_FOR_INCR (node), i),
    4215              :                                      spc, flags, false);
    4216         1084 :                   pp_right_paren (pp);
    4217              :                 }
    4218              :             }
    4219         1219 :           if (OMP_FOR_BODY (node))
    4220              :             {
    4221         1219 :               newline_and_indent (pp, spc + 2);
    4222         1219 :               pp_left_brace (pp);
    4223         1219 :               newline_and_indent (pp, spc + 4);
    4224         1219 :               dump_generic_node (pp, OMP_FOR_BODY (node), spc + 4, flags,
    4225              :                   false);
    4226         1219 :               newline_and_indent (pp, spc + 2);
    4227         1219 :               pp_right_brace (pp);
    4228              :             }
    4229         1219 :           if (OMP_FOR_INIT (node))
    4230         1123 :             spc -= 2 * TREE_VEC_LENGTH (OMP_FOR_INIT (node)) - 2;
    4231         1219 :           if (OMP_FOR_PRE_BODY (node))
    4232              :             {
    4233          366 :               spc -= 4;
    4234          366 :               newline_and_indent (pp, spc + 2);
    4235          366 :               pp_right_brace (pp);
    4236              :             }
    4237              :         }
    4238              :       is_expr = false;
    4239              :       break;
    4240              : 
    4241           10 :     case OMP_SECTIONS:
    4242           10 :       pp_string (pp, "#pragma omp sections");
    4243           10 :       dump_omp_clauses (pp, OMP_SECTIONS_CLAUSES (node), spc, flags);
    4244           10 :       goto dump_omp_body;
    4245              : 
    4246           57 :     case OMP_DISPATCH:
    4247           57 :       pp_string (pp, "#pragma omp dispatch");
    4248           57 :       dump_omp_clauses (pp, OMP_DISPATCH_CLAUSES (node), spc, flags);
    4249           57 :       goto dump_omp_body;
    4250              : 
    4251           65 :     case OMP_INTEROP:
    4252           65 :       pp_string (pp, "#pragma omp interop");
    4253           65 :       dump_omp_clauses (pp, OMP_INTEROP_CLAUSES (node), spc, flags);
    4254           65 :       is_expr = false;
    4255           65 :       break;
    4256              : 
    4257           14 :     case OMP_SECTION:
    4258           14 :       pp_string (pp, "#pragma omp section");
    4259           14 :       goto dump_omp_body;
    4260              : 
    4261           10 :     case OMP_STRUCTURED_BLOCK:
    4262           10 :       pp_string (pp, "#pragma omp __structured_block");
    4263           10 :       goto dump_omp_body;
    4264              : 
    4265           10 :     case OMP_SCAN:
    4266           10 :       if (OMP_SCAN_CLAUSES (node))
    4267              :         {
    4268            5 :           pp_string (pp, "#pragma omp scan");
    4269            5 :           dump_omp_clauses (pp, OMP_SCAN_CLAUSES (node), spc, flags);
    4270              :         }
    4271           10 :       goto dump_omp_body;
    4272              : 
    4273            4 :     case OMP_MASTER:
    4274            4 :       pp_string (pp, "#pragma omp master");
    4275            4 :       goto dump_omp_body;
    4276              : 
    4277            1 :     case OMP_MASKED:
    4278            1 :       pp_string (pp, "#pragma omp masked");
    4279            1 :       dump_omp_clauses (pp, OMP_MASKED_CLAUSES (node), spc, flags);
    4280            1 :       goto dump_omp_body;
    4281              : 
    4282            5 :     case OMP_TASKGROUP:
    4283            5 :       pp_string (pp, "#pragma omp taskgroup");
    4284            5 :       dump_omp_clauses (pp, OMP_TASKGROUP_CLAUSES (node), spc, flags);
    4285            5 :       goto dump_omp_body;
    4286              : 
    4287           18 :     case OMP_ORDERED:
    4288           18 :       pp_string (pp, "#pragma omp ordered");
    4289           18 :       dump_omp_clauses (pp, OMP_ORDERED_CLAUSES (node), spc, flags);
    4290           18 :       goto dump_omp_body;
    4291              : 
    4292           27 :     case OMP_CRITICAL:
    4293           27 :       pp_string (pp, "#pragma omp critical");
    4294           27 :       if (OMP_CRITICAL_NAME (node))
    4295              :         {
    4296           24 :           pp_space (pp);
    4297           24 :           pp_left_paren (pp);
    4298           24 :           dump_generic_node (pp, OMP_CRITICAL_NAME (node), spc,
    4299              :                              flags, false);
    4300           24 :           pp_right_paren (pp);
    4301              :         }
    4302           27 :       dump_omp_clauses (pp, OMP_CRITICAL_CLAUSES (node), spc, flags);
    4303           27 :       goto dump_omp_body;
    4304              : 
    4305          191 :     case OMP_ATOMIC:
    4306          191 :       pp_string (pp, "#pragma omp atomic");
    4307          191 :       if (OMP_ATOMIC_WEAK (node))
    4308            0 :         pp_string (pp, " weak");
    4309          191 :       dump_omp_atomic_memory_order (pp, OMP_ATOMIC_MEMORY_ORDER (node));
    4310          191 :       newline_and_indent (pp, spc + 2);
    4311          191 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4312          191 :       pp_space (pp);
    4313          191 :       pp_equal (pp);
    4314          191 :       pp_space (pp);
    4315          191 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4316          191 :       break;
    4317              : 
    4318           42 :     case OMP_ATOMIC_READ:
    4319           42 :       pp_string (pp, "#pragma omp atomic read");
    4320           42 :       dump_omp_atomic_memory_order (pp, OMP_ATOMIC_MEMORY_ORDER (node));
    4321           42 :       newline_and_indent (pp, spc + 2);
    4322           42 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4323           42 :       pp_space (pp);
    4324           42 :       break;
    4325              : 
    4326           56 :     case OMP_ATOMIC_CAPTURE_OLD:
    4327           56 :     case OMP_ATOMIC_CAPTURE_NEW:
    4328           56 :       pp_string (pp, "#pragma omp atomic capture");
    4329           56 :       if (OMP_ATOMIC_WEAK (node))
    4330            0 :         pp_string (pp, " weak");
    4331           56 :       dump_omp_atomic_memory_order (pp, OMP_ATOMIC_MEMORY_ORDER (node));
    4332           56 :       newline_and_indent (pp, spc + 2);
    4333           56 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4334           56 :       pp_space (pp);
    4335           56 :       pp_equal (pp);
    4336           56 :       pp_space (pp);
    4337           56 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4338           56 :       break;
    4339              : 
    4340           17 :     case OMP_SINGLE:
    4341           17 :       pp_string (pp, "#pragma omp single");
    4342           17 :       dump_omp_clauses (pp, OMP_SINGLE_CLAUSES (node), spc, flags);
    4343           17 :       goto dump_omp_body;
    4344              : 
    4345            2 :     case OMP_SCOPE:
    4346            2 :       pp_string (pp, "#pragma omp scope");
    4347            2 :       dump_omp_clauses (pp, OMP_SCOPE_CLAUSES (node), spc, flags);
    4348            2 :       goto dump_omp_body;
    4349              : 
    4350         1565 :     case OMP_CLAUSE:
    4351              :       /* If we come here, we're dumping something that's not an OMP construct,
    4352              :          for example, OMP clauses attached to a function's '__attribute__'.
    4353              :          Dump the whole OMP clause chain.  */
    4354         1565 :       dump_omp_clauses (pp, node, spc, flags, false);
    4355         1565 :       is_expr = false;
    4356         1565 :       break;
    4357              : 
    4358           34 :     case OMP_METADIRECTIVE:
    4359           34 :       {
    4360           34 :         pp_string (pp, "#pragma omp metadirective");
    4361           34 :         newline_and_indent (pp, spc + 2);
    4362           34 :         pp_left_brace (pp);
    4363              : 
    4364           34 :         tree variant = OMP_METADIRECTIVE_VARIANTS (node);
    4365          120 :         while (variant != NULL_TREE)
    4366              :           {
    4367           86 :             tree selector = OMP_METADIRECTIVE_VARIANT_SELECTOR (variant);
    4368           86 :             tree directive = OMP_METADIRECTIVE_VARIANT_DIRECTIVE (variant);
    4369           86 :             tree body = OMP_METADIRECTIVE_VARIANT_BODY (variant);
    4370              : 
    4371           86 :             newline_and_indent (pp, spc + 4);
    4372           86 :             if (selector == NULL_TREE)
    4373           34 :               pp_string (pp, "otherwise:");
    4374              :             else
    4375              :               {
    4376           52 :                 pp_string (pp, "when (");
    4377           52 :                 dump_omp_context_selector (pp, selector, spc + 4, flags);
    4378           52 :                 pp_string (pp, "):");
    4379              :               }
    4380           86 :             newline_and_indent (pp, spc + 6);
    4381              : 
    4382           86 :             dump_generic_node (pp, directive, spc + 6, flags, false);
    4383           86 :             newline_and_indent (pp, spc + 6);
    4384           86 :             dump_generic_node (pp, body, spc + 6, flags, false);
    4385           86 :             variant = TREE_CHAIN (variant);
    4386              :           }
    4387           34 :         newline_and_indent (pp, spc + 2);
    4388           34 :         pp_right_brace (pp);
    4389              :       }
    4390           34 :       break;
    4391              : 
    4392           12 :     case OMP_NEXT_VARIANT:
    4393           12 :       {
    4394           12 :         pp_string (pp, "OMP_NEXT_VARIANT <");
    4395           12 :         dump_generic_node (pp, OMP_NEXT_VARIANT_INDEX (node), spc,
    4396              :                            flags, false);
    4397           12 :         pp_string (pp, ", ");
    4398           12 :         tree state = OMP_NEXT_VARIANT_STATE (node);
    4399           12 :         gcc_assert (state && TREE_CODE (state) == TREE_LIST);
    4400           12 :         if (TREE_PURPOSE (state))
    4401              :           {
    4402            0 :             newline_and_indent (pp, spc + 2);
    4403            0 :             pp_string (pp, "resolution map = ");
    4404            0 :             dump_generic_node (pp, TREE_PURPOSE (state), spc, flags, false);
    4405              :           }
    4406           12 :         newline_and_indent (pp, spc + 2);
    4407           12 :         pp_string (pp, "construct context = ");
    4408           12 :         if (TREE_VALUE (state))
    4409            0 :           dump_generic_node (pp, TREE_VALUE (state), spc, flags, false);
    4410              :         else
    4411           12 :           pp_string (pp, "NULL");
    4412              : 
    4413           12 :         tree selectors = TREE_CHAIN (state);
    4414           60 :         for (int i = 0; i < TREE_VEC_LENGTH (selectors); i++)
    4415              :           {
    4416           48 :             newline_and_indent (pp, spc + 2);
    4417           48 :             pp_decimal_int (pp, i + 1);
    4418           48 :             pp_string (pp, ": ");
    4419           48 :             dump_omp_context_selector (pp, TREE_VEC_ELT (selectors, i),
    4420              :                                        spc + 4, flags);
    4421              :           }
    4422           12 :         pp_string (pp, ">");
    4423              :       }
    4424           12 :       break;
    4425              : 
    4426            0 :     case OMP_TARGET_DEVICE_MATCHES:
    4427            0 :       pp_string (pp, "OMP_TARGET_DEVICE_MATCHES <");
    4428            0 :       dump_generic_node (pp, OMP_TARGET_DEVICE_MATCHES_SELECTOR (node), spc,
    4429              :                          flags, false);
    4430            0 :       for (tree p = OMP_TARGET_DEVICE_MATCHES_PROPERTIES (node);
    4431            0 :            p; p = TREE_CHAIN (p))
    4432              :         {
    4433            0 :           pp_string (pp, ", ");
    4434            0 :           dump_generic_node (pp, OMP_TP_VALUE (p), spc, flags, false);
    4435              :         }
    4436            0 :       pp_string (pp, ")>");
    4437            0 :       break;
    4438              : 
    4439           52 :     case OMP_DECLARE_MAPPER:
    4440           52 :       pp_string (pp, "#pragma omp declare mapper (");
    4441           52 :       if (OMP_DECLARE_MAPPER_ID (node))
    4442              :         {
    4443            8 :           dump_generic_node (pp, OMP_DECLARE_MAPPER_ID (node), spc, flags,
    4444              :                              false);
    4445            8 :           pp_colon (pp);
    4446              :         }
    4447           52 :       dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    4448           52 :       pp_space (pp);
    4449           52 :       dump_generic_node (pp, OMP_DECLARE_MAPPER_DECL (node), spc, flags, false);
    4450           52 :       pp_right_paren (pp);
    4451           52 :       dump_omp_clauses (pp, OMP_DECLARE_MAPPER_CLAUSES (node), spc, flags);
    4452           52 :       break;
    4453              : 
    4454            0 :     case TRANSACTION_EXPR:
    4455            0 :       if (TRANSACTION_EXPR_OUTER (node))
    4456            0 :         pp_string (pp, "__transaction_atomic [[outer]]");
    4457            0 :       else if (TRANSACTION_EXPR_RELAXED (node))
    4458            0 :         pp_string (pp, "__transaction_relaxed");
    4459              :       else
    4460            0 :         pp_string (pp, "__transaction_atomic");
    4461            0 :       if (!(flags & TDF_SLIM) && TRANSACTION_EXPR_BODY (node))
    4462              :         {
    4463            0 :           newline_and_indent (pp, spc);
    4464            0 :           pp_left_brace (pp);
    4465            0 :           newline_and_indent (pp, spc + 2);
    4466            0 :           dump_generic_node (pp, TRANSACTION_EXPR_BODY (node),
    4467              :                              spc + 2, flags, false);
    4468            0 :           newline_and_indent (pp, spc);
    4469            0 :           pp_right_brace (pp);
    4470              :         }
    4471              :       is_expr = false;
    4472              :       break;
    4473              : 
    4474            0 :     case VEC_SERIES_EXPR:
    4475            0 :     case VEC_WIDEN_MULT_HI_EXPR:
    4476            0 :     case VEC_WIDEN_MULT_LO_EXPR:
    4477            0 :     case VEC_WIDEN_MULT_EVEN_EXPR:
    4478            0 :     case VEC_WIDEN_MULT_ODD_EXPR:
    4479            0 :     case VEC_WIDEN_LSHIFT_HI_EXPR:
    4480            0 :     case VEC_WIDEN_LSHIFT_LO_EXPR:
    4481            0 :       pp_space (pp);
    4482            0 :       for (str = get_tree_code_name (code); *str; str++)
    4483            0 :         pp_character (pp, TOUPPER (*str));
    4484            0 :       pp_string (pp, " < ");
    4485            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4486            0 :       pp_string (pp, ", ");
    4487            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4488            0 :       pp_string (pp, " > ");
    4489            0 :       break;
    4490              : 
    4491            0 :     case VEC_DUPLICATE_EXPR:
    4492            0 :       pp_space (pp);
    4493            0 :       for (str = get_tree_code_name (code); *str; str++)
    4494            0 :         pp_character (pp, TOUPPER (*str));
    4495            0 :       pp_string (pp, " < ");
    4496            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4497            0 :       pp_string (pp, " > ");
    4498            0 :       break;
    4499              : 
    4500            0 :     case VEC_UNPACK_HI_EXPR:
    4501            0 :       pp_string (pp, " VEC_UNPACK_HI_EXPR < ");
    4502            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4503            0 :       pp_string (pp, " > ");
    4504            0 :       break;
    4505              : 
    4506            0 :     case VEC_UNPACK_LO_EXPR:
    4507            0 :       pp_string (pp, " VEC_UNPACK_LO_EXPR < ");
    4508            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4509            0 :       pp_string (pp, " > ");
    4510            0 :       break;
    4511              : 
    4512            0 :     case VEC_UNPACK_FLOAT_HI_EXPR:
    4513            0 :       pp_string (pp, " VEC_UNPACK_FLOAT_HI_EXPR < ");
    4514            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4515            0 :       pp_string (pp, " > ");
    4516            0 :       break;
    4517              : 
    4518            0 :     case VEC_UNPACK_FLOAT_LO_EXPR:
    4519            0 :       pp_string (pp, " VEC_UNPACK_FLOAT_LO_EXPR < ");
    4520            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4521            0 :       pp_string (pp, " > ");
    4522            0 :       break;
    4523              : 
    4524            0 :     case VEC_UNPACK_FIX_TRUNC_HI_EXPR:
    4525            0 :       pp_string (pp, " VEC_UNPACK_FIX_TRUNC_HI_EXPR < ");
    4526            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4527            0 :       pp_string (pp, " > ");
    4528            0 :       break;
    4529              : 
    4530            0 :     case VEC_UNPACK_FIX_TRUNC_LO_EXPR:
    4531            0 :       pp_string (pp, " VEC_UNPACK_FIX_TRUNC_LO_EXPR < ");
    4532            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4533            0 :       pp_string (pp, " > ");
    4534            0 :       break;
    4535              : 
    4536            0 :     case VEC_PACK_TRUNC_EXPR:
    4537            0 :       pp_string (pp, " VEC_PACK_TRUNC_EXPR < ");
    4538            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4539            0 :       pp_string (pp, ", ");
    4540            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4541            0 :       pp_string (pp, " > ");
    4542            0 :       break;
    4543              : 
    4544            0 :     case VEC_PACK_SAT_EXPR:
    4545            0 :       pp_string (pp, " VEC_PACK_SAT_EXPR < ");
    4546            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4547            0 :       pp_string (pp, ", ");
    4548            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4549            0 :       pp_string (pp, " > ");
    4550            0 :       break;
    4551              : 
    4552            0 :     case VEC_PACK_FIX_TRUNC_EXPR:
    4553            0 :       pp_string (pp, " VEC_PACK_FIX_TRUNC_EXPR < ");
    4554            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4555            0 :       pp_string (pp, ", ");
    4556            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4557            0 :       pp_string (pp, " > ");
    4558            0 :       break;
    4559              : 
    4560            0 :     case VEC_PACK_FLOAT_EXPR:
    4561            0 :       pp_string (pp, " VEC_PACK_FLOAT_EXPR < ");
    4562            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4563            0 :       pp_string (pp, ", ");
    4564            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4565            0 :       pp_string (pp, " > ");
    4566            0 :       break;
    4567              : 
    4568            6 :     case BLOCK:
    4569            6 :       dump_block_node (pp, node, spc, flags);
    4570            6 :       break;
    4571              : 
    4572          888 :     case DEBUG_BEGIN_STMT:
    4573          888 :       pp_string (pp, "# DEBUG BEGIN STMT");
    4574          888 :       break;
    4575              : 
    4576        13277 :     default:
    4577        13277 :       NIY;
    4578              :     }
    4579              : 
    4580     46575246 :   if (is_stmt && is_expr)
    4581       328703 :     pp_semicolon (pp);
    4582              : 
    4583              :   return spc;
    4584              : }
    4585              : 
    4586              : /* Print the declaration of a variable.  */
    4587              : 
    4588              : void
    4589       449126 : print_declaration (pretty_printer *pp, tree t, int spc, dump_flags_t flags)
    4590              : {
    4591      2279368 :   INDENT (spc);
    4592              : 
    4593       449126 :   if (TREE_CODE(t) == NAMELIST_DECL)
    4594              :     {
    4595            1 :       pp_string(pp, "namelist ");
    4596            1 :       dump_decl_name (pp, t, flags);
    4597            1 :       pp_semicolon (pp);
    4598            1 :       return;
    4599              :     }
    4600              : 
    4601       449125 :   if (TREE_CODE (t) == TYPE_DECL)
    4602         1810 :     pp_string (pp, "typedef ");
    4603              : 
    4604       449125 :   if (HAS_RTL_P (t) && DECL_REGISTER (t))
    4605           39 :     pp_string (pp, "register ");
    4606              : 
    4607       449125 :   if (TREE_PUBLIC (t) && DECL_EXTERNAL (t))
    4608         5180 :     pp_string (pp, "extern ");
    4609       443945 :   else if (TREE_STATIC (t))
    4610        16808 :     pp_string (pp, "static ");
    4611              : 
    4612              :   /* Print the type and name.  */
    4613       449125 :   if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
    4614              :     {
    4615        26402 :       tree tmp;
    4616              : 
    4617              :       /* Print array's type.  */
    4618        26402 :       tmp = TREE_TYPE (t);
    4619        27248 :       while (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE)
    4620          846 :         tmp = TREE_TYPE (tmp);
    4621        26402 :       dump_generic_node (pp, TREE_TYPE (tmp), spc, flags, false);
    4622              : 
    4623              :       /* Print variable's name.  */
    4624        26402 :       pp_space (pp);
    4625        26402 :       dump_generic_node (pp, t, spc, flags, false);
    4626              : 
    4627              :       /* Print the dimensions.  */
    4628        26402 :       tmp = TREE_TYPE (t);
    4629        53650 :       while (TREE_CODE (tmp) == ARRAY_TYPE)
    4630              :         {
    4631        27248 :           dump_array_domain (pp, TYPE_DOMAIN (tmp), spc, flags);
    4632        27248 :           tmp = TREE_TYPE (tmp);
    4633              :         }
    4634              :     }
    4635       422723 :   else if (TREE_CODE (t) == FUNCTION_DECL)
    4636              :     {
    4637         8893 :       dump_generic_node (pp, TREE_TYPE (TREE_TYPE (t)), spc, flags, false);
    4638         8893 :       pp_space (pp);
    4639         8893 :       dump_decl_name (pp, t, flags);
    4640         8893 :       dump_function_declaration (pp, TREE_TYPE (t), spc, flags);
    4641              :     }
    4642              :   else
    4643              :     {
    4644              :       /* Print type declaration.  */
    4645       413830 :       dump_generic_node (pp, TREE_TYPE (t), spc, flags, false);
    4646              : 
    4647              :       /* Print variable's name.  */
    4648       413830 :       pp_space (pp);
    4649       413830 :       dump_generic_node (pp, t, spc, flags, false);
    4650              :     }
    4651              : 
    4652       449125 :   if (VAR_P (t) && DECL_HARD_REGISTER (t))
    4653              :     {
    4654            5 :       pp_string (pp, " __asm__ ");
    4655            5 :       pp_left_paren (pp);
    4656            5 :       dump_generic_node (pp, DECL_ASSEMBLER_NAME (t), spc, flags, false);
    4657            5 :       pp_right_paren (pp);
    4658              :     }
    4659              : 
    4660              :   /* The initial value of a function serves to determine whether the function
    4661              :      is declared or defined.  So the following does not apply to function
    4662              :      nodes.  */
    4663       449125 :   if (TREE_CODE (t) != FUNCTION_DECL)
    4664              :     {
    4665              :       /* Print the initial value.  */
    4666       440232 :       if (DECL_INITIAL (t))
    4667              :         {
    4668        22014 :           pp_space (pp);
    4669        22014 :           pp_equal (pp);
    4670        22014 :           pp_space (pp);
    4671        22014 :           if (!(flags & TDF_SLIM))
    4672        21224 :             dump_generic_node (pp, DECL_INITIAL (t), spc, flags, false);
    4673              :           else
    4674          790 :             pp_string (pp, "<<< omitted >>>");
    4675              :         }
    4676              :     }
    4677              : 
    4678       449125 :   if (VAR_P (t) && DECL_HAS_VALUE_EXPR_P (t))
    4679              :     {
    4680          723 :       pp_string (pp, " [value-expr: ");
    4681          723 :       dump_generic_node (pp, DECL_VALUE_EXPR (t), spc, flags, false);
    4682          723 :       pp_right_bracket (pp);
    4683              :     }
    4684              : 
    4685       449125 :   pp_semicolon (pp);
    4686              : }
    4687              : 
    4688              : 
    4689              : /* Prints a structure: name, fields, and methods.
    4690              :    FIXME: Still incomplete.  */
    4691              : 
    4692              : static void
    4693          576 : print_struct_decl (pretty_printer *pp, const_tree node, int spc,
    4694              :                    dump_flags_t flags)
    4695              : {
    4696              :   /* Print the name of the structure.  */
    4697          576 :   if (TYPE_NAME (node))
    4698              :     {
    4699            0 :       INDENT (spc);
    4700            0 :       if (TREE_CODE (node) == RECORD_TYPE)
    4701            0 :         pp_string (pp, "struct ");
    4702            0 :       else if ((TREE_CODE (node) == UNION_TYPE
    4703            0 :                 || TREE_CODE (node) == QUAL_UNION_TYPE))
    4704            0 :         pp_string (pp, "union ");
    4705              : 
    4706            0 :       dump_generic_node (pp, TYPE_NAME (node), spc, TDF_NONE, false);
    4707              :     }
    4708              : 
    4709              :   /* Print the contents of the structure.  */
    4710          576 :   pp_newline (pp);
    4711         1892 :   INDENT (spc);
    4712          576 :   pp_left_brace (pp);
    4713          576 :   pp_newline (pp);
    4714              : 
    4715              :   /* Print the fields of the structure.  */
    4716          576 :   {
    4717          576 :     tree tmp;
    4718          576 :     tmp = TYPE_FIELDS (node);
    4719         3169 :     while (tmp)
    4720              :       {
    4721              :         /* Avoid to print recursively the structure.  */
    4722              :         /* FIXME : Not implemented correctly...,
    4723              :            what about the case when we have a cycle in the contain graph? ...
    4724              :            Maybe this could be solved by looking at the scope in which the
    4725              :            structure was declared.  */
    4726         2593 :         if (TREE_TYPE (tmp) != node
    4727         2593 :             && (TREE_CODE (TREE_TYPE (tmp)) != POINTER_TYPE
    4728           52 :                 || TREE_TYPE (TREE_TYPE (tmp)) != node))
    4729              :           {
    4730         2593 :             print_declaration (pp, tmp, spc+2, flags);
    4731         2593 :             pp_newline (pp);
    4732              :           }
    4733         2593 :         tmp = DECL_CHAIN (tmp);
    4734              :       }
    4735              :   }
    4736         1316 :   INDENT (spc);
    4737          576 :   pp_right_brace (pp);
    4738          576 : }
    4739              : 
    4740              : /* Return the priority of the operator CODE.
    4741              : 
    4742              :    From lowest to highest precedence with either left-to-right (L-R)
    4743              :    or right-to-left (R-L) associativity]:
    4744              : 
    4745              :      1  [L-R] ,
    4746              :      2  [R-L] = += -= *= /= %= &= ^= |= <<= >>=
    4747              :      3  [R-L] ?:
    4748              :      4  [L-R] ||
    4749              :      5  [L-R] &&
    4750              :      6  [L-R] |
    4751              :      7  [L-R] ^
    4752              :      8  [L-R] &
    4753              :      9  [L-R] == !=
    4754              :     10  [L-R] < <= > >=
    4755              :     11  [L-R] << >>
    4756              :     12  [L-R] + -
    4757              :     13  [L-R] * / %
    4758              :     14  [R-L] ! ~ ++ -- + - * & (type) sizeof
    4759              :     15  [L-R] fn() [] -> .
    4760              : 
    4761              :    unary +, - and * have higher precedence than the corresponding binary
    4762              :    operators.  */
    4763              : 
    4764              : int
    4765     21928602 : op_code_prio (enum tree_code code)
    4766              : {
    4767     21928602 :   switch (code)
    4768              :     {
    4769              :     case TREE_LIST:
    4770              :     case COMPOUND_EXPR:
    4771              :     case BIND_EXPR:
    4772              :       return 1;
    4773              : 
    4774              :     case MODIFY_EXPR:
    4775              :     case INIT_EXPR:
    4776              :       return 2;
    4777              : 
    4778              :     case COND_EXPR:
    4779              :       return 3;
    4780              : 
    4781              :     case TRUTH_OR_EXPR:
    4782              :     case TRUTH_ORIF_EXPR:
    4783              :       return 4;
    4784              : 
    4785              :     case TRUTH_AND_EXPR:
    4786              :     case TRUTH_ANDIF_EXPR:
    4787              :       return 5;
    4788              : 
    4789              :     case BIT_IOR_EXPR:
    4790              :       return 6;
    4791              : 
    4792              :     case BIT_XOR_EXPR:
    4793              :     case TRUTH_XOR_EXPR:
    4794              :       return 7;
    4795              : 
    4796              :     case BIT_AND_EXPR:
    4797              :       return 8;
    4798              : 
    4799              :     case EQ_EXPR:
    4800              :     case NE_EXPR:
    4801              :       return 9;
    4802              : 
    4803              :     case UNLT_EXPR:
    4804              :     case UNLE_EXPR:
    4805              :     case UNGT_EXPR:
    4806              :     case UNGE_EXPR:
    4807              :     case UNEQ_EXPR:
    4808              :     case LTGT_EXPR:
    4809              :     case ORDERED_EXPR:
    4810              :     case UNORDERED_EXPR:
    4811              :     case LT_EXPR:
    4812              :     case LE_EXPR:
    4813              :     case GT_EXPR:
    4814              :     case GE_EXPR:
    4815              :       return 10;
    4816              : 
    4817              :     case LSHIFT_EXPR:
    4818              :     case RSHIFT_EXPR:
    4819              :     case LROTATE_EXPR:
    4820              :     case RROTATE_EXPR:
    4821              :     case VEC_WIDEN_LSHIFT_HI_EXPR:
    4822              :     case VEC_WIDEN_LSHIFT_LO_EXPR:
    4823              :     case WIDEN_LSHIFT_EXPR:
    4824              :       return 11;
    4825              : 
    4826              :     case WIDEN_SUM_EXPR:
    4827              :     case PLUS_EXPR:
    4828              :     case POINTER_PLUS_EXPR:
    4829              :     case POINTER_DIFF_EXPR:
    4830              :     case MINUS_EXPR:
    4831              :       return 12;
    4832              : 
    4833              :     case VEC_WIDEN_MULT_HI_EXPR:
    4834              :     case VEC_WIDEN_MULT_LO_EXPR:
    4835              :     case WIDEN_MULT_EXPR:
    4836              :     case DOT_PROD_EXPR:
    4837              :     case WIDEN_MULT_PLUS_EXPR:
    4838              :     case WIDEN_MULT_MINUS_EXPR:
    4839              :     case MULT_EXPR:
    4840              :     case MULT_HIGHPART_EXPR:
    4841              :     case TRUNC_DIV_EXPR:
    4842              :     case CEIL_DIV_EXPR:
    4843              :     case FLOOR_DIV_EXPR:
    4844              :     case ROUND_DIV_EXPR:
    4845              :     case RDIV_EXPR:
    4846              :     case EXACT_DIV_EXPR:
    4847              :     case TRUNC_MOD_EXPR:
    4848              :     case CEIL_MOD_EXPR:
    4849              :     case FLOOR_MOD_EXPR:
    4850              :     case ROUND_MOD_EXPR:
    4851              :       return 13;
    4852              : 
    4853              :     case TRUTH_NOT_EXPR:
    4854              :     case BIT_NOT_EXPR:
    4855              :     case POSTINCREMENT_EXPR:
    4856              :     case POSTDECREMENT_EXPR:
    4857              :     case PREINCREMENT_EXPR:
    4858              :     case PREDECREMENT_EXPR:
    4859              :     case NEGATE_EXPR:
    4860              :     case INDIRECT_REF:
    4861              :     case ADDR_EXPR:
    4862              :     case FLOAT_EXPR:
    4863              :     CASE_CONVERT:
    4864              :     case FIX_TRUNC_EXPR:
    4865              :     case TARGET_EXPR:
    4866              :       return 14;
    4867              : 
    4868              :     case CALL_EXPR:
    4869              :     case ARRAY_REF:
    4870              :     case ARRAY_RANGE_REF:
    4871              :     case COMPONENT_REF:
    4872              :       return 15;
    4873              : 
    4874              :       /* Special expressions.  */
    4875              :     case MIN_EXPR:
    4876              :     case MAX_EXPR:
    4877              :     case ABS_EXPR:
    4878              :     case REALPART_EXPR:
    4879              :     case IMAGPART_EXPR:
    4880              :     case VEC_UNPACK_HI_EXPR:
    4881              :     case VEC_UNPACK_LO_EXPR:
    4882              :     case VEC_UNPACK_FLOAT_HI_EXPR:
    4883              :     case VEC_UNPACK_FLOAT_LO_EXPR:
    4884              :     case VEC_UNPACK_FIX_TRUNC_HI_EXPR:
    4885              :     case VEC_UNPACK_FIX_TRUNC_LO_EXPR:
    4886              :     case VEC_PACK_TRUNC_EXPR:
    4887              :     case VEC_PACK_SAT_EXPR:
    4888              :       return 16;
    4889              : 
    4890              :     default:
    4891              :       /* Return an arbitrarily high precedence to avoid surrounding single
    4892              :          VAR_DECLs in ()s.  */
    4893              :       return 9999;
    4894              :     }
    4895              : }
    4896              : 
    4897              : /* Return the priority of the operator OP.  */
    4898              : 
    4899              : int
    4900     17485951 : op_prio (const_tree op)
    4901              : {
    4902     17502749 :   enum tree_code code;
    4903              : 
    4904     17502749 :   if (op == NULL)
    4905              :     return 9999;
    4906              : 
    4907     17502527 :   code = TREE_CODE (op);
    4908     17502527 :   if (code == SAVE_EXPR || code == NON_LVALUE_EXPR)
    4909        16798 :     return op_prio (TREE_OPERAND (op, 0));
    4910              : 
    4911     17485729 :   return op_code_prio (code);
    4912              : }
    4913              : 
    4914              : /* Return the symbol associated with operator CODE.  */
    4915              : 
    4916              : const char *
    4917      2737870 : op_symbol_code (enum tree_code code, dump_flags_t flags)
    4918              : {
    4919      2737870 :   switch (code)
    4920              :     {
    4921              :     case MODIFY_EXPR:
    4922              :       return "=";
    4923              : 
    4924         2495 :     case TRUTH_OR_EXPR:
    4925         2495 :     case TRUTH_ORIF_EXPR:
    4926         2495 :       return "||";
    4927              : 
    4928         2799 :     case TRUTH_AND_EXPR:
    4929         2799 :     case TRUTH_ANDIF_EXPR:
    4930         2799 :       return "&&";
    4931              : 
    4932        36203 :     case BIT_IOR_EXPR:
    4933        36203 :       return "|";
    4934              : 
    4935        22556 :     case TRUTH_XOR_EXPR:
    4936        22556 :     case BIT_XOR_EXPR:
    4937        22556 :       return "^";
    4938              : 
    4939       383243 :     case ADDR_EXPR:
    4940       383243 :     case BIT_AND_EXPR:
    4941       383243 :       return "&";
    4942              : 
    4943           42 :     case ORDERED_EXPR:
    4944           42 :       return (flags & TDF_GIMPLE) ? "__ORDERED" : "ord";
    4945           62 :     case UNORDERED_EXPR:
    4946           62 :       return (flags & TDF_GIMPLE) ? "__UNORDERED" : "unord";
    4947              : 
    4948        64999 :     case EQ_EXPR:
    4949        64999 :       return "==";
    4950          151 :     case UNEQ_EXPR:
    4951          151 :       return (flags & TDF_GIMPLE) ? "__UNEQ" : "u==";
    4952              : 
    4953       199299 :     case NE_EXPR:
    4954       199299 :       return "!=";
    4955              : 
    4956        71362 :     case LT_EXPR:
    4957        71362 :       return "<";
    4958          190 :     case UNLT_EXPR:
    4959          190 :       return (flags & TDF_GIMPLE) ? "__UNLT" : "u<";
    4960              : 
    4961        31159 :     case LE_EXPR:
    4962        31159 :       return "<=";
    4963          224 :     case UNLE_EXPR:
    4964          224 :       return (flags & TDF_GIMPLE) ? "__UNLE" : "u<=";
    4965              : 
    4966        54681 :     case GT_EXPR:
    4967        54681 :       return ">";
    4968          235 :     case UNGT_EXPR:
    4969          235 :       return (flags & TDF_GIMPLE) ? "__UNGT" : "u>";
    4970              : 
    4971        10041 :     case GE_EXPR:
    4972        10041 :       return ">=";
    4973          179 :     case UNGE_EXPR:
    4974          179 :       return (flags & TDF_GIMPLE) ? "__UNGE" : "u>=";
    4975              : 
    4976           33 :     case LTGT_EXPR:
    4977           33 :       return (flags & TDF_GIMPLE) ? "__LTGT" : "<>";
    4978              : 
    4979        41261 :     case LSHIFT_EXPR:
    4980        41261 :       return "<<";
    4981              : 
    4982        97496 :     case RSHIFT_EXPR:
    4983        97496 :       return ">>";
    4984              : 
    4985          785 :     case LROTATE_EXPR:
    4986          785 :       return (flags & TDF_GIMPLE) ? "__ROTATE_LEFT" : "r<<";
    4987              : 
    4988         1381 :     case RROTATE_EXPR:
    4989         1381 :       return (flags & TDF_GIMPLE) ? "__ROTATE_RIGHT" : "r>>";
    4990              : 
    4991            0 :     case WIDEN_LSHIFT_EXPR:
    4992            0 :       return "w<<";
    4993              : 
    4994              :     case POINTER_PLUS_EXPR:
    4995              :       return "+";
    4996              : 
    4997              :     case PLUS_EXPR:
    4998              :       return "+";
    4999              : 
    5000            0 :     case WIDEN_SUM_EXPR:
    5001            0 :       return "w+";
    5002              : 
    5003        10776 :     case WIDEN_MULT_EXPR:
    5004        10776 :       return "w*";
    5005              : 
    5006         7489 :     case MULT_HIGHPART_EXPR:
    5007         7489 :       return (flags & TDF_GIMPLE) ? "__MULT_HIGHPART" : "h*";
    5008              : 
    5009       193509 :     case NEGATE_EXPR:
    5010       193509 :     case MINUS_EXPR:
    5011       193509 :     case POINTER_DIFF_EXPR:
    5012       193509 :       return "-";
    5013              : 
    5014          726 :     case BIT_NOT_EXPR:
    5015          726 :       return "~";
    5016              : 
    5017          521 :     case TRUTH_NOT_EXPR:
    5018          521 :       return "!";
    5019              : 
    5020       367232 :     case MULT_EXPR:
    5021       367232 :     case INDIRECT_REF:
    5022       367232 :       return "*";
    5023              : 
    5024        14061 :     case TRUNC_DIV_EXPR:
    5025        14061 :     case RDIV_EXPR:
    5026        14061 :       return "/";
    5027              : 
    5028          135 :     case CEIL_DIV_EXPR:
    5029          135 :       return "/[cl]";
    5030              : 
    5031          217 :     case FLOOR_DIV_EXPR:
    5032          217 :       return "/[fl]";
    5033              : 
    5034          126 :     case ROUND_DIV_EXPR:
    5035          126 :       return "/[rd]";
    5036              : 
    5037          447 :     case EXACT_DIV_EXPR:
    5038          447 :       return "/[ex]";
    5039              : 
    5040         6930 :     case TRUNC_MOD_EXPR:
    5041         6930 :       return "%";
    5042              : 
    5043          126 :     case CEIL_MOD_EXPR:
    5044          126 :       return "%[cl]";
    5045              : 
    5046           63 :     case FLOOR_MOD_EXPR:
    5047           63 :       return "%[fl]";
    5048              : 
    5049          126 :     case ROUND_MOD_EXPR:
    5050          126 :       return "%[rd]";
    5051              : 
    5052           53 :     case PREDECREMENT_EXPR:
    5053           53 :       return " --";
    5054              : 
    5055          538 :     case PREINCREMENT_EXPR:
    5056          538 :       return " ++";
    5057              : 
    5058           10 :     case POSTDECREMENT_EXPR:
    5059           10 :       return "-- ";
    5060              : 
    5061         1513 :     case POSTINCREMENT_EXPR:
    5062         1513 :       return "++ ";
    5063              : 
    5064           24 :     case MAX_EXPR:
    5065           24 :       return "max";
    5066              : 
    5067           22 :     case MIN_EXPR:
    5068           22 :       return "min";
    5069              : 
    5070         1422 :     default:
    5071         1422 :       return "<<< ??? >>>";
    5072              :     }
    5073              : }
    5074              : 
    5075              : /* Return the symbol associated with operator OP.  */
    5076              : 
    5077              : static const char *
    5078       594432 : op_symbol (const_tree op, dump_flags_t flags)
    5079              : {
    5080       594432 :   return op_symbol_code (TREE_CODE (op), flags);
    5081              : }
    5082              : 
    5083              : /* Prints the name of a call.  NODE is the CALL_EXPR_FN of a CALL_EXPR or
    5084              :    the gimple_call_fn of a GIMPLE_CALL.  */
    5085              : 
    5086              : void
    5087       185431 : print_call_name (pretty_printer *pp, tree node, dump_flags_t flags)
    5088              : {
    5089       185431 :   tree op0 = node;
    5090       185431 :   int spc = 0;
    5091              : 
    5092       185431 :   if (TREE_CODE (op0) == NON_LVALUE_EXPR)
    5093            4 :     op0 = TREE_OPERAND (op0, 0);
    5094              : 
    5095       185431 :  again:
    5096       366494 :   switch (TREE_CODE (op0))
    5097              :     {
    5098       179975 :     case VAR_DECL:
    5099       179975 :     case PARM_DECL:
    5100       179975 :     case FUNCTION_DECL:
    5101       179975 :       dump_function_name (pp, op0, flags);
    5102       179975 :       break;
    5103              : 
    5104       181063 :     case ADDR_EXPR:
    5105       181063 :     case INDIRECT_REF:
    5106       181063 :     CASE_CONVERT:
    5107       181063 :       op0 = TREE_OPERAND (op0, 0);
    5108       181063 :       goto again;
    5109              : 
    5110            0 :     case COND_EXPR:
    5111            0 :       pp_left_paren (pp);
    5112            0 :       dump_generic_node (pp, TREE_OPERAND (op0, 0), 0, flags, false);
    5113            0 :       pp_string (pp, ") ? ");
    5114            0 :       dump_generic_node (pp, TREE_OPERAND (op0, 1), 0, flags, false);
    5115            0 :       pp_string (pp, " : ");
    5116            0 :       dump_generic_node (pp, TREE_OPERAND (op0, 2), 0, flags, false);
    5117            0 :       break;
    5118              : 
    5119            0 :     case ARRAY_REF:
    5120            0 :       if (VAR_P (TREE_OPERAND (op0, 0)))
    5121            0 :         dump_function_name (pp, TREE_OPERAND (op0, 0), flags);
    5122              :       else
    5123            0 :         dump_generic_node (pp, op0, 0, flags, false);
    5124              :       break;
    5125              : 
    5126            0 :     case MEM_REF:
    5127            0 :       if (integer_zerop (TREE_OPERAND (op0, 1)))
    5128              :         {
    5129            0 :           op0 = TREE_OPERAND (op0, 0);
    5130            0 :           goto again;
    5131              :         }
    5132              :       /* Fallthru.  */
    5133         5456 :     case COMPONENT_REF:
    5134         5456 :     case SSA_NAME:
    5135         5456 :     case OBJ_TYPE_REF:
    5136         5456 :       dump_generic_node (pp, op0, 0, flags, false);
    5137         5456 :       break;
    5138              : 
    5139            0 :     default:
    5140            0 :       NIY;
    5141              :     }
    5142       185431 : }
    5143              : 
    5144              : /* Print the first N characters in the array STR, replacing non-printable
    5145              :    characters (including embedded nuls) with unambiguous escape sequences.  */
    5146              : 
    5147              : void
    5148        61538 : pretty_print_string (pretty_printer *pp, const char *str, size_t n)
    5149              : {
    5150        61538 :   if (str == NULL)
    5151              :     return;
    5152              : 
    5153      1473027 :   for ( ; n; --n, ++str)
    5154              :     {
    5155      1411489 :       switch (str[0])
    5156              :         {
    5157           26 :         case '\b':
    5158           26 :           pp_string (pp, "\\b");
    5159           26 :           break;
    5160              : 
    5161           30 :         case '\f':
    5162           30 :           pp_string (pp, "\\f");
    5163           30 :           break;
    5164              : 
    5165         2942 :         case '\n':
    5166         2942 :           pp_string (pp, "\\n");
    5167         2942 :           break;
    5168              : 
    5169           18 :         case '\r':
    5170           18 :           pp_string (pp, "\\r");
    5171           18 :           break;
    5172              : 
    5173           44 :         case '\t':
    5174           44 :           pp_string (pp, "\\t");
    5175           44 :           break;
    5176              : 
    5177           20 :         case '\v':
    5178           20 :           pp_string (pp, "\\v");
    5179           20 :           break;
    5180              : 
    5181           51 :         case '\\':
    5182           51 :           pp_string (pp, "\\\\");
    5183           51 :           break;
    5184              : 
    5185          146 :         case '\"':
    5186          146 :           pp_string (pp, "\\\"");
    5187          146 :           break;
    5188              : 
    5189        14875 :         case '\'':
    5190        14875 :           pp_string (pp, "\\'");
    5191        14875 :           break;
    5192              : 
    5193      1393337 :         default:
    5194      1393337 :           if (str[0] || n > 1)
    5195              :             {
    5196      1352985 :               if (!ISPRINT (str[0]))
    5197              :                 {
    5198         6835 :                   char buf[5];
    5199         6835 :                   sprintf (buf, "\\x%02x", (unsigned char)str[0]);
    5200         6835 :                   pp_string (pp, buf);
    5201              :                 }
    5202              :               else
    5203      1346150 :                 pp_character (pp, str[0]);
    5204              :               break;
    5205              :             }
    5206              :         }
    5207              :     }
    5208              : }
    5209              : 
    5210              : static void
    5211      6156610 : maybe_init_pretty_print (FILE *file)
    5212              : {
    5213      6156610 :   if (!tree_pp)
    5214              :     {
    5215        18786 :       tree_pp = new pretty_printer ();
    5216        18786 :       pp_needs_newline (tree_pp) = true;
    5217        18786 :       pp_translate_identifiers (tree_pp) = false;
    5218              :     }
    5219              : 
    5220      6156610 :   tree_pp->set_output_stream (file);
    5221      6156610 : }
    5222              : 
    5223              : static void
    5224       578878 : newline_and_indent (pretty_printer *pp, int spc)
    5225              : {
    5226       578878 :   pp_newline (pp);
    5227      7114736 :   INDENT (spc);
    5228       578878 : }
    5229              : 
    5230              : /* Print the identifier ID to PRETTY-PRINTER.  */
    5231              : 
    5232              : void
    5233     15400357 : pp_tree_identifier (pretty_printer *pp, tree id)
    5234              : {
    5235     15400357 :   if (pp_translate_identifiers (pp))
    5236              :     {
    5237      8787346 :       const char *text = identifier_to_locale (IDENTIFIER_POINTER (id));
    5238      8787346 :       pp_append_text (pp, text, text + strlen (text));
    5239              :     }
    5240              :   else
    5241      6613011 :     pp_append_text (pp, IDENTIFIER_POINTER (id),
    5242      6613011 :                     IDENTIFIER_POINTER (id) + IDENTIFIER_LENGTH (id));
    5243     15400357 : }
    5244              : 
    5245              : /* A helper function that is used to dump function information before the
    5246              :    function dump.  */
    5247              : 
    5248              : void
    5249        60749 : dump_function_header (FILE *dump_file, tree fdecl, dump_flags_t flags)
    5250              : {
    5251        60749 :   const char *dname, *aname;
    5252        60749 :   struct cgraph_node *node = cgraph_node::get (fdecl);
    5253        60749 :   struct function *fun = DECL_STRUCT_FUNCTION (fdecl);
    5254              : 
    5255        60749 :   dname = lang_hooks.decl_printable_name (fdecl, 1);
    5256              : 
    5257        60749 :   if (DECL_ASSEMBLER_NAME_SET_P (fdecl))
    5258        60745 :     aname = (IDENTIFIER_POINTER
    5259              :              (DECL_ASSEMBLER_NAME (fdecl)));
    5260              :   else
    5261              :     aname = "<unset-asm-name>";
    5262              : 
    5263        60749 :   fprintf (dump_file, "\n;; Function %s (%s, funcdef_no=%d",
    5264              :            dname, aname, fun->funcdef_no);
    5265        60749 :   if (!(flags & TDF_NOUID))
    5266        56772 :     fprintf (dump_file, ", decl_uid=%d", DECL_UID (fdecl));
    5267        60749 :   if (node)
    5268              :     {
    5269        60749 :       fprintf (dump_file, ", cgraph_uid=%d", node->get_uid ());
    5270        60749 :       fprintf (dump_file, ", symbol_order=%d)%s\n\n", node->order,
    5271        60749 :                node->frequency == NODE_FREQUENCY_HOT
    5272              :                ? " (hot)"
    5273              :                : node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED
    5274        60662 :                ? " (unlikely executed)"
    5275              :                : node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
    5276        60362 :                ? " (executed once)"
    5277              :                : "");
    5278              :     }
    5279              :   else
    5280            0 :     fprintf (dump_file, ")\n\n");
    5281        60749 : }
    5282              : 
    5283              : #if __GNUC__ >= 10
    5284              : #  pragma GCC diagnostic pop
    5285              : #endif
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.