LCOV - code coverage report
Current view: top level - gcc - tree-pretty-print.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 78.9 % 3437 2712
Test Date: 2026-08-22 16:33:35 Functions: 92.3 % 39 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       289325 : print_generic_decl (FILE *file, tree decl, dump_flags_t flags)
     133              : {
     134       289325 :   maybe_init_pretty_print (file);
     135       289325 :   print_declaration (tree_pp, decl, 2, flags);
     136       289325 :   pp_write_text_to_stream (tree_pp);
     137       289325 : }
     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        71132 : print_generic_stmt (FILE *file, tree t, dump_flags_t flags)
     144              : {
     145        71132 :   maybe_init_pretty_print (file);
     146        71132 :   dump_generic_node (tree_pp, t, 0, flags, true);
     147        71132 :   pp_newline_and_flush (tree_pp);
     148        71132 : }
     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         6241 : print_generic_stmt_indented (FILE *file, tree t, dump_flags_t flags, int indent)
     156              : {
     157         6241 :   int i;
     158              : 
     159         6241 :   maybe_init_pretty_print (file);
     160              : 
     161        12482 :   for (i = 0; i < indent; i++)
     162            0 :     pp_space (tree_pp);
     163         6241 :   dump_generic_node (tree_pp, t, indent, flags, true);
     164         6241 :   pp_newline_and_flush (tree_pp);
     165         6241 : }
     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      5752565 : print_generic_expr (FILE *file, tree t, dump_flags_t flags)
     172              : {
     173      5752565 :   maybe_init_pretty_print (file);
     174      5752565 :   dump_generic_node (tree_pp, t, 0, flags, false);
     175      5752565 :   pp_flush (tree_pp);
     176      5752565 : }
     177              : 
     178              : /* Print a single expression T to string, and return it.  The caller
     179              :    must free the returned memory.  */
     180              : 
     181              : char *
     182        62633 : print_generic_expr_to_str (tree t)
     183              : {
     184        62633 :   pretty_printer pp;
     185        62633 :   dump_generic_node (&pp, t, 0, TDF_VOPS|TDF_MEMSYMS, false);
     186        62633 :   return xstrdup (pp_formatted_text (&pp));
     187        62633 : }
     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         2544 : dump_fancy_name (pretty_printer *pp, tree name)
     196              : {
     197         2544 :   int cnt = 0;
     198         2544 :   int length = IDENTIFIER_LENGTH (name);
     199         2544 :   const char *n = IDENTIFIER_POINTER (name);
     200         2544 :   do
     201              :     {
     202         2544 :       n = strchr (n, 'D');
     203         2544 :       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         2544 :   if (cnt == 0)
     223              :     {
     224         2544 :       pp_tree_identifier (pp, name);
     225         2544 :       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      5928257 : dump_decl_name (pretty_printer *pp, tree node, dump_flags_t flags)
     273              : {
     274      5928257 :   tree name = DECL_NAME (node);
     275      5928257 :   if (name)
     276              :     {
     277      5417649 :       if ((flags & TDF_ASMNAME)
     278        17309 :           && HAS_DECL_ASSEMBLER_NAME_P (node)
     279      5432946 :           && DECL_ASSEMBLER_NAME_SET_P (node))
     280         1616 :         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      5416033 :       else if ((flags & TDF_COMPARE_DEBUG)
     288        43344 :                && DECL_NAMELESS (node)
     289      5421363 :                && 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      5411357 :       else if ((flags & TDF_NOUID) && DECL_NAMELESS (node))
     294         1276 :         dump_fancy_name (pp, name);
     295              :       else
     296      5410081 :         pp_tree_identifier (pp, name);
     297              :     }
     298      5928257 :   char uid_sep = (flags & TDF_GIMPLE) ? '_' : '.';
     299      5928257 :   if ((flags & TDF_UID) || name == NULL_TREE)
     300              :     {
     301       532891 :       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       532888 :       else if (TREE_CODE (node) == DEBUG_EXPR_DECL)
     308              :         {
     309         3906 :           if (flags & TDF_NOUID)
     310            0 :             pp_string (pp, "D#xxxx");
     311              :           else
     312              :             {
     313         3906 :               pp_string (pp, "D#");
     314         3906 :               pp_decimal_int (pp, (int) DEBUG_TEMP_UID (node));
     315              :             }
     316              :         }
     317              :       else
     318              :         {
     319       528982 :           char c = TREE_CODE (node) == CONST_DECL ? 'C' : 'D';
     320       528982 :           pp_character (pp, c);
     321       528982 :           pp_character (pp, uid_sep);
     322       528982 :           if (flags & TDF_NOUID)
     323         7459 :             pp_string (pp, "xxxx");
     324              :           else
     325       521523 :             pp_scalar (pp, "%u", DECL_UID (node));
     326              :         }
     327              :     }
     328      5928257 :   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      5928257 : }
     339              : 
     340              : /* Like the above, but used for pretty printing function calls.  */
     341              : 
     342              : static void
     343       179161 : dump_function_name (pretty_printer *pp, tree node, dump_flags_t flags)
     344              : {
     345       179161 :   if (CONVERT_EXPR_P (node))
     346            0 :     node = TREE_OPERAND (node, 0);
     347       179161 :   if (DECL_NAME (node) && (flags & TDF_ASMNAME) == 0)
     348              :     {
     349       178776 :       pp_string (pp, lang_hooks.decl_printable_name (node, 1));
     350       178776 :       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          385 :     dump_decl_name (pp, node, flags);
     360       179161 : }
     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        16369 : dump_function_declaration (pretty_printer *pp, tree node,
     367              :                            int spc, dump_flags_t flags)
     368              : {
     369        16369 :   bool wrote_arg = false;
     370        16369 :   tree arg;
     371              : 
     372        16369 :   pp_space (pp);
     373        16369 :   pp_left_paren (pp);
     374              : 
     375              :   /* Print the argument types.  */
     376        16369 :   arg = TYPE_ARG_TYPES (node);
     377        44802 :   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        16369 :   if (arg == void_list_node && !wrote_arg)
     391         2841 :     pp_string (pp, "void");
     392              :   /* Properly dump vararg function types.  */
     393        13528 :   else if (!arg && wrote_arg)
     394          115 :     pp_string (pp, ", ...");
     395              :   /* Avoid printing any arg for unprototyped functions.  */
     396              : 
     397        16369 :   pp_right_paren (pp);
     398        16369 : }
     399              : 
     400              : /* Dump the domain associated with an array.  */
     401              : 
     402              : static void
     403       104837 : dump_array_domain (pretty_printer *pp, tree domain, int spc, dump_flags_t flags)
     404              : {
     405       104837 :   pp_left_bracket (pp);
     406       104837 :   if (domain)
     407              :     {
     408       104519 :       tree min = TYPE_MIN_VALUE (domain);
     409       104519 :       tree max = TYPE_MAX_VALUE (domain);
     410              : 
     411       104519 :       if (min && max
     412        81852 :           && integer_zerop (min)
     413       181618 :           && tree_fits_shwi_p (max))
     414        72434 :         pp_wide_integer (pp, tree_to_shwi (max) + 1);
     415              :       else
     416              :         {
     417        32085 :           if (min)
     418        32085 :             dump_generic_node (pp, min, spc, flags, false);
     419        32085 :           pp_colon (pp);
     420        32085 :           if (max)
     421         9418 :             dump_generic_node (pp, max, spc, flags, false);
     422              :         }
     423              :     }
     424              :   else
     425          318 :     pp_string (pp, "<unknown>");
     426       104837 :   pp_right_bracket (pp);
     427       104837 : }
     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        30019 : dump_omp_clause (pretty_printer *pp, tree clause, int spc, dump_flags_t flags)
     514              : {
     515        30019 :   const char *name;
     516        30019 :   const char *modifier = NULL;
     517        30019 :   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           39 :     case OMP_CLAUSE_HAS_DEVICE_ADDR:
     551           39 :       name = "has_device_addr";
     552           39 :       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         8282 :   print_remap:
     603         8282 :       pp_string (pp, name);
     604         8282 :       pp_left_paren (pp);
     605         8282 :       if (modifier)
     606           36 :         pp_string (pp, modifier);
     607         8282 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     608              :                          spc, flags, false);
     609         8282 :       pp_right_paren (pp);
     610         8282 :       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         1238 :     case OMP_CLAUSE_REDUCTION:
     618         1238 :       pp_string (pp, "reduction(");
     619         1238 :       if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_REDUCTION)
     620              :         {
     621         1214 :           if (OMP_CLAUSE_REDUCTION_TASK (clause))
     622           12 :             pp_string (pp, "task,");
     623         1202 :           else if (OMP_CLAUSE_REDUCTION_INSCAN (clause))
     624            6 :             pp_string (pp, "inscan,");
     625              :         }
     626         1238 :       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         1238 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     633              :                          spc, flags, false);
     634         1238 :       pp_right_paren (pp);
     635         1238 :       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         1870 :     case OMP_CLAUSE_LINEAR:
     857         1870 :       pp_string (pp, "linear(");
     858         1870 :       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         1870 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
     876              :                          spc, flags, false);
     877         1870 :       if (OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (clause)
     878         1870 :           && OMP_CLAUSE_LINEAR_KIND (clause) != OMP_CLAUSE_LINEAR_DEFAULT)
     879            4 :         pp_right_paren (pp);
     880         1870 :       pp_colon (pp);
     881         1870 :       if (!OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (clause)
     882         1870 :           && 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         1870 :       dump_generic_node (pp, OMP_CLAUSE_LINEAR_STEP (clause),
     898              :                          spc, flags, false);
     899         1870 :       if (!OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (clause)
     900         1870 :           && OMP_CLAUSE_LINEAR_KIND (clause) != OMP_CLAUSE_LINEAR_DEFAULT)
     901           81 :         pp_right_paren (pp);
     902         1870 :       pp_right_paren (pp);
     903         1870 :       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         6471 :     case OMP_CLAUSE_MAP:
    1064         6471 :       pp_string (pp, "map(");
    1065         6471 :       if (OMP_CLAUSE_MAP_READONLY (clause))
    1066           70 :         pp_string (pp, "readonly,");
    1067         6471 :       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         6471 :       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          807 :         case GOMP_MAP_TO:
    1083          807 :         case GOMP_MAP_TO_PSET:
    1084          807 :           pp_string (pp, "to");
    1085          807 :           break;
    1086          601 :         case GOMP_MAP_FROM:
    1087          601 :           pp_string (pp, "from");
    1088          601 :           break;
    1089         2223 :         case GOMP_MAP_TOFROM:
    1090         2223 :           pp_string (pp, "tofrom");
    1091         2223 :           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         6471 :       pp_colon (pp);
    1198         6471 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
    1199              :                          spc, flags, false);
    1200         6728 :      print_clause_size:
    1201         6728 :       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         6728 :       if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP)
    1246              :         {
    1247         6471 :           if (OMP_CLAUSE_MAP_RUNTIME_IMPLICIT_P (clause))
    1248          833 :             pp_string (pp, " [runtime_implicit]");
    1249         6471 :           if (OMP_CLAUSE_MAP_GIMPLE_ONLY (clause))
    1250            1 :             pp_string (pp, " [gimple only]");
    1251              :         }
    1252         6728 :       pp_right_paren (pp);
    1253         6728 :       break;
    1254              : 
    1255           90 :     case OMP_CLAUSE_FROM:
    1256           90 :       pp_string (pp, "from(");
    1257           90 :       if (OMP_CLAUSE_MOTION_PRESENT (clause))
    1258           37 :         pp_string (pp, "present:");
    1259           90 :       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           90 :       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
    1265              :                          spc, flags, false);
    1266           90 :       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           31 :     case OMP_CLAUSE_DEVICE_TYPE:
    1381           31 :       pp_string (pp, "device_type(");
    1382           31 :       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           16 :         case OMP_CLAUSE_DEVICE_TYPE_ANY:
    1391           16 :           pp_string (pp, "any");
    1392           16 :           break;
    1393            0 :         default:
    1394            0 :           gcc_unreachable ();
    1395              :         }
    1396           31 :       pp_right_paren (pp);
    1397           31 :       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        30019 : }
    1740              : 
    1741              : 
    1742              : /* Dump chain of OMP clauses.
    1743              : 
    1744              :    PP, SPC and FLAGS are as in dump_generic_node.  */
    1745              : 
    1746              : void
    1747        12998 : dump_omp_clauses (pretty_printer *pp, tree clause, int spc, dump_flags_t flags,
    1748              :                   bool leading_space)
    1749              : {
    1750        43017 :   while (clause)
    1751              :     {
    1752        30019 :       if (leading_space)
    1753        28456 :         pp_space (pp);
    1754        30019 :       dump_omp_clause (pp, clause, spc, flags);
    1755        30019 :       leading_space = true;
    1756              : 
    1757        30019 :       clause = OMP_CLAUSE_CHAIN (clause);
    1758              :     }
    1759        12998 : }
    1760              : 
    1761              : /* Dump an OpenMP context selector CTX to PP.  */
    1762              : static void
    1763          408 : dump_omp_context_selector (pretty_printer *pp, tree ctx, int spc,
    1764              :                            dump_flags_t flags)
    1765              : {
    1766          920 :   for (tree set = ctx; set && set != error_mark_node; set = TREE_CHAIN (set))
    1767              :     {
    1768          512 :       pp_string (pp, OMP_TSS_NAME (set));
    1769          512 :       pp_string (pp, " = {");
    1770          512 :       for (tree sel = OMP_TSS_TRAIT_SELECTORS (set);
    1771         1106 :            sel && sel != error_mark_node; sel = TREE_CHAIN (sel))
    1772              :         {
    1773          594 :           if (OMP_TS_CODE (sel) == OMP_TRAIT_INVALID)
    1774            0 :             pp_string (pp, "<unknown selector>");
    1775              :           else
    1776          594 :             pp_string (pp, OMP_TS_NAME (sel));
    1777          594 :           tree score = OMP_TS_SCORE (sel);
    1778          594 :           tree props = OMP_TS_PROPERTIES (sel);
    1779          594 :           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          594 :           if (TREE_CHAIN (sel))
    1812              :             {
    1813           82 :               pp_comma (pp);
    1814           82 :               pp_space (pp);
    1815              :             }
    1816              :         }
    1817          512 :       pp_string (pp, "}");
    1818          512 :       if (TREE_CHAIN (set))
    1819              :         {
    1820          116 :           pp_comma (pp);
    1821          116 :           newline_and_indent (pp, spc);
    1822              :         }
    1823              :     }
    1824          408 : }
    1825              : 
    1826              : /* Wrapper for above, used for "declare variant".  Compare to
    1827              :    print_generic_expr.  */
    1828              : void
    1829          308 : print_omp_context_selector (FILE *file, tree t, dump_flags_t flags)
    1830              : {
    1831          308 :   maybe_init_pretty_print (file);
    1832          308 :   dump_omp_context_selector (tree_pp, t, 0, flags);
    1833          308 :   pp_flush (tree_pp);
    1834          308 : }
    1835              : 
    1836              : /* Dump location LOC to PP.  */
    1837              : 
    1838              : void
    1839         2326 : dump_location (pretty_printer *pp, location_t loc, dump_flags_t flags)
    1840              : {
    1841         2326 :   expanded_location xloc = expand_location (loc);
    1842         2326 :   int discriminator = get_discriminator_from_loc (loc);
    1843              : 
    1844         2326 :   pp_left_bracket (pp);
    1845         2326 :   if (xloc.file)
    1846              :     {
    1847         2326 :       pp_string (pp, xloc.file);
    1848         2326 :       pp_string (pp, ":");
    1849              :     }
    1850         2326 :   pp_decimal_int (pp, xloc.line);
    1851         2326 :   pp_colon (pp);
    1852         2326 :   pp_decimal_int (pp, xloc.column);
    1853         2326 :   if (discriminator && (flags & TDF_COMPARE_DEBUG) == 0)
    1854              :   {
    1855            9 :     pp_string (pp, " discrim ");
    1856            9 :     pp_decimal_int (pp, discriminator);
    1857              :   }
    1858         2326 :   pp_string (pp, "] ");
    1859         2326 : }
    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      1302009 : dump_mem_ref (pretty_printer *pp, tree node, int spc, dump_flags_t flags)
    2026              : {
    2027      1302009 :   if ((TREE_CODE (node) == MEM_REF
    2028      1302009 :        || TREE_CODE (node) == TARGET_MEM_REF)
    2029      1302009 :       && (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      1302006 :   else if (TREE_CODE (node) == MEM_REF
    2094      1275201 :            && 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       954895 :            && TREE_CODE (TREE_OPERAND (node, 0)) != INTEGER_CST
    2099              :            /* Released SSA_NAMES have no TREE_TYPE.  */
    2100       954756 :            && TREE_TYPE (TREE_OPERAND (node, 0)) != NULL_TREE
    2101              :            /* Same pointer types, but ignoring POINTER_TYPE vs.
    2102              :               REFERENCE_TYPE.  */
    2103       954756 :            && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 0)))
    2104       954756 :                == TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1))))
    2105      1519050 :            && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 0)))
    2106       759525 :                == TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 1))))
    2107       759525 :            && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 0)))
    2108       759525 :                == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 1))))
    2109              :            /* Same value types ignoring qualifiers.  */
    2110       759376 :            && (TYPE_MAIN_VARIANT (TREE_TYPE (node))
    2111       759376 :                == TYPE_MAIN_VARIANT
    2112              :                (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1)))))
    2113      2045365 :            && (!(flags & TDF_ALIAS)
    2114         1480 :                || MR_DEPENDENCE_CLIQUE (node) == 0))
    2115              :     {
    2116       742045 :       if (TREE_CODE (TREE_OPERAND (node, 0)) != ADDR_EXPR)
    2117              :         {
    2118              :           /* Enclose pointers to arrays in parentheses.  */
    2119       648982 :           tree op0 = TREE_OPERAND (node, 0);
    2120       648982 :           tree op0type = TREE_TYPE (op0);
    2121       648982 :           if (POINTER_TYPE_P (op0type)
    2122       648982 :               && TREE_CODE (TREE_TYPE (op0type)) == ARRAY_TYPE)
    2123        29404 :             pp_left_paren (pp);
    2124       648982 :           pp_star (pp);
    2125       648982 :           dump_generic_node (pp, op0, spc, flags, false);
    2126       648982 :           if (POINTER_TYPE_P (op0type)
    2127       648982 :               && TREE_CODE (TREE_TYPE (op0type)) == ARRAY_TYPE)
    2128        29404 :             pp_right_paren (pp);
    2129              :         }
    2130              :       else
    2131        93063 :         dump_generic_node (pp,
    2132        93063 :                            TREE_OPERAND (TREE_OPERAND (node, 0), 0),
    2133              :                            spc, flags, false);
    2134              :     }
    2135              :   else
    2136              :     {
    2137       559961 :       pp_string (pp, "MEM");
    2138              : 
    2139       559961 :       tree nodetype = TREE_TYPE (node);
    2140       559961 :       tree op0 = TREE_OPERAND (node, 0);
    2141       559961 :       tree op1 = TREE_OPERAND (node, 1);
    2142       559961 :       tree op1type = TYPE_MAIN_VARIANT (TREE_TYPE (op1));
    2143              : 
    2144       559961 :       tree op0size = TYPE_SIZE (nodetype);
    2145       559961 :       tree op1size = TYPE_SIZE (TREE_TYPE (op1type));
    2146              : 
    2147       559961 :       if (!op0size || !op1size
    2148       559961 :           || !operand_equal_p (op0size, op1size, 0))
    2149              :         {
    2150       222024 :           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       222024 :           dump_generic_node (pp, nodetype, spc, flags | TDF_SLIM, false);
    2156       222024 :           pp_string (pp, "> ");
    2157              :         }
    2158              : 
    2159       559961 :       pp_string (pp, "[(");
    2160       559961 :       dump_generic_node (pp, op1type, spc, flags | TDF_SLIM, false);
    2161       559961 :       pp_right_paren (pp);
    2162       559961 :       dump_generic_node (pp, op0, spc, flags, false);
    2163       559961 :       if (!integer_zerop (op1))
    2164              :         {
    2165       323067 :           pp_string (pp, " + ");
    2166       323067 :           dump_generic_node (pp, op1, spc, flags, false);
    2167              :         }
    2168       559961 :       if (TREE_CODE (node) == TARGET_MEM_REF)
    2169              :         {
    2170        26805 :           tree tmp = TMR_INDEX2 (node);
    2171        26805 :           if (tmp)
    2172              :             {
    2173          291 :               pp_string (pp, " + ");
    2174          291 :               dump_generic_node (pp, tmp, spc, flags, false);
    2175              :             }
    2176        26805 :           tmp = TMR_INDEX (node);
    2177        26805 :           if (tmp)
    2178              :             {
    2179        22518 :               pp_string (pp, " + ");
    2180        22518 :               dump_generic_node (pp, tmp, spc, flags, false);
    2181        22518 :               tmp = TMR_STEP (node);
    2182        22518 :               pp_string (pp, " * ");
    2183        22518 :               if (tmp)
    2184        22500 :                 dump_generic_node (pp, tmp, spc, flags, false);
    2185              :               else
    2186           18 :                 pp_string (pp, "1");
    2187              :             }
    2188              :         }
    2189       559961 :       if ((flags & TDF_ALIAS)
    2190       559961 :           && 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       559961 :       pp_right_bracket (pp);
    2198              :     }
    2199      1302009 : }
    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     46132471 : dump_generic_node (pretty_printer *pp, tree node, int spc, dump_flags_t flags,
    2237              :                    bool is_stmt)
    2238              : {
    2239     46132471 :   tree type;
    2240     46132471 :   tree op0, op1;
    2241     46132471 :   const char *str;
    2242     46132471 :   bool is_expr;
    2243     46132471 :   enum tree_code code;
    2244              : 
    2245     46132471 :   if (node == NULL_TREE)
    2246              :     return spc;
    2247              : 
    2248     46111509 :   is_expr = EXPR_P (node);
    2249              : 
    2250     46111509 :   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     46111509 :   if ((flags & TDF_LINENO) && EXPR_HAS_LOCATION (node))
    2258          929 :     dump_location (pp, EXPR_LOCATION (node), flags);
    2259              : 
    2260     46111509 :   code = TREE_CODE (node);
    2261     46111509 :   switch (code)
    2262              :     {
    2263           14 :     case ERROR_MARK:
    2264           14 :       pp_string (pp, "<<< error >>>");
    2265           14 :       break;
    2266              : 
    2267      8952153 :     case IDENTIFIER_NODE:
    2268      8952153 :       pp_tree_identifier (pp, node);
    2269      8952153 :       break;
    2270              : 
    2271              :     case TREE_LIST:
    2272        58218 :       while (node && node != error_mark_node)
    2273              :         {
    2274        58218 :           if (TREE_PURPOSE (node))
    2275              :             {
    2276        21991 :               dump_generic_node (pp, TREE_PURPOSE (node), spc, flags, false);
    2277        21991 :               pp_space (pp);
    2278              :             }
    2279        58218 :           dump_generic_node (pp, TREE_VALUE (node), spc, flags, false);
    2280        58218 :           node = TREE_CHAIN (node);
    2281        58218 :           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      4513337 :     case VOID_TYPE:
    2315      4513337 :     case INTEGER_TYPE:
    2316      4513337 :     case REAL_TYPE:
    2317      4513337 :     case FIXED_POINT_TYPE:
    2318      4513337 :     case COMPLEX_TYPE:
    2319      4513337 :     case VECTOR_TYPE:
    2320      4513337 :     case ENUMERAL_TYPE:
    2321      4513337 :     case BOOLEAN_TYPE:
    2322      4513337 :     case BITINT_TYPE:
    2323      4513337 :     case OPAQUE_TYPE:
    2324      4513337 :       {
    2325      4513337 :         unsigned int quals = TYPE_QUALS (node);
    2326      4513337 :         enum tree_code_class tclass;
    2327              : 
    2328      4513337 :         if (quals & TYPE_QUAL_ATOMIC)
    2329          534 :           pp_string (pp, "atomic ");
    2330      4513337 :         if (quals & TYPE_QUAL_CONST)
    2331        37754 :           pp_string (pp, "const ");
    2332      4513337 :         if (quals & TYPE_QUAL_VOLATILE)
    2333         3755 :           pp_string (pp, "volatile ");
    2334      4513337 :         if (quals & TYPE_QUAL_RESTRICT)
    2335            0 :           pp_string (pp, "restrict ");
    2336              : 
    2337      4513337 :         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      4513337 :         tclass = TREE_CODE_CLASS (TREE_CODE (node));
    2345              : 
    2346      4513337 :         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      4513337 :         else if (tclass == tcc_type)
    2354              :           {
    2355      4513337 :             if ((flags & TDF_GIMPLE) && node == sizetype)
    2356            0 :               pp_string (pp, "__SIZETYPE__");
    2357      4513337 :             else if (TYPE_NAME (node))
    2358              :               {
    2359      2983338 :                 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
    2360       841931 :                   pp_tree_identifier (pp, TYPE_NAME (node));
    2361      2141407 :                 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
    2362      2141407 :                          && DECL_NAME (TYPE_NAME (node)))
    2363      2141407 :                   dump_decl_name (pp, TYPE_NAME (node), flags);
    2364              :                 else
    2365            0 :                   pp_string (pp, "<unnamed type>");
    2366              :               }
    2367      1529999 :             else if (TREE_CODE (node) == VECTOR_TYPE)
    2368              :               {
    2369      1019687 :                 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      1019687 :                     pp_string (pp, "vector");
    2380      1019687 :                     pp_left_paren (pp);
    2381      1019687 :                     pp_wide_integer (pp, TYPE_VECTOR_SUBPARTS (node));
    2382      1019687 :                     pp_string (pp, ") ");
    2383      1019687 :                     dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2384              :                   }
    2385              :               }
    2386              :             else if (TREE_CODE (node) == INTEGER_TYPE)
    2387              :               {
    2388       441672 :                 if (TYPE_PRECISION (node) == CHAR_TYPE_SIZE)
    2389        58023 :                   pp_string (pp, (TYPE_UNSIGNED (node)
    2390              :                                       ? "unsigned char"
    2391              :                                       : "signed char"));
    2392       390040 :                 else if (TYPE_PRECISION (node) == SHORT_TYPE_SIZE)
    2393       195689 :                   pp_string (pp, (TYPE_UNSIGNED (node)
    2394              :                                       ? "unsigned short"
    2395              :                                       : "signed short"));
    2396       233634 :                 else if (TYPE_PRECISION (node) == INT_TYPE_SIZE)
    2397       190456 :                   pp_string (pp, (TYPE_UNSIGNED (node)
    2398              :                                       ? "unsigned int"
    2399              :                                       : "signed int"));
    2400        46889 :                 else if (TYPE_PRECISION (node) == LONG_TYPE_SIZE)
    2401        44583 :                   pp_string (pp, (TYPE_UNSIGNED (node)
    2402              :                                       ? "unsigned long"
    2403              :                                       : "signed long"));
    2404         4209 :                 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         4209 :                 else if (TYPE_PRECISION (node) >= CHAR_TYPE_SIZE
    2409         4209 :                          && 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          702 :                     pp_string (pp, (TYPE_UNSIGNED (node)
    2418              :                                         ? "<unnamed-unsigned:"
    2419              :                                         : "<unnamed-signed:"));
    2420          533 :                     pp_decimal_int (pp, TYPE_PRECISION (node));
    2421          533 :                     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       122920 :                 pp_string (pp, (TYPE_UNSIGNED (node)
    2445              :                                 ? "<unsigned-boolean:"
    2446              :                                 : "<signed-boolean:"));
    2447        61460 :                 pp_decimal_int (pp, TYPE_PRECISION (node));
    2448        61460 :                 pp_greater (pp);
    2449              :               }
    2450              :             else if (TREE_CODE (node) == BITINT_TYPE)
    2451              :               {
    2452          134 :                 if (TYPE_UNSIGNED (node))
    2453           34 :                   pp_string (pp, "unsigned ");
    2454          134 :                 pp_string (pp, "_BitInt(");
    2455          134 :                 pp_decimal_int (pp, TYPE_PRECISION (node));
    2456          134 :                 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       858141 :     case POINTER_TYPE:
    2467       858141 :     case REFERENCE_TYPE:
    2468       858141 :       str = (TREE_CODE (node) == POINTER_TYPE ? "*" : "&");
    2469              : 
    2470       858141 :       if (TREE_TYPE (node) == NULL)
    2471              :         {
    2472            0 :           pp_string (pp, str);
    2473            0 :           pp_string (pp, "<null type>");
    2474              :         }
    2475       858141 :       else if (TREE_CODE (TREE_TYPE (node)) == FUNCTION_TYPE)
    2476              :         {
    2477         7426 :           tree fnode = TREE_TYPE (node);
    2478              : 
    2479         7426 :           dump_generic_node (pp, TREE_TYPE (fnode), spc, flags, false);
    2480         7426 :           pp_space (pp);
    2481         7426 :           pp_left_paren (pp);
    2482         7426 :           pp_string (pp, str);
    2483         7426 :           if (TYPE_IDENTIFIER (node))
    2484         2453 :             dump_generic_node (pp, TYPE_NAME (node), spc, flags, false);
    2485         4973 :           else if (flags & TDF_NOUID)
    2486          128 :             pp_string (pp, "<Txxxx>");
    2487              :           else
    2488              :             {
    2489         4845 :               pp_string (pp, "<T");
    2490         4845 :               pp_scalar (pp, "%x", TYPE_UID (node));
    2491         4845 :               pp_character (pp, '>');
    2492              :             }
    2493              : 
    2494         7426 :           pp_right_paren (pp);
    2495         7426 :           dump_function_declaration (pp, fnode, spc, flags);
    2496              :         }
    2497              :       else
    2498              :         {
    2499       850715 :           unsigned int quals = TYPE_QUALS (node);
    2500              : 
    2501       850715 :           dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    2502       850715 :           pp_space (pp);
    2503       850715 :           pp_string (pp, str);
    2504              : 
    2505       850715 :           if (quals & TYPE_QUAL_CONST)
    2506         3901 :             pp_string (pp, " const");
    2507       850715 :           if (quals & TYPE_QUAL_VOLATILE)
    2508          227 :             pp_string (pp, " volatile");
    2509       850715 :           if (quals & TYPE_QUAL_RESTRICT)
    2510        45840 :             pp_string (pp, " restrict");
    2511              : 
    2512       850715 :           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       850715 :           if (TYPE_REF_CAN_ALIAS_ALL (node))
    2520         5026 :             pp_string (pp, " {ref-all}");
    2521              :         }
    2522              :       break;
    2523              : 
    2524            0 :     case OFFSET_TYPE:
    2525            0 :       NIY;
    2526            0 :       break;
    2527              : 
    2528      1302009 :     case MEM_REF:
    2529      1302009 :     case TARGET_MEM_REF:
    2530      1302009 :       dump_mem_ref (pp, node, spc, flags);
    2531      1302009 :       break;
    2532              : 
    2533        72695 :     case ARRAY_TYPE:
    2534        72695 :       {
    2535        72695 :         unsigned int quals = TYPE_QUALS (node);
    2536        72695 :         tree tmp;
    2537              : 
    2538        72695 :         if (quals & TYPE_QUAL_ATOMIC)
    2539            0 :           pp_string (pp, "atomic ");
    2540        72695 :         if (quals & TYPE_QUAL_CONST)
    2541            1 :           pp_string (pp, "const ");
    2542        72695 :         if (quals & TYPE_QUAL_VOLATILE)
    2543            0 :           pp_string (pp, "volatile ");
    2544              : 
    2545              :         /* Print the innermost component type.  */
    2546        77685 :         for (tmp = TREE_TYPE (node); TREE_CODE (tmp) == ARRAY_TYPE;
    2547         4990 :              tmp = TREE_TYPE (tmp))
    2548              :           ;
    2549              : 
    2550              :         /* Avoid to print recursively the array.  */
    2551              :         /* FIXME : Not implemented correctly, see print_struct_decl.  */
    2552        72695 :         if (TREE_CODE (tmp) != POINTER_TYPE || TREE_TYPE (tmp) != node)
    2553        72695 :           dump_generic_node (pp, tmp, spc, flags, false);
    2554              : 
    2555              :         /* Print the dimensions.  */
    2556       150380 :         for (tmp = node; TREE_CODE (tmp) == ARRAY_TYPE; tmp = TREE_TYPE (tmp))
    2557        77685 :           dump_array_domain (pp, TYPE_DOMAIN (tmp), spc, flags);
    2558              :         break;
    2559              :       }
    2560              : 
    2561       124851 :     case RECORD_TYPE:
    2562       124851 :     case UNION_TYPE:
    2563       124851 :     case QUAL_UNION_TYPE:
    2564       124851 :       {
    2565       124851 :         unsigned int quals = TYPE_QUALS (node);
    2566              : 
    2567       124851 :         if (quals & TYPE_QUAL_ATOMIC)
    2568            0 :           pp_string (pp, "atomic ");
    2569       124851 :         if (quals & TYPE_QUAL_CONST)
    2570        11657 :           pp_string (pp, "const ");
    2571       124851 :         if (quals & TYPE_QUAL_VOLATILE)
    2572           63 :           pp_string (pp, "volatile ");
    2573              : 
    2574       124851 :         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       124851 :         if (TREE_CODE (node) == RECORD_TYPE)
    2583       123007 :           pp_string (pp, "struct ");
    2584         1844 :         else if (TREE_CODE (node) == UNION_TYPE)
    2585         1844 :           pp_string (pp, "union ");
    2586              : 
    2587       124851 :         if (TYPE_NAME (node))
    2588       121727 :           dump_generic_node (pp, TYPE_NAME (node), spc, flags, false);
    2589         3124 :         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      5564851 :     case INTEGER_CST:
    2604      5564851 :       if (flags & TDF_GIMPLE
    2605      5564851 :           && (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      5564851 :       if (TREE_CODE (TREE_TYPE (node)) == POINTER_TYPE
    2616      5564851 :           && ! (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       444973 :           pp_wide_integer (pp, TREE_INT_CST_LOW (node));
    2639       444973 :           pp_string (pp, "B"); /* pseudo-unit */
    2640              :         }
    2641      5119878 :       else if (tree_fits_shwi_p (node))
    2642      5102389 :         pp_wide_integer (pp, tree_to_shwi (node));
    2643        17489 :       else if (tree_fits_uhwi_p (node))
    2644        16934 :         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      5564851 :       if ((flags & TDF_GIMPLE)
    2669      5564851 :           && ! (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      5564851 :       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       146228 :     case REAL_CST:
    2703              :       /* Code copied from print_node.  */
    2704       146228 :       {
    2705       146228 :         REAL_VALUE_TYPE d;
    2706       146228 :         if (TREE_OVERFLOW (node))
    2707            0 :           pp_string (pp, " overflow");
    2708              : 
    2709       146228 :         d = TREE_REAL_CST (node);
    2710       146228 :         if (REAL_VALUE_ISINF (d))
    2711         6505 :           pp_string (pp, REAL_VALUE_NEGATIVE (d) ? " -Inf" : " Inf");
    2712       140197 :         else if (REAL_VALUE_ISNAN (d))
    2713         2180 :           pp_string (pp, " Nan");
    2714              :         else
    2715              :           {
    2716       138017 :             char string[100];
    2717       138017 :             real_to_decimal (string, &d, sizeof (string), 0, 1);
    2718       138017 :             pp_string (pp, string);
    2719              :           }
    2720       146228 :         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         1576 :     case COMPLEX_CST:
    2732         1576 :       pp_string (pp, "__complex__ (");
    2733         1576 :       dump_generic_node (pp, TREE_REALPART (node), spc, flags, false);
    2734         1576 :       pp_string (pp, ", ");
    2735         1576 :       dump_generic_node (pp, TREE_IMAGPART (node), spc, flags, false);
    2736         1576 :       pp_right_paren (pp);
    2737         1576 :       break;
    2738              : 
    2739        61449 :     case STRING_CST:
    2740        61449 :       {
    2741        61449 :         pp_string (pp, "\"");
    2742        61449 :         if (unsigned nbytes = TREE_STRING_LENGTH (node))
    2743        61210 :           pretty_print_string (pp, TREE_STRING_POINTER (node), nbytes);
    2744        61449 :         pp_string (pp, "\"");
    2745        61449 :         break;
    2746              :       }
    2747              : 
    2748       144433 :     case VECTOR_CST:
    2749       144433 :       {
    2750       144433 :         unsigned i;
    2751       144433 :         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       144433 :         pp_string (pp, "{ ");
    2758       144433 :         unsigned HOST_WIDE_INT nunits;
    2759       144433 :         if (!VECTOR_CST_NELTS (node).is_constant (&nunits))
    2760              :           nunits = vector_cst_encoded_nelts (node);
    2761      1053204 :         for (i = 0; i < nunits; ++i)
    2762              :           {
    2763       908771 :             if (i != 0)
    2764       764338 :               pp_string (pp, ", ");
    2765       908771 :             dump_generic_node (pp, VECTOR_CST_ELT (node, i),
    2766              :                                spc, flags, false);
    2767              :           }
    2768       144433 :         if (!VECTOR_CST_NELTS (node).is_constant ())
    2769              :           pp_string (pp, ", ...");
    2770       144433 :         pp_string (pp, " }");
    2771              :       }
    2772       144433 :       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        23273 :     case FUNCTION_DECL:
    2823        23273 :     case CONST_DECL:
    2824        23273 :       dump_decl_name (pp, node, flags);
    2825        23273 :       break;
    2826              : 
    2827       122747 :     case LABEL_DECL:
    2828       122747 :       if (DECL_NAME (node))
    2829        53505 :         dump_decl_name (pp, node, flags);
    2830        69242 :       else if (LABEL_DECL_UID (node) != -1)
    2831              :         {
    2832        24466 :           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        24431 :               pp_string (pp, "<L");
    2840        24431 :               pp_decimal_int (pp, (int) LABEL_DECL_UID (node));
    2841        24431 :               pp_character (pp, '>');
    2842              :             }
    2843              :         }
    2844              :       else
    2845              :         {
    2846        44776 :           if (flags & TDF_NOUID)
    2847            6 :             pp_string (pp, "<D.xxxx>");
    2848              :           else
    2849              :             {
    2850        44770 :               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        44764 :                   pp_string (pp, "<D.");
    2858        44764 :                   pp_scalar (pp, "%u", DECL_UID (node));
    2859        44764 :                   pp_character (pp, '>');
    2860              :                 }
    2861              :             }
    2862              :         }
    2863              :       break;
    2864              : 
    2865        72109 :     case TYPE_DECL:
    2866        72109 :       if (DECL_IS_UNDECLARED_BUILTIN (node))
    2867              :         {
    2868              :           /* Don't print the declaration of built-in types.  */
    2869              :           break;
    2870              :         }
    2871        66935 :       if (DECL_NAME (node))
    2872        66880 :         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      3633793 :     case VAR_DECL:
    2884      3633793 :     case PARM_DECL:
    2885      3633793 :     case FIELD_DECL:
    2886      3633793 :     case DEBUG_EXPR_DECL:
    2887      3633793 :     case NAMESPACE_DECL:
    2888      3633793 :     case NAMELIST_DECL:
    2889      3633793 :       dump_decl_name (pp, node, flags);
    2890      3633793 :       break;
    2891              : 
    2892        22935 :     case RESULT_DECL:
    2893        22935 :       pp_string (pp, "<retval>");
    2894        22935 :       break;
    2895              : 
    2896       624704 :     case COMPONENT_REF:
    2897       624704 :       op0 = TREE_OPERAND (node, 0);
    2898       624704 :       str = ".";
    2899       624704 :       if (op0
    2900       624704 :           && (TREE_CODE (op0) == INDIRECT_REF
    2901       584273 :               || (TREE_CODE (op0) == MEM_REF
    2902       193735 :                   && TREE_CODE (TREE_OPERAND (op0, 0)) != ADDR_EXPR
    2903       161714 :                   && 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       156938 :                   && TREE_CODE (TREE_OPERAND (op0, 0)) != INTEGER_CST
    2908              :                   /* Released SSA_NAMES have no TREE_TYPE.  */
    2909       156902 :                   && TREE_TYPE (TREE_OPERAND (op0, 0)) != NULL_TREE
    2910              :                   /* Same pointer types, but ignoring POINTER_TYPE vs.
    2911              :                      REFERENCE_TYPE.  */
    2912       156902 :                   && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0, 0)))
    2913       156902 :                       == TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0, 1))))
    2914       302618 :                   && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0, 0)))
    2915       151309 :                       == TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0, 1))))
    2916       151309 :                   && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0, 0)))
    2917       151309 :                       == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0, 1))))
    2918              :                   /* Same value types ignoring qualifiers.  */
    2919       151309 :                   && (TYPE_MAIN_VARIANT (TREE_TYPE (op0))
    2920       151309 :                       == TYPE_MAIN_VARIANT
    2921              :                           (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0, 1)))))
    2922       151309 :                   && MR_DEPENDENCE_CLIQUE (op0) == 0)))
    2923              :         {
    2924       178639 :           op0 = TREE_OPERAND (op0, 0);
    2925       178639 :           str = "->";
    2926              :         }
    2927       624704 :       if (op_prio (op0) < op_prio (node))
    2928         7111 :         pp_left_paren (pp);
    2929       624704 :       dump_generic_node (pp, op0, spc, flags, false);
    2930       624704 :       if (op_prio (op0) < op_prio (node))
    2931         7111 :         pp_right_paren (pp);
    2932       624704 :       pp_string (pp, str);
    2933       624704 :       op1 = TREE_OPERAND (node, 1);
    2934       624704 :       dump_generic_node (pp, op1, spc, flags, false);
    2935       624704 :       if (DECL_P (op1)) /* Not always a decl in the C++ FE.  */
    2936       624704 :         if (tree off = component_ref_field_offset (node))
    2937       624630 :           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        23204 :     case BIT_FIELD_REF:
    2946        23204 :       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        23204 :           pp_string (pp, "BIT_FIELD_REF <");
    2972        23204 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    2973        23204 :           pp_string (pp, ", ");
    2974        23204 :           dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    2975        23204 :           pp_string (pp, ", ");
    2976        23204 :           dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    2977        23204 :           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      2008651 :     case ARRAY_REF:
    2999      2008651 :     case ARRAY_RANGE_REF:
    3000      2008651 :       op0 = TREE_OPERAND (node, 0);
    3001      2008651 :       if (op_prio (op0) < op_prio (node))
    3002         9530 :         pp_left_paren (pp);
    3003      2008651 :       dump_generic_node (pp, op0, spc, flags, false);
    3004      2008651 :       if (op_prio (op0) < op_prio (node))
    3005         9530 :         pp_right_paren (pp);
    3006      2008651 :       pp_left_bracket (pp);
    3007      2008651 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3008      2008651 :       if (TREE_CODE (node) == ARRAY_RANGE_REF)
    3009          122 :         pp_string (pp, " ...");
    3010      2008651 :       pp_right_bracket (pp);
    3011              : 
    3012      2008651 :       op0 = array_ref_low_bound (node);
    3013      2008651 :       op1 = array_ref_element_size (node);
    3014              : 
    3015      2008651 :       if (!integer_zerop (op0)
    3016      1987732 :           || TREE_OPERAND (node, 2)
    3017      3996383 :           || TREE_OPERAND (node, 3))
    3018              :         {
    3019        20967 :           pp_string (pp, "{lb: ");
    3020        20967 :           dump_generic_node (pp, op0, spc, flags, false);
    3021        20967 :           pp_string (pp, " sz: ");
    3022        20967 :           dump_generic_node (pp, op1, spc, flags, false);
    3023        20967 :           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        55636 :     case CONSTRUCTOR:
    3042        55636 :       {
    3043        55636 :         unsigned HOST_WIDE_INT ix;
    3044        55636 :         tree field, val;
    3045        55636 :         bool is_struct_init = false;
    3046        55636 :         bool is_array_init = false;
    3047        55636 :         widest_int curidx;
    3048        55636 :         if (flags & TDF_GIMPLE)
    3049              :           {
    3050            0 :             pp_string (pp, "_Literal (");
    3051            0 :             dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    3052            0 :             pp_string (pp, ") ");
    3053              :           }
    3054        55636 :         pp_left_brace (pp);
    3055        55636 :         if (TREE_CLOBBER_P (node))
    3056              :           {
    3057        20336 :             pp_string (pp, "CLOBBER");
    3058        20336 :             switch (CLOBBER_KIND (node))
    3059              :               {
    3060            0 :               case CLOBBER_STORAGE_BEGIN:
    3061            0 :                 pp_string (pp, "(bos)");
    3062            0 :                 break;
    3063        13369 :               case CLOBBER_STORAGE_END:
    3064        13369 :                 pp_string (pp, "(eos)");
    3065        13369 :                 break;
    3066          652 :               case CLOBBER_OBJECT_BEGIN:
    3067          652 :                 pp_string (pp, "(bob)");
    3068          652 :                 break;
    3069          763 :               case CLOBBER_OBJECT_END:
    3070          763 :                 pp_string (pp, "(eob)");
    3071          763 :                 break;
    3072              :               default:
    3073              :                 break;
    3074              :               }
    3075              :           }
    3076        35300 :         else if (TREE_CODE (TREE_TYPE (node)) == RECORD_TYPE
    3077        35300 :                  || TREE_CODE (TREE_TYPE (node)) == UNION_TYPE)
    3078              :           is_struct_init = true;
    3079        25094 :         else if (TREE_CODE (TREE_TYPE (node)) == ARRAY_TYPE
    3080         6647 :                  && TYPE_DOMAIN (TREE_TYPE (node))
    3081         6647 :                  && TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node)))
    3082        31741 :                  && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node))))
    3083              :                     == INTEGER_CST)
    3084              :           {
    3085         6647 :             tree minv = TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node)));
    3086         6647 :             is_array_init = true;
    3087         6647 :             curidx = wi::to_widest (minv);
    3088              :           }
    3089       223549 :         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (node), ix, field, val)
    3090              :           {
    3091       167913 :             if (field)
    3092              :               {
    3093        78576 :                 if (is_struct_init)
    3094              :                   {
    3095        35212 :                     pp_dot (pp);
    3096        35212 :                     dump_generic_node (pp, field, spc, flags, false);
    3097        35212 :                     pp_equal (pp);
    3098              :                   }
    3099        43364 :                 else if (is_array_init
    3100        43364 :                          && (TREE_CODE (field) != INTEGER_CST
    3101        43364 :                              || curidx != wi::to_widest (field)))
    3102              :                   {
    3103           94 :                     pp_left_bracket (pp);
    3104           94 :                     if (TREE_CODE (field) == RANGE_EXPR)
    3105              :                       {
    3106           94 :                         dump_generic_node (pp, TREE_OPERAND (field, 0), spc,
    3107              :                                            flags, false);
    3108           94 :                         pp_string (pp, " ... ");
    3109           94 :                         dump_generic_node (pp, TREE_OPERAND (field, 1), spc,
    3110              :                                            flags, false);
    3111           94 :                         if (TREE_CODE (TREE_OPERAND (field, 1)) == INTEGER_CST)
    3112           94 :                           curidx = wi::to_widest (TREE_OPERAND (field, 1));
    3113              :                       }
    3114              :                     else
    3115            0 :                       dump_generic_node (pp, field, spc, flags, false);
    3116           94 :                     if (TREE_CODE (field) == INTEGER_CST)
    3117            0 :                       curidx = wi::to_widest (field);
    3118           94 :                     pp_string (pp, "]=");
    3119              :                   }
    3120              :               }
    3121       167913 :             if (is_array_init)
    3122        52904 :               curidx += 1;
    3123       167913 :             if (val && TREE_CODE (val) == ADDR_EXPR)
    3124         2610 :               if (TREE_CODE (TREE_OPERAND (val, 0)) == FUNCTION_DECL)
    3125          140 :                 val = TREE_OPERAND (val, 0);
    3126       167913 :             if (val && TREE_CODE (val) == FUNCTION_DECL)
    3127          140 :                 dump_decl_name (pp, val, flags);
    3128              :             else
    3129       167773 :                 dump_generic_node (pp, val, spc, flags, false);
    3130       335826 :             if (ix != CONSTRUCTOR_NELTS (node) - 1)
    3131              :               {
    3132       134575 :                 pp_comma (pp);
    3133       134575 :                 pp_space (pp);
    3134              :               }
    3135              :           }
    3136        55636 :         pp_right_brace (pp);
    3137        55636 :       }
    3138        55636 :       break;
    3139              : 
    3140          604 :     case COMPOUND_EXPR:
    3141          604 :       {
    3142          604 :         tree *tp;
    3143          604 :         if (flags & TDF_SLIM)
    3144              :           {
    3145            0 :             pp_string (pp, "<COMPOUND_EXPR>");
    3146            0 :             break;
    3147              :           }
    3148              : 
    3149          604 :         dump_generic_node (pp, TREE_OPERAND (node, 0),
    3150              :                            spc, flags, false);
    3151          604 :         pp_comma (pp);
    3152          604 :         pp_space (pp);
    3153              : 
    3154          604 :         for (tp = &TREE_OPERAND (node, 1);
    3155          627 :              TREE_CODE (*tp) == COMPOUND_EXPR;
    3156           23 :              tp = &TREE_OPERAND (*tp, 1))
    3157              :           {
    3158           23 :             dump_generic_node (pp, TREE_OPERAND (*tp, 0),
    3159              :                                spc, flags, false);
    3160           23 :             pp_comma (pp);
    3161           23 :             pp_space (pp);
    3162              :           }
    3163              : 
    3164          604 :         dump_generic_node (pp, *tp, spc, flags, false);
    3165              :       }
    3166          604 :       break;
    3167              : 
    3168        65090 :     case STATEMENT_LIST:
    3169        65090 :       {
    3170        65090 :         tree_stmt_iterator si;
    3171        65090 :         bool first = true;
    3172              : 
    3173        65090 :         if (flags & TDF_SLIM)
    3174              :           {
    3175            1 :             pp_string (pp, "<STATEMENT_LIST>");
    3176            1 :             break;
    3177              :           }
    3178              : 
    3179       426746 :         for (si = tsi_start (node); !tsi_end_p (si); tsi_next (&si))
    3180              :           {
    3181       361657 :             if (!first)
    3182       297302 :               newline_and_indent (pp, spc);
    3183              :             else
    3184              :               first = false;
    3185       361657 :             dump_generic_node (pp, tsi_stmt (si), spc, flags, true);
    3186              :           }
    3187              :       }
    3188        65089 :       break;
    3189              : 
    3190       206782 :     case MODIFY_EXPR:
    3191       206782 :     case INIT_EXPR:
    3192       206782 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags,
    3193              :                          false);
    3194       206782 :       pp_space (pp);
    3195       206782 :       pp_equal (pp);
    3196       206782 :       pp_space (pp);
    3197       206782 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags,
    3198              :                          false);
    3199       206782 :       break;
    3200              : 
    3201         2156 :     case TARGET_EXPR:
    3202         2156 :       pp_string (pp, "TARGET_EXPR <");
    3203         2156 :       dump_generic_node (pp, TARGET_EXPR_SLOT (node), spc, flags, false);
    3204         2156 :       pp_comma (pp);
    3205         2156 :       pp_space (pp);
    3206         2156 :       dump_generic_node (pp, TARGET_EXPR_INITIAL (node), spc, flags, false);
    3207         2156 :       pp_greater (pp);
    3208         2156 :       break;
    3209              : 
    3210        12225 :     case DECL_EXPR:
    3211        12225 :       print_declaration (pp, DECL_EXPR_DECL (node), spc, flags);
    3212        12225 :       is_stmt = false;
    3213        12225 :       break;
    3214              : 
    3215        48093 :     case COND_EXPR:
    3216        48093 :       if (TREE_TYPE (node) == NULL || TREE_TYPE (node) == void_type_node)
    3217              :         {
    3218        43432 :           pp_string (pp, "if (");
    3219        43432 :           dump_generic_node (pp, COND_EXPR_COND (node), spc, flags, false);
    3220        43432 :           pp_right_paren (pp);
    3221              :           /* The lowered cond_exprs should always be printed in full.  */
    3222        43432 :           if (COND_EXPR_THEN (node)
    3223        43432 :               && (IS_EMPTY_STMT (COND_EXPR_THEN (node))
    3224        42558 :                   || TREE_CODE (COND_EXPR_THEN (node)) == GOTO_EXPR)
    3225        15702 :               && COND_EXPR_ELSE (node)
    3226        59133 :               && (IS_EMPTY_STMT (COND_EXPR_ELSE (node))
    3227         2382 :                   || TREE_CODE (COND_EXPR_ELSE (node)) == GOTO_EXPR))
    3228              :             {
    3229        14813 :               pp_space (pp);
    3230        14813 :               dump_generic_node (pp, COND_EXPR_THEN (node),
    3231              :                                  0, flags, true);
    3232        14813 :               if (!IS_EMPTY_STMT (COND_EXPR_ELSE (node)))
    3233              :                 {
    3234         1494 :                   pp_string (pp, " else ");
    3235         1494 :                   dump_generic_node (pp, COND_EXPR_ELSE (node),
    3236              :                                      0, flags, true);
    3237              :                 }
    3238              :             }
    3239        28619 :           else if (!(flags & TDF_SLIM))
    3240              :             {
    3241              :               /* Output COND_EXPR_THEN.  */
    3242        28619 :               if (COND_EXPR_THEN (node))
    3243              :                 {
    3244        28619 :                   newline_and_indent (pp, spc+2);
    3245        28619 :                   pp_left_brace (pp);
    3246        28619 :                   newline_and_indent (pp, spc+4);
    3247        28619 :                   dump_generic_node (pp, COND_EXPR_THEN (node), spc+4,
    3248              :                                      flags, true);
    3249        28619 :                   newline_and_indent (pp, spc+2);
    3250        28619 :                   pp_right_brace (pp);
    3251              :                 }
    3252              : 
    3253              :               /* Output COND_EXPR_ELSE.  */
    3254        28619 :               if (COND_EXPR_ELSE (node)
    3255        28619 :                   && !IS_EMPTY_STMT (COND_EXPR_ELSE (node)))
    3256              :                 {
    3257         7986 :                   newline_and_indent (pp, spc);
    3258         7986 :                   pp_string (pp, "else");
    3259         7986 :                   newline_and_indent (pp, spc+2);
    3260         7986 :                   pp_left_brace (pp);
    3261         7986 :                   newline_and_indent (pp, spc+4);
    3262         7986 :                   dump_generic_node (pp, COND_EXPR_ELSE (node), spc+4,
    3263              :                                      flags, true);
    3264         7986 :                   newline_and_indent (pp, spc+2);
    3265         7986 :                   pp_right_brace (pp);
    3266              :                 }
    3267              :             }
    3268              :           is_expr = false;
    3269              :         }
    3270              :       else
    3271              :         {
    3272         4661 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3273         4661 :           pp_space (pp);
    3274         4661 :           pp_question (pp);
    3275         4661 :           pp_space (pp);
    3276         4661 :           dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3277         4661 :           pp_space (pp);
    3278         4661 :           pp_colon (pp);
    3279         4661 :           pp_space (pp);
    3280         4661 :           dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3281              :         }
    3282              :       break;
    3283              : 
    3284        42491 :     case BIND_EXPR:
    3285        42491 :       pp_left_brace (pp);
    3286        42491 :       if (!(flags & TDF_SLIM))
    3287              :         {
    3288        42491 :           if (BIND_EXPR_VARS (node))
    3289              :             {
    3290        34794 :               pp_newline (pp);
    3291              : 
    3292       148148 :               for (op0 = BIND_EXPR_VARS (node); op0; op0 = DECL_CHAIN (op0))
    3293              :                 {
    3294       113354 :                   print_declaration (pp, op0, spc+2, flags);
    3295       113354 :                   pp_newline (pp);
    3296              :                 }
    3297              :             }
    3298              : 
    3299        42491 :           newline_and_indent (pp, spc+2);
    3300        42491 :           dump_generic_node (pp, BIND_EXPR_BODY (node), spc+2, flags, true);
    3301        42491 :           newline_and_indent (pp, spc);
    3302        42491 :           pp_right_brace (pp);
    3303              :         }
    3304              :       is_expr = false;
    3305              :       break;
    3306              : 
    3307        65843 :     case CALL_EXPR:
    3308        65843 :       if (CALL_EXPR_FN (node) != NULL_TREE)
    3309        65696 :         print_call_name (pp, CALL_EXPR_FN (node), flags);
    3310              :       else
    3311              :         {
    3312          147 :           pp_dot (pp);
    3313          147 :           pp_string (pp, internal_fn_name (CALL_EXPR_IFN (node)));
    3314              :         }
    3315              : 
    3316              :       /* Print parameters.  */
    3317        65843 :       pp_space (pp);
    3318        65843 :       pp_left_paren (pp);
    3319        65843 :       {
    3320        65843 :         tree arg;
    3321        65843 :         call_expr_arg_iterator iter;
    3322       252929 :         FOR_EACH_CALL_EXPR_ARG (arg, iter, node)
    3323              :           {
    3324       121243 :             dump_generic_node (pp, arg, spc, flags, false);
    3325       121243 :             if (more_call_expr_args_p (&iter))
    3326              :               {
    3327        62664 :                 pp_comma (pp);
    3328        62664 :                 pp_space (pp);
    3329              :               }
    3330              :           }
    3331              :       }
    3332        65843 :       if (CALL_EXPR_VA_ARG_PACK (node))
    3333              :         {
    3334            0 :           if (call_expr_nargs (node) > 0)
    3335              :             {
    3336            0 :               pp_comma (pp);
    3337            0 :               pp_space (pp);
    3338              :             }
    3339            0 :           pp_string (pp, "__builtin_va_arg_pack ()");
    3340              :         }
    3341        65843 :       pp_right_paren (pp);
    3342              : 
    3343        65843 :       op1 = CALL_EXPR_STATIC_CHAIN (node);
    3344        65843 :       if (op1)
    3345              :         {
    3346            0 :           pp_string (pp, " [static-chain: ");
    3347            0 :           dump_generic_node (pp, op1, spc, flags, false);
    3348            0 :           pp_right_bracket (pp);
    3349              :         }
    3350              : 
    3351        65843 :       if (CALL_EXPR_RETURN_SLOT_OPT (node))
    3352            0 :         pp_string (pp, " [return slot optimization]");
    3353        65843 :       if (CALL_EXPR_TAILCALL (node))
    3354            0 :         pp_string (pp, " [tail call]");
    3355        65843 :       if (CALL_EXPR_MUST_TAIL_CALL (node))
    3356            0 :         pp_string (pp, " [must tail call]");
    3357              :       break;
    3358              : 
    3359            0 :     case WITH_CLEANUP_EXPR:
    3360            0 :       NIY;
    3361            0 :       break;
    3362              : 
    3363        16820 :     case CLEANUP_POINT_EXPR:
    3364        16820 :       pp_string (pp, "<<cleanup_point ");
    3365        16820 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3366        16820 :       pp_string (pp, ">>");
    3367        16820 :       break;
    3368              : 
    3369            0 :     case PLACEHOLDER_EXPR:
    3370            0 :       pp_string (pp, "<PLACEHOLDER_EXPR ");
    3371            0 :       dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    3372            0 :       pp_greater (pp);
    3373            0 :       break;
    3374              : 
    3375              :       /* Binary arithmetic and logic expressions.  */
    3376       252844 :     case WIDEN_SUM_EXPR:
    3377       252844 :     case WIDEN_MULT_EXPR:
    3378       252844 :     case MULT_EXPR:
    3379       252844 :     case MULT_HIGHPART_EXPR:
    3380       252844 :     case PLUS_EXPR:
    3381       252844 :     case POINTER_PLUS_EXPR:
    3382       252844 :     case POINTER_DIFF_EXPR:
    3383       252844 :     case MINUS_EXPR:
    3384       252844 :     case TRUNC_DIV_EXPR:
    3385       252844 :     case CEIL_DIV_EXPR:
    3386       252844 :     case FLOOR_DIV_EXPR:
    3387       252844 :     case ROUND_DIV_EXPR:
    3388       252844 :     case TRUNC_MOD_EXPR:
    3389       252844 :     case CEIL_MOD_EXPR:
    3390       252844 :     case FLOOR_MOD_EXPR:
    3391       252844 :     case ROUND_MOD_EXPR:
    3392       252844 :     case RDIV_EXPR:
    3393       252844 :     case EXACT_DIV_EXPR:
    3394       252844 :     case LSHIFT_EXPR:
    3395       252844 :     case RSHIFT_EXPR:
    3396       252844 :     case LROTATE_EXPR:
    3397       252844 :     case RROTATE_EXPR:
    3398       252844 :     case WIDEN_LSHIFT_EXPR:
    3399       252844 :     case BIT_IOR_EXPR:
    3400       252844 :     case BIT_XOR_EXPR:
    3401       252844 :     case BIT_AND_EXPR:
    3402       252844 :     case TRUTH_ANDIF_EXPR:
    3403       252844 :     case TRUTH_ORIF_EXPR:
    3404       252844 :     case TRUTH_AND_EXPR:
    3405       252844 :     case TRUTH_OR_EXPR:
    3406       252844 :     case TRUTH_XOR_EXPR:
    3407       252844 :     case LT_EXPR:
    3408       252844 :     case LE_EXPR:
    3409       252844 :     case GT_EXPR:
    3410       252844 :     case GE_EXPR:
    3411       252844 :     case EQ_EXPR:
    3412       252844 :     case NE_EXPR:
    3413       252844 :     case UNLT_EXPR:
    3414       252844 :     case UNLE_EXPR:
    3415       252844 :     case UNGT_EXPR:
    3416       252844 :     case UNGE_EXPR:
    3417       252844 :     case UNEQ_EXPR:
    3418       252844 :     case LTGT_EXPR:
    3419       252844 :     case ORDERED_EXPR:
    3420       252844 :     case UNORDERED_EXPR:
    3421       252844 :       {
    3422       505688 :         const char *op = op_symbol (node);
    3423       252844 :         op0 = TREE_OPERAND (node, 0);
    3424       252844 :         op1 = TREE_OPERAND (node, 1);
    3425              : 
    3426              :         /* When the operands are expressions with less priority,
    3427              :            keep semantics of the tree representation.  */
    3428       252844 :         if (op_prio (op0) <= op_prio (node))
    3429              :           {
    3430        34609 :             pp_left_paren (pp);
    3431        34609 :             dump_generic_node (pp, op0, spc, flags, false);
    3432        34609 :             pp_right_paren (pp);
    3433              :           }
    3434              :         else
    3435       218235 :           dump_generic_node (pp, op0, spc, flags, false);
    3436              : 
    3437       252844 :         pp_space (pp);
    3438       252844 :         pp_string (pp, op);
    3439       252844 :         pp_space (pp);
    3440              : 
    3441              :         /* When the operands are expressions with less priority,
    3442              :            keep semantics of the tree representation.  */
    3443       252844 :         if (op_prio (op1) <= op_prio (node))
    3444              :           {
    3445         3108 :             pp_left_paren (pp);
    3446         3108 :             dump_generic_node (pp, op1, spc, flags, false);
    3447         3108 :             pp_right_paren (pp);
    3448              :           }
    3449              :         else
    3450       249736 :           dump_generic_node (pp, op1, spc, flags, false);
    3451              :       }
    3452              :       break;
    3453              : 
    3454              :       /* Unary arithmetic and logic expressions.  */
    3455       326049 :     case ADDR_EXPR:
    3456       326049 :       if (flags & TDF_GIMPLE_VAL)
    3457              :         {
    3458            0 :           pp_string (pp, "_Literal (");
    3459            0 :           dump_generic_node (pp, TREE_TYPE (node), spc,
    3460              :                              flags & ~TDF_GIMPLE_VAL, false);
    3461            0 :           pp_character (pp, ')');
    3462              :         }
    3463              :       /* Fallthru.  */
    3464       352986 :     case NEGATE_EXPR:
    3465       352986 :     case BIT_NOT_EXPR:
    3466       352986 :     case TRUTH_NOT_EXPR:
    3467       352986 :     case PREDECREMENT_EXPR:
    3468       352986 :     case PREINCREMENT_EXPR:
    3469       352986 :     case INDIRECT_REF:
    3470       352986 :       if (!(flags & TDF_GIMPLE)
    3471       352986 :           && TREE_CODE (node) == ADDR_EXPR
    3472       679035 :           && (TREE_CODE (TREE_OPERAND (node, 0)) == STRING_CST
    3473       319257 :               || TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL))
    3474              :         /* Do not output '&' for strings and function pointers when not
    3475              :            dumping GIMPLE FE syntax.  */
    3476              :         ;
    3477              :       else
    3478       336413 :         pp_string (pp, op_symbol (node));
    3479              : 
    3480       352986 :       if (op_prio (TREE_OPERAND (node, 0)) < op_prio (node))
    3481              :         {
    3482         4909 :           pp_left_paren (pp);
    3483         4909 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3484         4909 :           pp_right_paren (pp);
    3485              :         }
    3486              :       else
    3487       348077 :         dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3488              :       break;
    3489              : 
    3490         1523 :     case POSTDECREMENT_EXPR:
    3491         1523 :     case POSTINCREMENT_EXPR:
    3492         1523 :       if (op_prio (TREE_OPERAND (node, 0)) < op_prio (node))
    3493              :         {
    3494            0 :           pp_left_paren (pp);
    3495            0 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3496            0 :           pp_right_paren (pp);
    3497              :         }
    3498              :       else
    3499         1523 :         dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3500         3046 :       pp_string (pp, op_symbol (node));
    3501         1523 :       break;
    3502              : 
    3503          266 :     case MIN_EXPR:
    3504          266 :       pp_string (pp, "MIN_EXPR <");
    3505          266 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3506          266 :       pp_string (pp, ", ");
    3507          266 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3508          266 :       pp_greater (pp);
    3509          266 :       break;
    3510              : 
    3511         5999 :     case MAX_EXPR:
    3512         5999 :       pp_string (pp, "MAX_EXPR <");
    3513         5999 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3514         5999 :       pp_string (pp, ", ");
    3515         5999 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3516         5999 :       pp_greater (pp);
    3517         5999 :       break;
    3518              : 
    3519          511 :     case ABS_EXPR:
    3520          511 :       pp_string (pp, "ABS_EXPR <");
    3521          511 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3522          511 :       pp_greater (pp);
    3523          511 :       break;
    3524              : 
    3525           24 :     case ABSU_EXPR:
    3526           24 :       pp_string (pp, "ABSU_EXPR <");
    3527           24 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3528           24 :       pp_greater (pp);
    3529           24 :       break;
    3530              : 
    3531            0 :     case RANGE_EXPR:
    3532            0 :       NIY;
    3533            0 :       break;
    3534              : 
    3535       177323 :     case ADDR_SPACE_CONVERT_EXPR:
    3536       177323 :     case FIXED_CONVERT_EXPR:
    3537       177323 :     case FIX_TRUNC_EXPR:
    3538       177323 :     case FLOAT_EXPR:
    3539       177323 :     CASE_CONVERT:
    3540       177323 :       type = TREE_TYPE (node);
    3541       177323 :       op0 = TREE_OPERAND (node, 0);
    3542       177323 :       if (type != TREE_TYPE (op0))
    3543              :         {
    3544       177301 :           pp_left_paren (pp);
    3545       177301 :           dump_generic_node (pp, type, spc, flags, false);
    3546       177301 :           pp_string (pp, ") ");
    3547              :         }
    3548       177323 :       if (op_prio (op0) < op_prio (node))
    3549        38735 :         pp_left_paren (pp);
    3550       177323 :       dump_generic_node (pp, op0, spc, flags, false);
    3551       177323 :       if (op_prio (op0) < op_prio (node))
    3552        38735 :         pp_right_paren (pp);
    3553              :       break;
    3554              : 
    3555        38285 :     case VIEW_CONVERT_EXPR:
    3556        38285 :       if (flags & TDF_GIMPLE)
    3557            0 :         pp_string (pp, "__VIEW_CONVERT <");
    3558              :       else
    3559        38285 :         pp_string (pp, "VIEW_CONVERT_EXPR<");
    3560        38285 :       dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    3561        38285 :       pp_string (pp, ">(");
    3562        38285 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3563        38285 :       pp_right_paren (pp);
    3564        38285 :       break;
    3565              : 
    3566           14 :     case PAREN_EXPR:
    3567           14 :       pp_string (pp, "((");
    3568           14 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3569           14 :       pp_string (pp, "))");
    3570           14 :       break;
    3571              : 
    3572        16564 :     case NON_LVALUE_EXPR:
    3573        16564 :       pp_string (pp, "NON_LVALUE_EXPR <");
    3574        16564 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3575        16564 :       pp_greater (pp);
    3576        16564 :       break;
    3577              : 
    3578         1582 :     case SAVE_EXPR:
    3579         1582 :       pp_string (pp, "SAVE_EXPR <");
    3580         1582 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3581         1582 :       pp_greater (pp);
    3582         1582 :       break;
    3583              : 
    3584           20 :     case COMPLEX_EXPR:
    3585           20 :       pp_string (pp, "COMPLEX_EXPR <");
    3586           20 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3587           20 :       pp_string (pp, ", ");
    3588           20 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3589           20 :       pp_greater (pp);
    3590           20 :       break;
    3591              : 
    3592            0 :     case CONJ_EXPR:
    3593            0 :       pp_string (pp, "CONJ_EXPR <");
    3594            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3595            0 :       pp_greater (pp);
    3596            0 :       break;
    3597              : 
    3598        50519 :     case REALPART_EXPR:
    3599        50519 :       if (flags & TDF_GIMPLE)
    3600              :         {
    3601            1 :           pp_string (pp, "__real ");
    3602            1 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3603              :         }
    3604              :       else
    3605              :         {
    3606        50518 :           pp_string (pp, "REALPART_EXPR <");
    3607        50518 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3608        50518 :           pp_greater (pp);
    3609              :         }
    3610              :       break;
    3611              : 
    3612        40762 :     case IMAGPART_EXPR:
    3613        40762 :       if (flags & TDF_GIMPLE)
    3614              :         {
    3615            1 :           pp_string (pp, "__imag ");
    3616            1 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3617              :         }
    3618              :       else
    3619              :         {
    3620        40761 :           pp_string (pp, "IMAGPART_EXPR <");
    3621        40761 :           dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3622        40761 :           pp_greater (pp);
    3623              :         }
    3624              :       break;
    3625              : 
    3626            0 :     case VA_ARG_EXPR:
    3627            0 :       pp_string (pp, "VA_ARG_EXPR <");
    3628            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3629            0 :       pp_greater (pp);
    3630            0 :       break;
    3631              : 
    3632         1609 :     case TRY_FINALLY_EXPR:
    3633         1609 :     case TRY_CATCH_EXPR:
    3634         1609 :       pp_string (pp, "try");
    3635         1609 :       newline_and_indent (pp, spc+2);
    3636         1609 :       pp_left_brace (pp);
    3637         1609 :       newline_and_indent (pp, spc+4);
    3638         1609 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc+4, flags, true);
    3639         1609 :       newline_and_indent (pp, spc+2);
    3640         1609 :       pp_right_brace (pp);
    3641         1609 :       newline_and_indent (pp, spc);
    3642         1609 :       if (TREE_CODE (node) == TRY_CATCH_EXPR)
    3643              :         {
    3644           79 :           node = TREE_OPERAND (node, 1);
    3645           79 :           pp_string (pp, "catch");
    3646              :         }
    3647              :       else
    3648              :         {
    3649         1530 :           gcc_assert (TREE_CODE (node) == TRY_FINALLY_EXPR);
    3650         1530 :           node = TREE_OPERAND (node, 1);
    3651         1530 :           pp_string (pp, "finally");
    3652         1530 :           if (TREE_CODE (node) == EH_ELSE_EXPR)
    3653              :             {
    3654            0 :               newline_and_indent (pp, spc+2);
    3655            0 :               pp_left_brace (pp);
    3656            0 :               newline_and_indent (pp, spc+4);
    3657            0 :               dump_generic_node (pp, TREE_OPERAND (node, 0), spc+4,
    3658              :                                  flags, true);
    3659            0 :               newline_and_indent (pp, spc+2);
    3660            0 :               pp_right_brace (pp);
    3661            0 :               newline_and_indent (pp, spc);
    3662            0 :               node = TREE_OPERAND (node, 1);
    3663            0 :               pp_string (pp, "else");
    3664              :             }
    3665              :         }
    3666         1609 :       newline_and_indent (pp, spc+2);
    3667         1609 :       pp_left_brace (pp);
    3668         1609 :       newline_and_indent (pp, spc+4);
    3669         1609 :       dump_generic_node (pp, node, spc+4, flags, true);
    3670         1609 :       newline_and_indent (pp, spc+2);
    3671         1609 :       pp_right_brace (pp);
    3672         1609 :       is_expr = false;
    3673         1609 :       break;
    3674              : 
    3675            0 :     case CATCH_EXPR:
    3676            0 :       pp_string (pp, "catch (");
    3677            0 :       dump_generic_node (pp, CATCH_TYPES (node), spc+2, flags, false);
    3678            0 :       pp_right_paren (pp);
    3679            0 :       newline_and_indent (pp, spc+2);
    3680            0 :       pp_left_brace (pp);
    3681            0 :       newline_and_indent (pp, spc+4);
    3682            0 :       dump_generic_node (pp, CATCH_BODY (node), spc+4, flags, true);
    3683            0 :       newline_and_indent (pp, spc+2);
    3684            0 :       pp_right_brace (pp);
    3685            0 :       is_expr = false;
    3686            0 :       break;
    3687              : 
    3688            0 :     case EH_FILTER_EXPR:
    3689            0 :       pp_string (pp, "<<<eh_filter (");
    3690            0 :       dump_generic_node (pp, EH_FILTER_TYPES (node), spc+2, flags, false);
    3691            0 :       pp_string (pp, ")>>>");
    3692            0 :       newline_and_indent (pp, spc+2);
    3693            0 :       pp_left_brace (pp);
    3694            0 :       newline_and_indent (pp, spc+4);
    3695            0 :       dump_generic_node (pp, EH_FILTER_FAILURE (node), spc+4, flags, true);
    3696            0 :       newline_and_indent (pp, spc+2);
    3697            0 :       pp_right_brace (pp);
    3698            0 :       is_expr = false;
    3699            0 :       break;
    3700              : 
    3701        32306 :     case LABEL_EXPR:
    3702        32306 :       op0 = TREE_OPERAND (node, 0);
    3703              :       /* If this is for break or continue, don't bother printing it.  */
    3704        32306 :       if (DECL_NAME (op0))
    3705              :         {
    3706        27793 :           const char *name = IDENTIFIER_POINTER (DECL_NAME (op0));
    3707        27793 :           if (strcmp (name, "break") == 0
    3708        27793 :               || strcmp (name, "continue") == 0)
    3709              :             break;
    3710              :         }
    3711        32306 :       dump_generic_node (pp, op0, spc, flags, false);
    3712        32306 :       pp_colon (pp);
    3713        32306 :       if (DECL_NONLOCAL (op0))
    3714            0 :         pp_string (pp, " [non-local]");
    3715              :       break;
    3716              : 
    3717        10417 :     case LOOP_EXPR:
    3718        10417 :       pp_string (pp, "while (1)");
    3719        10417 :       if (!(flags & TDF_SLIM))
    3720              :         {
    3721        10417 :           newline_and_indent (pp, spc+2);
    3722        10417 :           pp_left_brace (pp);
    3723        10417 :           newline_and_indent (pp, spc+4);
    3724        10417 :           dump_generic_node (pp, LOOP_EXPR_BODY (node), spc+4, flags, true);
    3725        10417 :           newline_and_indent (pp, spc+2);
    3726        10417 :           pp_right_brace (pp);
    3727              :         }
    3728              :       is_expr = false;
    3729              :       break;
    3730              : 
    3731           26 :     case PREDICT_EXPR:
    3732           26 :       pp_string (pp, "// predicted ");
    3733           26 :       if (PREDICT_EXPR_OUTCOME (node))
    3734            7 :         pp_string (pp, "likely by ");
    3735              :       else
    3736           19 :         pp_string (pp, "unlikely by ");
    3737           26 :       pp_string (pp, predictor_name (PREDICT_EXPR_PREDICTOR (node)));
    3738           26 :       pp_string (pp, " predictor.");
    3739           26 :       break;
    3740              : 
    3741           52 :     case ANNOTATE_EXPR:
    3742           52 :       pp_string (pp, "ANNOTATE_EXPR <");
    3743           52 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3744           52 :       switch ((enum annot_expr_kind) TREE_INT_CST_LOW (TREE_OPERAND (node, 1)))
    3745              :         {
    3746           44 :         case annot_expr_ivdep_kind:
    3747           44 :           pp_string (pp, ", ivdep");
    3748           44 :           break;
    3749            2 :         case annot_expr_unroll_kind:
    3750            2 :           {
    3751            2 :             pp_string (pp, ", unroll ");
    3752            2 :             pp_decimal_int (pp,
    3753              :                             (int) TREE_INT_CST_LOW (TREE_OPERAND (node, 2)));
    3754            2 :             break;
    3755              :           }
    3756            3 :         case annot_expr_no_vector_kind:
    3757            3 :           pp_string (pp, ", no-vector");
    3758            3 :           break;
    3759            3 :         case annot_expr_vector_kind:
    3760            3 :           pp_string (pp, ", vector");
    3761            3 :           break;
    3762            0 :         case annot_expr_parallel_kind:
    3763            0 :           pp_string (pp, ", parallel");
    3764            0 :           break;
    3765            0 :         case annot_expr_maybe_infinite_kind:
    3766            0 :           pp_string (pp, ", maybe-infinite");
    3767            0 :           break;
    3768            0 :         default:
    3769            0 :           gcc_unreachable ();
    3770              :         }
    3771           52 :       pp_greater (pp);
    3772           52 :       break;
    3773              : 
    3774         9643 :     case RETURN_EXPR:
    3775         9643 :       pp_string (pp, "return");
    3776         9643 :       op0 = TREE_OPERAND (node, 0);
    3777         9643 :       if (op0)
    3778              :         {
    3779         9486 :           pp_space (pp);
    3780         9486 :           if (TREE_CODE (op0) == MODIFY_EXPR)
    3781         2746 :             dump_generic_node (pp, TREE_OPERAND (op0, 1),
    3782              :                                spc, flags, false);
    3783              :           else
    3784         6740 :             dump_generic_node (pp, op0, spc, flags, false);
    3785              :         }
    3786              :       break;
    3787              : 
    3788            0 :     case EXIT_EXPR:
    3789            0 :       pp_string (pp, "if (");
    3790            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3791            0 :       pp_string (pp, ") break");
    3792            0 :       break;
    3793              : 
    3794           66 :     case SWITCH_EXPR:
    3795           66 :       pp_string (pp, "switch (");
    3796           66 :       dump_generic_node (pp, SWITCH_COND (node), spc, flags, false);
    3797           66 :       pp_right_paren (pp);
    3798           66 :       if (!(flags & TDF_SLIM))
    3799              :         {
    3800           66 :           newline_and_indent (pp, spc+2);
    3801           66 :           pp_left_brace (pp);
    3802           66 :           if (SWITCH_BODY (node))
    3803              :             {
    3804           66 :               newline_and_indent (pp, spc+4);
    3805           66 :               dump_generic_node (pp, SWITCH_BODY (node), spc+4, flags,
    3806              :                                  true);
    3807              :             }
    3808           66 :           newline_and_indent (pp, spc+2);
    3809           66 :           pp_right_brace (pp);
    3810              :         }
    3811              :       is_expr = false;
    3812              :       break;
    3813              : 
    3814        22285 :     case GOTO_EXPR:
    3815        22285 :       op0 = GOTO_DESTINATION (node);
    3816        22285 :       if (TREE_CODE (op0) != SSA_NAME && DECL_P (op0) && DECL_NAME (op0))
    3817              :         {
    3818        17500 :           const char *name = IDENTIFIER_POINTER (DECL_NAME (op0));
    3819        17500 :           if (strcmp (name, "break") == 0
    3820        17500 :               || strcmp (name, "continue") == 0)
    3821              :             {
    3822            0 :               pp_string (pp, name);
    3823            0 :               break;
    3824              :             }
    3825              :         }
    3826        22285 :       pp_string (pp, "goto ");
    3827        22285 :       dump_generic_node (pp, op0, spc, flags, false);
    3828        22285 :       break;
    3829              : 
    3830          292 :     case ASM_EXPR:
    3831          292 :       pp_string (pp, "__asm__");
    3832          292 :       if (ASM_VOLATILE_P (node))
    3833          292 :         pp_string (pp, " __volatile__");
    3834          292 :       pp_left_paren (pp);
    3835          292 :       dump_generic_node (pp, ASM_STRING (node), spc, flags, false);
    3836          292 :       pp_colon (pp);
    3837          292 :       dump_generic_node (pp, ASM_OUTPUTS (node), spc, flags, false);
    3838          292 :       pp_colon (pp);
    3839          292 :       dump_generic_node (pp, ASM_INPUTS (node), spc, flags, false);
    3840          292 :       if (ASM_CLOBBERS (node))
    3841              :         {
    3842          292 :           pp_colon (pp);
    3843          292 :           dump_generic_node (pp, ASM_CLOBBERS (node), spc, flags, false);
    3844              :         }
    3845          292 :       pp_right_paren (pp);
    3846          292 :       break;
    3847              : 
    3848         8945 :     case CASE_LABEL_EXPR:
    3849         8945 :       if (CASE_LOW (node) && CASE_HIGH (node))
    3850              :         {
    3851          121 :           pp_string (pp, "case ");
    3852          121 :           dump_generic_node (pp, CASE_LOW (node), spc, flags, false);
    3853          121 :           pp_string (pp, " ... ");
    3854          121 :           dump_generic_node (pp, CASE_HIGH (node), spc, flags, false);
    3855              :         }
    3856         8824 :       else if (CASE_LOW (node))
    3857              :         {
    3858         7289 :           pp_string (pp, "case ");
    3859         7289 :           dump_generic_node (pp, CASE_LOW (node), spc, flags, false);
    3860              :         }
    3861              :       else
    3862         1535 :         pp_string (pp, "default");
    3863         8945 :       pp_colon (pp);
    3864         8945 :       break;
    3865              : 
    3866         1782 :     case OBJ_TYPE_REF:
    3867         1782 :       pp_string (pp, "OBJ_TYPE_REF(");
    3868         1782 :       dump_generic_node (pp, OBJ_TYPE_REF_EXPR (node), spc, flags, false);
    3869         1782 :       pp_semicolon (pp);
    3870              :       /* We omit the class type for -fcompare-debug because we may
    3871              :          drop TYPE_BINFO early depending on debug info, and then
    3872              :          virtual_method_call_p would return false, whereas when
    3873              :          TYPE_BINFO is preserved it may still return true and then
    3874              :          we'd print the class type.  Compare tree and rtl dumps for
    3875              :          libstdc++-prettyprinters/shared_ptr.cc with and without -g,
    3876              :          for example, at occurrences of OBJ_TYPE_REF.  */
    3877         1782 :       if (!(flags & (TDF_SLIM | TDF_COMPARE_DEBUG))
    3878         1782 :           && virtual_method_call_p (node, true))
    3879              :         {
    3880         1479 :           pp_string (pp, "(");
    3881         1479 :           dump_generic_node (pp, obj_type_ref_class (node, true),
    3882              :                              spc, flags, false);
    3883         1479 :           pp_string (pp, ")");
    3884              :         }
    3885         1782 :       dump_generic_node (pp, OBJ_TYPE_REF_OBJECT (node), spc, flags, false);
    3886         1782 :       pp_arrow (pp);
    3887         1782 :       dump_generic_node (pp, OBJ_TYPE_REF_TOKEN (node), spc, flags, false);
    3888         1782 :       pp_right_paren (pp);
    3889         1782 :       break;
    3890              : 
    3891     16067993 :     case SSA_NAME:
    3892     16067993 :       if (SSA_NAME_IDENTIFIER (node))
    3893              :         {
    3894      8855346 :           if ((flags & TDF_NOUID)
    3895         7609 :               && SSA_NAME_VAR (node)
    3896      8860080 :               && DECL_NAMELESS (SSA_NAME_VAR (node)))
    3897         1268 :             dump_fancy_name (pp, SSA_NAME_IDENTIFIER (node));
    3898      8854078 :           else if (! (flags & TDF_GIMPLE)
    3899      8854078 :                    || SSA_NAME_VAR (node))
    3900      8854078 :             dump_generic_node (pp, SSA_NAME_IDENTIFIER (node),
    3901              :                                spc, flags, false);
    3902              :         }
    3903     16067993 :       pp_underscore (pp);
    3904     16067993 :       pp_decimal_int (pp, SSA_NAME_VERSION (node));
    3905     16067993 :       if (SSA_NAME_IS_DEFAULT_DEF (node))
    3906       695879 :         pp_string (pp, "(D)");
    3907     16067993 :       if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (node))
    3908          366 :         pp_string (pp, "(ab)");
    3909              :       break;
    3910              : 
    3911            0 :     case WITH_SIZE_EXPR:
    3912            0 :       pp_string (pp, "WITH_SIZE_EXPR <");
    3913            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3914            0 :       pp_string (pp, ", ");
    3915            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3916            0 :       pp_greater (pp);
    3917            0 :       break;
    3918              : 
    3919            0 :     case SCEV_KNOWN:
    3920            0 :       pp_string (pp, "scev_known");
    3921            0 :       break;
    3922              : 
    3923         4785 :     case SCEV_NOT_KNOWN:
    3924         4785 :       pp_string (pp, "scev_not_known");
    3925         4785 :       break;
    3926              : 
    3927       148054 :     case POLYNOMIAL_CHREC:
    3928       148054 :       pp_left_brace (pp);
    3929       148054 :       dump_generic_node (pp, CHREC_LEFT (node), spc, flags, false);
    3930       148054 :       pp_string (pp, ", +, ");
    3931       148054 :       dump_generic_node (pp, CHREC_RIGHT (node), spc, flags, false);
    3932       191547 :       pp_string (pp, !CHREC_NOWRAP (node) ? "}_" : "}<nw>_");
    3933       148054 :       pp_scalar (pp, "%u", CHREC_VARIABLE (node));
    3934       148054 :       is_stmt = false;
    3935       148054 :       break;
    3936              : 
    3937            0 :     case REALIGN_LOAD_EXPR:
    3938            0 :       pp_string (pp, "REALIGN_LOAD <");
    3939            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3940            0 :       pp_string (pp, ", ");
    3941            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3942            0 :       pp_string (pp, ", ");
    3943            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3944            0 :       pp_greater (pp);
    3945            0 :       break;
    3946              : 
    3947            0 :     case VEC_COND_EXPR:
    3948            0 :       pp_string (pp, " VEC_COND_EXPR < ");
    3949            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3950            0 :       pp_string (pp, " , ");
    3951            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3952            0 :       pp_string (pp, " , ");
    3953            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3954            0 :       pp_string (pp, " > ");
    3955            0 :       break;
    3956              : 
    3957            0 :     case VEC_PERM_EXPR:
    3958            0 :       pp_string (pp, " VEC_PERM_EXPR < ");
    3959            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3960            0 :       pp_string (pp, " , ");
    3961            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3962            0 :       pp_string (pp, " , ");
    3963            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3964            0 :       pp_string (pp, " > ");
    3965            0 :       break;
    3966              : 
    3967            0 :     case DOT_PROD_EXPR:
    3968            0 :       pp_string (pp, " DOT_PROD_EXPR < ");
    3969            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3970            0 :       pp_string (pp, ", ");
    3971            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3972            0 :       pp_string (pp, ", ");
    3973            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3974            0 :       pp_string (pp, " > ");
    3975            0 :       break;
    3976              : 
    3977            0 :     case WIDEN_MULT_PLUS_EXPR:
    3978            0 :       pp_string (pp, " WIDEN_MULT_PLUS_EXPR < ");
    3979            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3980            0 :       pp_string (pp, ", ");
    3981            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3982            0 :       pp_string (pp, ", ");
    3983            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3984            0 :       pp_string (pp, " > ");
    3985            0 :       break;
    3986              : 
    3987            0 :     case WIDEN_MULT_MINUS_EXPR:
    3988            0 :       pp_string (pp, " WIDEN_MULT_MINUS_EXPR < ");
    3989            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    3990            0 :       pp_string (pp, ", ");
    3991            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    3992            0 :       pp_string (pp, ", ");
    3993            0 :       dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false);
    3994            0 :       pp_string (pp, " > ");
    3995            0 :       break;
    3996              : 
    3997          117 :     case OACC_PARALLEL:
    3998          117 :       pp_string (pp, "#pragma acc parallel");
    3999          117 :       goto dump_omp_clauses_body;
    4000              : 
    4001           57 :     case OACC_KERNELS:
    4002           57 :       pp_string (pp, "#pragma acc kernels");
    4003           57 :       goto dump_omp_clauses_body;
    4004              : 
    4005           58 :     case OACC_SERIAL:
    4006           58 :       pp_string (pp, "#pragma acc serial");
    4007           58 :       goto dump_omp_clauses_body;
    4008              : 
    4009           21 :     case OACC_DATA:
    4010           21 :       pp_string (pp, "#pragma acc data");
    4011           21 :       dump_omp_clauses (pp, OACC_DATA_CLAUSES (node), spc, flags);
    4012           21 :       goto dump_omp_body;
    4013              : 
    4014           35 :     case OACC_HOST_DATA:
    4015           35 :       pp_string (pp, "#pragma acc host_data");
    4016           35 :       dump_omp_clauses (pp, OACC_HOST_DATA_CLAUSES (node), spc, flags);
    4017           35 :       goto dump_omp_body;
    4018              : 
    4019            4 :     case OACC_DECLARE:
    4020            4 :       pp_string (pp, "#pragma acc declare");
    4021            4 :       dump_omp_clauses (pp, OACC_DECLARE_CLAUSES (node), spc, flags);
    4022            4 :       break;
    4023              : 
    4024            0 :     case OACC_UPDATE:
    4025            0 :       pp_string (pp, "#pragma acc update");
    4026            0 :       dump_omp_clauses (pp, OACC_UPDATE_CLAUSES (node), spc, flags);
    4027            0 :       break;
    4028              : 
    4029           13 :     case OACC_ENTER_DATA:
    4030           13 :       pp_string (pp, "#pragma acc enter data");
    4031           13 :       dump_omp_clauses (pp, OACC_ENTER_DATA_CLAUSES (node), spc, flags);
    4032           13 :       break;
    4033              : 
    4034           38 :     case OACC_EXIT_DATA:
    4035           38 :       pp_string (pp, "#pragma acc exit data");
    4036           38 :       dump_omp_clauses (pp, OACC_EXIT_DATA_CLAUSES (node), spc, flags);
    4037           38 :       break;
    4038              : 
    4039           48 :     case OACC_CACHE:
    4040           48 :       pp_string (pp, "#pragma acc cache");
    4041           48 :       dump_omp_clauses (pp, OACC_CACHE_CLAUSES (node), spc, flags);
    4042           48 :       break;
    4043              : 
    4044          217 :     case OMP_PARALLEL:
    4045          217 :       pp_string (pp, "#pragma omp parallel");
    4046          217 :       dump_omp_clauses (pp, OMP_PARALLEL_CLAUSES (node), spc, flags);
    4047          217 :       goto dump_omp_body;
    4048              : 
    4049          232 :     dump_omp_clauses_body:
    4050          232 :       dump_omp_clauses (pp, OMP_CLAUSES (node), spc, flags);
    4051          232 :       goto dump_omp_body;
    4052              : 
    4053         1461 :     dump_omp_body:
    4054         1461 :       if (!(flags & TDF_SLIM) && OMP_BODY (node))
    4055              :         {
    4056         1460 :           newline_and_indent (pp, spc + 2);
    4057         1460 :           pp_left_brace (pp);
    4058         1460 :           newline_and_indent (pp, spc + 4);
    4059         1460 :           dump_generic_node (pp, OMP_BODY (node), spc + 4, flags, false);
    4060         1460 :           newline_and_indent (pp, spc + 2);
    4061         1460 :           pp_right_brace (pp);
    4062              :         }
    4063              :       is_expr = false;
    4064              :       break;
    4065              : 
    4066          161 :     case OMP_TASK:
    4067          162 :       pp_string (pp, OMP_TASK_BODY (node) ? "#pragma omp task"
    4068              :                                           : "#pragma omp taskwait");
    4069          161 :       dump_omp_clauses (pp, OMP_TASK_CLAUSES (node), spc, flags);
    4070          161 :       goto dump_omp_body;
    4071              : 
    4072          242 :     case OMP_FOR:
    4073          242 :       pp_string (pp, "#pragma omp for");
    4074          242 :       goto dump_omp_loop;
    4075              : 
    4076          209 :     case OMP_SIMD:
    4077          209 :       pp_string (pp, "#pragma omp simd");
    4078          209 :       goto dump_omp_loop;
    4079              : 
    4080           50 :     case OMP_DISTRIBUTE:
    4081           50 :       pp_string (pp, "#pragma omp distribute");
    4082           50 :       goto dump_omp_loop;
    4083              : 
    4084            5 :     case OMP_TASKLOOP:
    4085            5 :       pp_string (pp, "#pragma omp taskloop");
    4086            5 :       goto dump_omp_loop;
    4087              : 
    4088           21 :     case OMP_LOOP:
    4089           21 :       pp_string (pp, "#pragma omp loop");
    4090           21 :       goto dump_omp_loop;
    4091              : 
    4092          188 :     case OMP_TILE:
    4093          188 :       pp_string (pp, "#pragma omp tile");
    4094          188 :       goto dump_omp_loop;
    4095              : 
    4096          196 :     case OMP_UNROLL:
    4097          196 :       pp_string (pp, "#pragma omp unroll");
    4098          196 :       goto dump_omp_loop;
    4099              : 
    4100          307 :     case OACC_LOOP:
    4101          307 :       pp_string (pp, "#pragma acc loop");
    4102          307 :       goto dump_omp_loop;
    4103              : 
    4104           75 :     case OMP_TEAMS:
    4105           75 :       pp_string (pp, "#pragma omp teams");
    4106           75 :       dump_omp_clauses (pp, OMP_TEAMS_CLAUSES (node), spc, flags);
    4107           75 :       goto dump_omp_body;
    4108              : 
    4109           69 :     case OMP_TARGET_DATA:
    4110           69 :       pp_string (pp, "#pragma omp target data");
    4111           69 :       dump_omp_clauses (pp, OMP_TARGET_DATA_CLAUSES (node), spc, flags);
    4112           69 :       goto dump_omp_body;
    4113              : 
    4114           70 :     case OMP_TARGET_ENTER_DATA:
    4115           70 :       pp_string (pp, "#pragma omp target enter data");
    4116           70 :       dump_omp_clauses (pp, OMP_TARGET_ENTER_DATA_CLAUSES (node), spc, flags);
    4117           70 :       is_expr = false;
    4118           70 :       break;
    4119              : 
    4120           56 :     case OMP_TARGET_EXIT_DATA:
    4121           56 :       pp_string (pp, "#pragma omp target exit data");
    4122           56 :       dump_omp_clauses (pp, OMP_TARGET_EXIT_DATA_CLAUSES (node), spc, flags);
    4123           56 :       is_expr = false;
    4124           56 :       break;
    4125              : 
    4126          477 :     case OMP_TARGET:
    4127          477 :       pp_string (pp, "#pragma omp target");
    4128          477 :       dump_omp_clauses (pp, OMP_TARGET_CLAUSES (node), spc, flags);
    4129          477 :       goto dump_omp_body;
    4130              : 
    4131           41 :     case OMP_TARGET_UPDATE:
    4132           41 :       pp_string (pp, "#pragma omp target update");
    4133           41 :       dump_omp_clauses (pp, OMP_TARGET_UPDATE_CLAUSES (node), spc, flags);
    4134           41 :       is_expr = false;
    4135           41 :       break;
    4136              : 
    4137         1218 :     dump_omp_loop:
    4138         1218 :       dump_omp_clauses (pp, OMP_FOR_CLAUSES (node), spc, flags);
    4139         1218 :       if (!(flags & TDF_SLIM))
    4140              :         {
    4141         1218 :           int i;
    4142              : 
    4143         1218 :           if (OMP_FOR_PRE_BODY (node))
    4144              :             {
    4145          366 :               newline_and_indent (pp, spc + 2);
    4146          366 :               pp_left_brace (pp);
    4147          366 :               spc += 4;
    4148          366 :               newline_and_indent (pp, spc);
    4149          366 :               dump_generic_node (pp, OMP_FOR_PRE_BODY (node),
    4150              :                                  spc, flags, false);
    4151              :             }
    4152         1218 :           if (OMP_FOR_INIT (node))
    4153              :             {
    4154         1122 :               spc -= 2;
    4155         2502 :               for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (node)); i++)
    4156              :                 {
    4157         1380 :                   if (TREE_VEC_ELT (OMP_FOR_INIT (node), i) == NULL_TREE)
    4158          297 :                     continue;
    4159         1083 :                   spc += 2;
    4160         1083 :                   newline_and_indent (pp, spc);
    4161         1083 :                   pp_string (pp, "for (");
    4162         1083 :                   tree init = TREE_VEC_ELT (OMP_FOR_INIT (node), i);
    4163         1083 :                   if (TREE_CODE (init) != MODIFY_EXPR
    4164         1083 :                       || TREE_CODE (TREE_OPERAND (init, 1)) != TREE_VEC)
    4165         1036 :                     dump_generic_node (pp, init, spc, flags, false);
    4166              :                   else
    4167              :                     {
    4168           47 :                       dump_generic_node (pp, TREE_OPERAND (init, 0),
    4169              :                                          spc, flags, false);
    4170           47 :                       pp_string (pp, " = ");
    4171           47 :                       dump_omp_loop_non_rect_expr (pp, TREE_OPERAND (init, 1),
    4172              :                                                    spc, flags);
    4173              :                     }
    4174         1083 :                   pp_string (pp, "; ");
    4175         1083 :                   tree cond = TREE_VEC_ELT (OMP_FOR_COND (node), i);
    4176         1083 :                   if (!COMPARISON_CLASS_P (cond)
    4177         1083 :                       || TREE_CODE (TREE_OPERAND (cond, 1)) != TREE_VEC)
    4178         1042 :                     dump_generic_node (pp, cond, spc, flags, false);
    4179              :                   else
    4180              :                     {
    4181           41 :                       dump_generic_node (pp, TREE_OPERAND (cond, 0),
    4182              :                                          spc, flags, false);
    4183           82 :                       const char *op = op_symbol (cond);
    4184           41 :                       pp_space (pp);
    4185           41 :                       pp_string (pp, op);
    4186           41 :                       pp_space (pp);
    4187           41 :                       dump_omp_loop_non_rect_expr (pp, TREE_OPERAND (cond, 1),
    4188              :                                                    spc, flags);
    4189              :                     }
    4190         1083 :                   pp_string (pp, "; ");
    4191         1083 :                   dump_generic_node (pp,
    4192         1083 :                                      TREE_VEC_ELT (OMP_FOR_INCR (node), i),
    4193              :                                      spc, flags, false);
    4194         1083 :                   pp_right_paren (pp);
    4195              :                 }
    4196              :             }
    4197         1218 :           if (OMP_FOR_BODY (node))
    4198              :             {
    4199         1218 :               newline_and_indent (pp, spc + 2);
    4200         1218 :               pp_left_brace (pp);
    4201         1218 :               newline_and_indent (pp, spc + 4);
    4202         1218 :               dump_generic_node (pp, OMP_FOR_BODY (node), spc + 4, flags,
    4203              :                   false);
    4204         1218 :               newline_and_indent (pp, spc + 2);
    4205         1218 :               pp_right_brace (pp);
    4206              :             }
    4207         1218 :           if (OMP_FOR_INIT (node))
    4208         1122 :             spc -= 2 * TREE_VEC_LENGTH (OMP_FOR_INIT (node)) - 2;
    4209         1218 :           if (OMP_FOR_PRE_BODY (node))
    4210              :             {
    4211          366 :               spc -= 4;
    4212          366 :               newline_and_indent (pp, spc + 2);
    4213          366 :               pp_right_brace (pp);
    4214              :             }
    4215              :         }
    4216              :       is_expr = false;
    4217              :       break;
    4218              : 
    4219           10 :     case OMP_SECTIONS:
    4220           10 :       pp_string (pp, "#pragma omp sections");
    4221           10 :       dump_omp_clauses (pp, OMP_SECTIONS_CLAUSES (node), spc, flags);
    4222           10 :       goto dump_omp_body;
    4223              : 
    4224           57 :     case OMP_DISPATCH:
    4225           57 :       pp_string (pp, "#pragma omp dispatch");
    4226           57 :       dump_omp_clauses (pp, OMP_DISPATCH_CLAUSES (node), spc, flags);
    4227           57 :       goto dump_omp_body;
    4228              : 
    4229           65 :     case OMP_INTEROP:
    4230           65 :       pp_string (pp, "#pragma omp interop");
    4231           65 :       dump_omp_clauses (pp, OMP_INTEROP_CLAUSES (node), spc, flags);
    4232           65 :       is_expr = false;
    4233           65 :       break;
    4234              : 
    4235           14 :     case OMP_SECTION:
    4236           14 :       pp_string (pp, "#pragma omp section");
    4237           14 :       goto dump_omp_body;
    4238              : 
    4239           10 :     case OMP_STRUCTURED_BLOCK:
    4240           10 :       pp_string (pp, "#pragma omp __structured_block");
    4241           10 :       goto dump_omp_body;
    4242              : 
    4243           10 :     case OMP_SCAN:
    4244           10 :       if (OMP_SCAN_CLAUSES (node))
    4245              :         {
    4246            5 :           pp_string (pp, "#pragma omp scan");
    4247            5 :           dump_omp_clauses (pp, OMP_SCAN_CLAUSES (node), spc, flags);
    4248              :         }
    4249           10 :       goto dump_omp_body;
    4250              : 
    4251            4 :     case OMP_MASTER:
    4252            4 :       pp_string (pp, "#pragma omp master");
    4253            4 :       goto dump_omp_body;
    4254              : 
    4255            1 :     case OMP_MASKED:
    4256            1 :       pp_string (pp, "#pragma omp masked");
    4257            1 :       dump_omp_clauses (pp, OMP_MASKED_CLAUSES (node), spc, flags);
    4258            1 :       goto dump_omp_body;
    4259              : 
    4260            5 :     case OMP_TASKGROUP:
    4261            5 :       pp_string (pp, "#pragma omp taskgroup");
    4262            5 :       dump_omp_clauses (pp, OMP_TASKGROUP_CLAUSES (node), spc, flags);
    4263            5 :       goto dump_omp_body;
    4264              : 
    4265           18 :     case OMP_ORDERED:
    4266           18 :       pp_string (pp, "#pragma omp ordered");
    4267           18 :       dump_omp_clauses (pp, OMP_ORDERED_CLAUSES (node), spc, flags);
    4268           18 :       goto dump_omp_body;
    4269              : 
    4270           26 :     case OMP_CRITICAL:
    4271           26 :       pp_string (pp, "#pragma omp critical");
    4272           26 :       if (OMP_CRITICAL_NAME (node))
    4273              :         {
    4274           23 :           pp_space (pp);
    4275           23 :           pp_left_paren (pp);
    4276           23 :           dump_generic_node (pp, OMP_CRITICAL_NAME (node), spc,
    4277              :                              flags, false);
    4278           23 :           pp_right_paren (pp);
    4279              :         }
    4280           26 :       dump_omp_clauses (pp, OMP_CRITICAL_CLAUSES (node), spc, flags);
    4281           26 :       goto dump_omp_body;
    4282              : 
    4283          191 :     case OMP_ATOMIC:
    4284          191 :       pp_string (pp, "#pragma omp atomic");
    4285          191 :       if (OMP_ATOMIC_WEAK (node))
    4286            0 :         pp_string (pp, " weak");
    4287          191 :       dump_omp_atomic_memory_order (pp, OMP_ATOMIC_MEMORY_ORDER (node));
    4288          191 :       newline_and_indent (pp, spc + 2);
    4289          191 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4290          191 :       pp_space (pp);
    4291          191 :       pp_equal (pp);
    4292          191 :       pp_space (pp);
    4293          191 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4294          191 :       break;
    4295              : 
    4296           42 :     case OMP_ATOMIC_READ:
    4297           42 :       pp_string (pp, "#pragma omp atomic read");
    4298           42 :       dump_omp_atomic_memory_order (pp, OMP_ATOMIC_MEMORY_ORDER (node));
    4299           42 :       newline_and_indent (pp, spc + 2);
    4300           42 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4301           42 :       pp_space (pp);
    4302           42 :       break;
    4303              : 
    4304           56 :     case OMP_ATOMIC_CAPTURE_OLD:
    4305           56 :     case OMP_ATOMIC_CAPTURE_NEW:
    4306           56 :       pp_string (pp, "#pragma omp atomic capture");
    4307           56 :       if (OMP_ATOMIC_WEAK (node))
    4308            0 :         pp_string (pp, " weak");
    4309           56 :       dump_omp_atomic_memory_order (pp, OMP_ATOMIC_MEMORY_ORDER (node));
    4310           56 :       newline_and_indent (pp, spc + 2);
    4311           56 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4312           56 :       pp_space (pp);
    4313           56 :       pp_equal (pp);
    4314           56 :       pp_space (pp);
    4315           56 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4316           56 :       break;
    4317              : 
    4318           17 :     case OMP_SINGLE:
    4319           17 :       pp_string (pp, "#pragma omp single");
    4320           17 :       dump_omp_clauses (pp, OMP_SINGLE_CLAUSES (node), spc, flags);
    4321           17 :       goto dump_omp_body;
    4322              : 
    4323            2 :     case OMP_SCOPE:
    4324            2 :       pp_string (pp, "#pragma omp scope");
    4325            2 :       dump_omp_clauses (pp, OMP_SCOPE_CLAUSES (node), spc, flags);
    4326            2 :       goto dump_omp_body;
    4327              : 
    4328         1563 :     case OMP_CLAUSE:
    4329              :       /* If we come here, we're dumping something that's not an OMP construct,
    4330              :          for example, OMP clauses attached to a function's '__attribute__'.
    4331              :          Dump the whole OMP clause chain.  */
    4332         1563 :       dump_omp_clauses (pp, node, spc, flags, false);
    4333         1563 :       is_expr = false;
    4334         1563 :       break;
    4335              : 
    4336           34 :     case OMP_METADIRECTIVE:
    4337           34 :       {
    4338           34 :         pp_string (pp, "#pragma omp metadirective");
    4339           34 :         newline_and_indent (pp, spc + 2);
    4340           34 :         pp_left_brace (pp);
    4341              : 
    4342           34 :         tree variant = OMP_METADIRECTIVE_VARIANTS (node);
    4343          120 :         while (variant != NULL_TREE)
    4344              :           {
    4345           86 :             tree selector = OMP_METADIRECTIVE_VARIANT_SELECTOR (variant);
    4346           86 :             tree directive = OMP_METADIRECTIVE_VARIANT_DIRECTIVE (variant);
    4347           86 :             tree body = OMP_METADIRECTIVE_VARIANT_BODY (variant);
    4348              : 
    4349           86 :             newline_and_indent (pp, spc + 4);
    4350           86 :             if (selector == NULL_TREE)
    4351           34 :               pp_string (pp, "otherwise:");
    4352              :             else
    4353              :               {
    4354           52 :                 pp_string (pp, "when (");
    4355           52 :                 dump_omp_context_selector (pp, selector, spc + 4, flags);
    4356           52 :                 pp_string (pp, "):");
    4357              :               }
    4358           86 :             newline_and_indent (pp, spc + 6);
    4359              : 
    4360           86 :             dump_generic_node (pp, directive, spc + 6, flags, false);
    4361           86 :             newline_and_indent (pp, spc + 6);
    4362           86 :             dump_generic_node (pp, body, spc + 6, flags, false);
    4363           86 :             variant = TREE_CHAIN (variant);
    4364              :           }
    4365           34 :         newline_and_indent (pp, spc + 2);
    4366           34 :         pp_right_brace (pp);
    4367              :       }
    4368           34 :       break;
    4369              : 
    4370           12 :     case OMP_NEXT_VARIANT:
    4371           12 :       {
    4372           12 :         pp_string (pp, "OMP_NEXT_VARIANT <");
    4373           12 :         dump_generic_node (pp, OMP_NEXT_VARIANT_INDEX (node), spc,
    4374              :                            flags, false);
    4375           12 :         pp_string (pp, ", ");
    4376           12 :         tree state = OMP_NEXT_VARIANT_STATE (node);
    4377           12 :         gcc_assert (state && TREE_CODE (state) == TREE_LIST);
    4378           12 :         if (TREE_PURPOSE (state))
    4379              :           {
    4380            0 :             newline_and_indent (pp, spc + 2);
    4381            0 :             pp_string (pp, "resolution map = ");
    4382            0 :             dump_generic_node (pp, TREE_PURPOSE (state), spc, flags, false);
    4383              :           }
    4384           12 :         newline_and_indent (pp, spc + 2);
    4385           12 :         pp_string (pp, "construct context = ");
    4386           12 :         if (TREE_VALUE (state))
    4387            0 :           dump_generic_node (pp, TREE_VALUE (state), spc, flags, false);
    4388              :         else
    4389           12 :           pp_string (pp, "NULL");
    4390              : 
    4391           12 :         tree selectors = TREE_CHAIN (state);
    4392           60 :         for (int i = 0; i < TREE_VEC_LENGTH (selectors); i++)
    4393              :           {
    4394           48 :             newline_and_indent (pp, spc + 2);
    4395           48 :             pp_decimal_int (pp, i + 1);
    4396           48 :             pp_string (pp, ": ");
    4397           48 :             dump_omp_context_selector (pp, TREE_VEC_ELT (selectors, i),
    4398              :                                        spc + 4, flags);
    4399              :           }
    4400           12 :         pp_string (pp, ">");
    4401              :       }
    4402           12 :       break;
    4403              : 
    4404            0 :     case OMP_TARGET_DEVICE_MATCHES:
    4405            0 :       pp_string (pp, "OMP_TARGET_DEVICE_MATCHES <");
    4406            0 :       dump_generic_node (pp, OMP_TARGET_DEVICE_MATCHES_SELECTOR (node), spc,
    4407              :                          flags, false);
    4408            0 :       for (tree p = OMP_TARGET_DEVICE_MATCHES_PROPERTIES (node);
    4409            0 :            p; p = TREE_CHAIN (p))
    4410              :         {
    4411            0 :           pp_string (pp, ", ");
    4412            0 :           dump_generic_node (pp, OMP_TP_VALUE (p), spc, flags, false);
    4413              :         }
    4414            0 :       pp_string (pp, ")>");
    4415            0 :       break;
    4416              : 
    4417           52 :     case OMP_DECLARE_MAPPER:
    4418           52 :       pp_string (pp, "#pragma omp declare mapper (");
    4419           52 :       if (OMP_DECLARE_MAPPER_ID (node))
    4420              :         {
    4421            8 :           dump_generic_node (pp, OMP_DECLARE_MAPPER_ID (node), spc, flags,
    4422              :                              false);
    4423            8 :           pp_colon (pp);
    4424              :         }
    4425           52 :       dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
    4426           52 :       pp_space (pp);
    4427           52 :       dump_generic_node (pp, OMP_DECLARE_MAPPER_DECL (node), spc, flags, false);
    4428           52 :       pp_right_paren (pp);
    4429           52 :       dump_omp_clauses (pp, OMP_DECLARE_MAPPER_CLAUSES (node), spc, flags);
    4430           52 :       break;
    4431              : 
    4432            0 :     case TRANSACTION_EXPR:
    4433            0 :       if (TRANSACTION_EXPR_OUTER (node))
    4434            0 :         pp_string (pp, "__transaction_atomic [[outer]]");
    4435            0 :       else if (TRANSACTION_EXPR_RELAXED (node))
    4436            0 :         pp_string (pp, "__transaction_relaxed");
    4437              :       else
    4438            0 :         pp_string (pp, "__transaction_atomic");
    4439            0 :       if (!(flags & TDF_SLIM) && TRANSACTION_EXPR_BODY (node))
    4440              :         {
    4441            0 :           newline_and_indent (pp, spc);
    4442            0 :           pp_left_brace (pp);
    4443            0 :           newline_and_indent (pp, spc + 2);
    4444            0 :           dump_generic_node (pp, TRANSACTION_EXPR_BODY (node),
    4445              :                              spc + 2, flags, false);
    4446            0 :           newline_and_indent (pp, spc);
    4447            0 :           pp_right_brace (pp);
    4448              :         }
    4449              :       is_expr = false;
    4450              :       break;
    4451              : 
    4452            0 :     case VEC_SERIES_EXPR:
    4453            0 :     case VEC_WIDEN_MULT_HI_EXPR:
    4454            0 :     case VEC_WIDEN_MULT_LO_EXPR:
    4455            0 :     case VEC_WIDEN_MULT_EVEN_EXPR:
    4456            0 :     case VEC_WIDEN_MULT_ODD_EXPR:
    4457            0 :     case VEC_WIDEN_LSHIFT_HI_EXPR:
    4458            0 :     case VEC_WIDEN_LSHIFT_LO_EXPR:
    4459            0 :       pp_space (pp);
    4460            0 :       for (str = get_tree_code_name (code); *str; str++)
    4461            0 :         pp_character (pp, TOUPPER (*str));
    4462            0 :       pp_string (pp, " < ");
    4463            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4464            0 :       pp_string (pp, ", ");
    4465            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4466            0 :       pp_string (pp, " > ");
    4467            0 :       break;
    4468              : 
    4469            0 :     case VEC_DUPLICATE_EXPR:
    4470            0 :       pp_space (pp);
    4471            0 :       for (str = get_tree_code_name (code); *str; str++)
    4472            0 :         pp_character (pp, TOUPPER (*str));
    4473            0 :       pp_string (pp, " < ");
    4474            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4475            0 :       pp_string (pp, " > ");
    4476            0 :       break;
    4477              : 
    4478            0 :     case VEC_UNPACK_HI_EXPR:
    4479            0 :       pp_string (pp, " VEC_UNPACK_HI_EXPR < ");
    4480            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4481            0 :       pp_string (pp, " > ");
    4482            0 :       break;
    4483              : 
    4484            0 :     case VEC_UNPACK_LO_EXPR:
    4485            0 :       pp_string (pp, " VEC_UNPACK_LO_EXPR < ");
    4486            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4487            0 :       pp_string (pp, " > ");
    4488            0 :       break;
    4489              : 
    4490            0 :     case VEC_UNPACK_FLOAT_HI_EXPR:
    4491            0 :       pp_string (pp, " VEC_UNPACK_FLOAT_HI_EXPR < ");
    4492            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4493            0 :       pp_string (pp, " > ");
    4494            0 :       break;
    4495              : 
    4496            0 :     case VEC_UNPACK_FLOAT_LO_EXPR:
    4497            0 :       pp_string (pp, " VEC_UNPACK_FLOAT_LO_EXPR < ");
    4498            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4499            0 :       pp_string (pp, " > ");
    4500            0 :       break;
    4501              : 
    4502            0 :     case VEC_UNPACK_FIX_TRUNC_HI_EXPR:
    4503            0 :       pp_string (pp, " VEC_UNPACK_FIX_TRUNC_HI_EXPR < ");
    4504            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4505            0 :       pp_string (pp, " > ");
    4506            0 :       break;
    4507              : 
    4508            0 :     case VEC_UNPACK_FIX_TRUNC_LO_EXPR:
    4509            0 :       pp_string (pp, " VEC_UNPACK_FIX_TRUNC_LO_EXPR < ");
    4510            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4511            0 :       pp_string (pp, " > ");
    4512            0 :       break;
    4513              : 
    4514            0 :     case VEC_PACK_TRUNC_EXPR:
    4515            0 :       pp_string (pp, " VEC_PACK_TRUNC_EXPR < ");
    4516            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4517            0 :       pp_string (pp, ", ");
    4518            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4519            0 :       pp_string (pp, " > ");
    4520            0 :       break;
    4521              : 
    4522            0 :     case VEC_PACK_SAT_EXPR:
    4523            0 :       pp_string (pp, " VEC_PACK_SAT_EXPR < ");
    4524            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4525            0 :       pp_string (pp, ", ");
    4526            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4527            0 :       pp_string (pp, " > ");
    4528            0 :       break;
    4529              : 
    4530            0 :     case VEC_PACK_FIX_TRUNC_EXPR:
    4531            0 :       pp_string (pp, " VEC_PACK_FIX_TRUNC_EXPR < ");
    4532            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4533            0 :       pp_string (pp, ", ");
    4534            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4535            0 :       pp_string (pp, " > ");
    4536            0 :       break;
    4537              : 
    4538            0 :     case VEC_PACK_FLOAT_EXPR:
    4539            0 :       pp_string (pp, " VEC_PACK_FLOAT_EXPR < ");
    4540            0 :       dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false);
    4541            0 :       pp_string (pp, ", ");
    4542            0 :       dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false);
    4543            0 :       pp_string (pp, " > ");
    4544            0 :       break;
    4545              : 
    4546            6 :     case BLOCK:
    4547            6 :       dump_block_node (pp, node, spc, flags);
    4548            6 :       break;
    4549              : 
    4550          888 :     case DEBUG_BEGIN_STMT:
    4551          888 :       pp_string (pp, "# DEBUG BEGIN STMT");
    4552          888 :       break;
    4553              : 
    4554        13277 :     default:
    4555        13277 :       NIY;
    4556              :     }
    4557              : 
    4558     46111509 :   if (is_stmt && is_expr)
    4559       323143 :     pp_semicolon (pp);
    4560              : 
    4561              :   return spc;
    4562              : }
    4563              : 
    4564              : /* Print the declaration of a variable.  */
    4565              : 
    4566              : void
    4567       444457 : print_declaration (pretty_printer *pp, tree t, int spc, dump_flags_t flags)
    4568              : {
    4569      2250665 :   INDENT (spc);
    4570              : 
    4571       444457 :   if (TREE_CODE(t) == NAMELIST_DECL)
    4572              :     {
    4573            1 :       pp_string(pp, "namelist ");
    4574            1 :       dump_decl_name (pp, t, flags);
    4575            1 :       pp_semicolon (pp);
    4576            1 :       return;
    4577              :     }
    4578              : 
    4579       444456 :   if (TREE_CODE (t) == TYPE_DECL)
    4580         1798 :     pp_string (pp, "typedef ");
    4581              : 
    4582       444456 :   if (HAS_RTL_P (t) && DECL_REGISTER (t))
    4583           39 :     pp_string (pp, "register ");
    4584              : 
    4585       444456 :   if (TREE_PUBLIC (t) && DECL_EXTERNAL (t))
    4586         5178 :     pp_string (pp, "extern ");
    4587       439278 :   else if (TREE_STATIC (t))
    4588        16700 :     pp_string (pp, "static ");
    4589              : 
    4590              :   /* Print the type and name.  */
    4591       444456 :   if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
    4592              :     {
    4593        26306 :       tree tmp;
    4594              : 
    4595              :       /* Print array's type.  */
    4596        26306 :       tmp = TREE_TYPE (t);
    4597        27152 :       while (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE)
    4598          846 :         tmp = TREE_TYPE (tmp);
    4599        26306 :       dump_generic_node (pp, TREE_TYPE (tmp), spc, flags, false);
    4600              : 
    4601              :       /* Print variable's name.  */
    4602        26306 :       pp_space (pp);
    4603        26306 :       dump_generic_node (pp, t, spc, flags, false);
    4604              : 
    4605              :       /* Print the dimensions.  */
    4606        26306 :       tmp = TREE_TYPE (t);
    4607        53458 :       while (TREE_CODE (tmp) == ARRAY_TYPE)
    4608              :         {
    4609        27152 :           dump_array_domain (pp, TYPE_DOMAIN (tmp), spc, flags);
    4610        27152 :           tmp = TREE_TYPE (tmp);
    4611              :         }
    4612              :     }
    4613       418150 :   else if (TREE_CODE (t) == FUNCTION_DECL)
    4614              :     {
    4615         8873 :       dump_generic_node (pp, TREE_TYPE (TREE_TYPE (t)), spc, flags, false);
    4616         8873 :       pp_space (pp);
    4617         8873 :       dump_decl_name (pp, t, flags);
    4618         8873 :       dump_function_declaration (pp, TREE_TYPE (t), spc, flags);
    4619              :     }
    4620              :   else
    4621              :     {
    4622              :       /* Print type declaration.  */
    4623       409277 :       dump_generic_node (pp, TREE_TYPE (t), spc, flags, false);
    4624              : 
    4625              :       /* Print variable's name.  */
    4626       409277 :       pp_space (pp);
    4627       409277 :       dump_generic_node (pp, t, spc, flags, false);
    4628              :     }
    4629              : 
    4630       444456 :   if (VAR_P (t) && DECL_HARD_REGISTER (t))
    4631              :     {
    4632            5 :       pp_string (pp, " __asm__ ");
    4633            5 :       pp_left_paren (pp);
    4634            5 :       dump_generic_node (pp, DECL_ASSEMBLER_NAME (t), spc, flags, false);
    4635            5 :       pp_right_paren (pp);
    4636              :     }
    4637              : 
    4638              :   /* The initial value of a function serves to determine whether the function
    4639              :      is declared or defined.  So the following does not apply to function
    4640              :      nodes.  */
    4641       444456 :   if (TREE_CODE (t) != FUNCTION_DECL)
    4642              :     {
    4643              :       /* Print the initial value.  */
    4644       435583 :       if (DECL_INITIAL (t))
    4645              :         {
    4646        21924 :           pp_space (pp);
    4647        21924 :           pp_equal (pp);
    4648        21924 :           pp_space (pp);
    4649        21924 :           if (!(flags & TDF_SLIM))
    4650        21144 :             dump_generic_node (pp, DECL_INITIAL (t), spc, flags, false);
    4651              :           else
    4652          780 :             pp_string (pp, "<<< omitted >>>");
    4653              :         }
    4654              :     }
    4655              : 
    4656       444456 :   if (VAR_P (t) && DECL_HAS_VALUE_EXPR_P (t))
    4657              :     {
    4658          723 :       pp_string (pp, " [value-expr: ");
    4659          723 :       dump_generic_node (pp, DECL_VALUE_EXPR (t), spc, flags, false);
    4660          723 :       pp_right_bracket (pp);
    4661              :     }
    4662              : 
    4663       444456 :   pp_semicolon (pp);
    4664              : }
    4665              : 
    4666              : 
    4667              : /* Prints a structure: name, fields, and methods.
    4668              :    FIXME: Still incomplete.  */
    4669              : 
    4670              : static void
    4671          576 : print_struct_decl (pretty_printer *pp, const_tree node, int spc,
    4672              :                    dump_flags_t flags)
    4673              : {
    4674              :   /* Print the name of the structure.  */
    4675          576 :   if (TYPE_NAME (node))
    4676              :     {
    4677            0 :       INDENT (spc);
    4678            0 :       if (TREE_CODE (node) == RECORD_TYPE)
    4679            0 :         pp_string (pp, "struct ");
    4680            0 :       else if ((TREE_CODE (node) == UNION_TYPE
    4681            0 :                 || TREE_CODE (node) == QUAL_UNION_TYPE))
    4682            0 :         pp_string (pp, "union ");
    4683              : 
    4684            0 :       dump_generic_node (pp, TYPE_NAME (node), spc, TDF_NONE, false);
    4685              :     }
    4686              : 
    4687              :   /* Print the contents of the structure.  */
    4688          576 :   pp_newline (pp);
    4689         1892 :   INDENT (spc);
    4690          576 :   pp_left_brace (pp);
    4691          576 :   pp_newline (pp);
    4692              : 
    4693              :   /* Print the fields of the structure.  */
    4694          576 :   {
    4695          576 :     tree tmp;
    4696          576 :     tmp = TYPE_FIELDS (node);
    4697         3169 :     while (tmp)
    4698              :       {
    4699              :         /* Avoid to print recursively the structure.  */
    4700              :         /* FIXME : Not implemented correctly...,
    4701              :            what about the case when we have a cycle in the contain graph? ...
    4702              :            Maybe this could be solved by looking at the scope in which the
    4703              :            structure was declared.  */
    4704         2593 :         if (TREE_TYPE (tmp) != node
    4705         2593 :             && (TREE_CODE (TREE_TYPE (tmp)) != POINTER_TYPE
    4706           52 :                 || TREE_TYPE (TREE_TYPE (tmp)) != node))
    4707              :           {
    4708         2593 :             print_declaration (pp, tmp, spc+2, flags);
    4709         2593 :             pp_newline (pp);
    4710              :           }
    4711         2593 :         tmp = DECL_CHAIN (tmp);
    4712              :       }
    4713              :   }
    4714         1316 :   INDENT (spc);
    4715          576 :   pp_right_brace (pp);
    4716          576 : }
    4717              : 
    4718              : /* Return the priority of the operator CODE.
    4719              : 
    4720              :    From lowest to highest precedence with either left-to-right (L-R)
    4721              :    or right-to-left (R-L) associativity]:
    4722              : 
    4723              :      1  [L-R] ,
    4724              :      2  [R-L] = += -= *= /= %= &= ^= |= <<= >>=
    4725              :      3  [R-L] ?:
    4726              :      4  [L-R] ||
    4727              :      5  [L-R] &&
    4728              :      6  [L-R] |
    4729              :      7  [L-R] ^
    4730              :      8  [L-R] &
    4731              :      9  [L-R] == !=
    4732              :     10  [L-R] < <= > >=
    4733              :     11  [L-R] << >>
    4734              :     12  [L-R] + -
    4735              :     13  [L-R] * / %
    4736              :     14  [R-L] ! ~ ++ -- + - * & (type) sizeof
    4737              :     15  [L-R] fn() [] -> .
    4738              : 
    4739              :    unary +, - and * have higher precedence than the corresponding binary
    4740              :    operators.  */
    4741              : 
    4742              : int
    4743     21643592 : op_code_prio (enum tree_code code)
    4744              : {
    4745     21643592 :   switch (code)
    4746              :     {
    4747              :     case TREE_LIST:
    4748              :     case COMPOUND_EXPR:
    4749              :     case BIND_EXPR:
    4750              :       return 1;
    4751              : 
    4752              :     case MODIFY_EXPR:
    4753              :     case INIT_EXPR:
    4754              :       return 2;
    4755              : 
    4756              :     case COND_EXPR:
    4757              :       return 3;
    4758              : 
    4759              :     case TRUTH_OR_EXPR:
    4760              :     case TRUTH_ORIF_EXPR:
    4761              :       return 4;
    4762              : 
    4763              :     case TRUTH_AND_EXPR:
    4764              :     case TRUTH_ANDIF_EXPR:
    4765              :       return 5;
    4766              : 
    4767              :     case BIT_IOR_EXPR:
    4768              :       return 6;
    4769              : 
    4770              :     case BIT_XOR_EXPR:
    4771              :     case TRUTH_XOR_EXPR:
    4772              :       return 7;
    4773              : 
    4774              :     case BIT_AND_EXPR:
    4775              :       return 8;
    4776              : 
    4777              :     case EQ_EXPR:
    4778              :     case NE_EXPR:
    4779              :       return 9;
    4780              : 
    4781              :     case UNLT_EXPR:
    4782              :     case UNLE_EXPR:
    4783              :     case UNGT_EXPR:
    4784              :     case UNGE_EXPR:
    4785              :     case UNEQ_EXPR:
    4786              :     case LTGT_EXPR:
    4787              :     case ORDERED_EXPR:
    4788              :     case UNORDERED_EXPR:
    4789              :     case LT_EXPR:
    4790              :     case LE_EXPR:
    4791              :     case GT_EXPR:
    4792              :     case GE_EXPR:
    4793              :       return 10;
    4794              : 
    4795              :     case LSHIFT_EXPR:
    4796              :     case RSHIFT_EXPR:
    4797              :     case LROTATE_EXPR:
    4798              :     case RROTATE_EXPR:
    4799              :     case VEC_WIDEN_LSHIFT_HI_EXPR:
    4800              :     case VEC_WIDEN_LSHIFT_LO_EXPR:
    4801              :     case WIDEN_LSHIFT_EXPR:
    4802              :       return 11;
    4803              : 
    4804              :     case WIDEN_SUM_EXPR:
    4805              :     case PLUS_EXPR:
    4806              :     case POINTER_PLUS_EXPR:
    4807              :     case POINTER_DIFF_EXPR:
    4808              :     case MINUS_EXPR:
    4809              :       return 12;
    4810              : 
    4811              :     case VEC_WIDEN_MULT_HI_EXPR:
    4812              :     case VEC_WIDEN_MULT_LO_EXPR:
    4813              :     case WIDEN_MULT_EXPR:
    4814              :     case DOT_PROD_EXPR:
    4815              :     case WIDEN_MULT_PLUS_EXPR:
    4816              :     case WIDEN_MULT_MINUS_EXPR:
    4817              :     case MULT_EXPR:
    4818              :     case MULT_HIGHPART_EXPR:
    4819              :     case TRUNC_DIV_EXPR:
    4820              :     case CEIL_DIV_EXPR:
    4821              :     case FLOOR_DIV_EXPR:
    4822              :     case ROUND_DIV_EXPR:
    4823              :     case RDIV_EXPR:
    4824              :     case EXACT_DIV_EXPR:
    4825              :     case TRUNC_MOD_EXPR:
    4826              :     case CEIL_MOD_EXPR:
    4827              :     case FLOOR_MOD_EXPR:
    4828              :     case ROUND_MOD_EXPR:
    4829              :       return 13;
    4830              : 
    4831              :     case TRUTH_NOT_EXPR:
    4832              :     case BIT_NOT_EXPR:
    4833              :     case POSTINCREMENT_EXPR:
    4834              :     case POSTDECREMENT_EXPR:
    4835              :     case PREINCREMENT_EXPR:
    4836              :     case PREDECREMENT_EXPR:
    4837              :     case NEGATE_EXPR:
    4838              :     case INDIRECT_REF:
    4839              :     case ADDR_EXPR:
    4840              :     case FLOAT_EXPR:
    4841              :     CASE_CONVERT:
    4842              :     case FIX_TRUNC_EXPR:
    4843              :     case TARGET_EXPR:
    4844              :       return 14;
    4845              : 
    4846              :     case CALL_EXPR:
    4847              :     case ARRAY_REF:
    4848              :     case ARRAY_RANGE_REF:
    4849              :     case COMPONENT_REF:
    4850              :       return 15;
    4851              : 
    4852              :       /* Special expressions.  */
    4853              :     case MIN_EXPR:
    4854              :     case MAX_EXPR:
    4855              :     case ABS_EXPR:
    4856              :     case REALPART_EXPR:
    4857              :     case IMAGPART_EXPR:
    4858              :     case VEC_UNPACK_HI_EXPR:
    4859              :     case VEC_UNPACK_LO_EXPR:
    4860              :     case VEC_UNPACK_FLOAT_HI_EXPR:
    4861              :     case VEC_UNPACK_FLOAT_LO_EXPR:
    4862              :     case VEC_UNPACK_FIX_TRUNC_HI_EXPR:
    4863              :     case VEC_UNPACK_FIX_TRUNC_LO_EXPR:
    4864              :     case VEC_PACK_TRUNC_EXPR:
    4865              :     case VEC_PACK_SAT_EXPR:
    4866              :       return 16;
    4867              : 
    4868              :     default:
    4869              :       /* Return an arbitrarily high precedence to avoid surrounding single
    4870              :          VAR_DECLs in ()s.  */
    4871              :       return 9999;
    4872              :     }
    4873              : }
    4874              : 
    4875              : /* Return the priority of the operator OP.  */
    4876              : 
    4877              : int
    4878     17303486 : op_prio (const_tree op)
    4879              : {
    4880     17319689 :   enum tree_code code;
    4881              : 
    4882     17319689 :   if (op == NULL)
    4883              :     return 9999;
    4884              : 
    4885     17319467 :   code = TREE_CODE (op);
    4886     17319467 :   if (code == SAVE_EXPR || code == NON_LVALUE_EXPR)
    4887        16203 :     return op_prio (TREE_OPERAND (op, 0));
    4888              : 
    4889     17303264 :   return op_code_prio (code);
    4890              : }
    4891              : 
    4892              : /* Return the symbol associated with operator CODE.  */
    4893              : 
    4894              : const char *
    4895      2684605 : op_symbol_code (enum tree_code code, dump_flags_t flags)
    4896              : {
    4897      2684605 :   switch (code)
    4898              :     {
    4899              :     case MODIFY_EXPR:
    4900              :       return "=";
    4901              : 
    4902         2495 :     case TRUTH_OR_EXPR:
    4903         2495 :     case TRUTH_ORIF_EXPR:
    4904         2495 :       return "||";
    4905              : 
    4906         2781 :     case TRUTH_AND_EXPR:
    4907         2781 :     case TRUTH_ANDIF_EXPR:
    4908         2781 :       return "&&";
    4909              : 
    4910        35171 :     case BIT_IOR_EXPR:
    4911        35171 :       return "|";
    4912              : 
    4913        21935 :     case TRUTH_XOR_EXPR:
    4914        21935 :     case BIT_XOR_EXPR:
    4915        21935 :       return "^";
    4916              : 
    4917       375835 :     case ADDR_EXPR:
    4918       375835 :     case BIT_AND_EXPR:
    4919       375835 :       return "&";
    4920              : 
    4921           42 :     case ORDERED_EXPR:
    4922           42 :       return (flags & TDF_GIMPLE) ? "__ORDERED" : "ord";
    4923           62 :     case UNORDERED_EXPR:
    4924           62 :       return (flags & TDF_GIMPLE) ? "__UNORDERED" : "unord";
    4925              : 
    4926        64213 :     case EQ_EXPR:
    4927        64213 :       return "==";
    4928           17 :     case UNEQ_EXPR:
    4929           17 :       return (flags & TDF_GIMPLE) ? "__UNEQ" : "u==";
    4930              : 
    4931       191251 :     case NE_EXPR:
    4932       191251 :       return "!=";
    4933              : 
    4934        70376 :     case LT_EXPR:
    4935        70376 :       return "<";
    4936           91 :     case UNLT_EXPR:
    4937           91 :       return (flags & TDF_GIMPLE) ? "__UNLT" : "u<";
    4938              : 
    4939        30443 :     case LE_EXPR:
    4940        30443 :       return "<=";
    4941          125 :     case UNLE_EXPR:
    4942          125 :       return (flags & TDF_GIMPLE) ? "__UNLE" : "u<=";
    4943              : 
    4944        53303 :     case GT_EXPR:
    4945        53303 :       return ">";
    4946          134 :     case UNGT_EXPR:
    4947          134 :       return (flags & TDF_GIMPLE) ? "__UNGT" : "u>";
    4948              : 
    4949         9898 :     case GE_EXPR:
    4950         9898 :       return ">=";
    4951           78 :     case UNGE_EXPR:
    4952           78 :       return (flags & TDF_GIMPLE) ? "__UNGE" : "u>=";
    4953              : 
    4954           31 :     case LTGT_EXPR:
    4955           31 :       return (flags & TDF_GIMPLE) ? "__LTGT" : "<>";
    4956              : 
    4957        40556 :     case LSHIFT_EXPR:
    4958        40556 :       return "<<";
    4959              : 
    4960        90227 :     case RSHIFT_EXPR:
    4961        90227 :       return ">>";
    4962              : 
    4963          785 :     case LROTATE_EXPR:
    4964          785 :       return (flags & TDF_GIMPLE) ? "__ROTATE_LEFT" : "r<<";
    4965              : 
    4966         1381 :     case RROTATE_EXPR:
    4967         1381 :       return (flags & TDF_GIMPLE) ? "__ROTATE_RIGHT" : "r>>";
    4968              : 
    4969            0 :     case WIDEN_LSHIFT_EXPR:
    4970            0 :       return "w<<";
    4971              : 
    4972              :     case POINTER_PLUS_EXPR:
    4973              :       return "+";
    4974              : 
    4975              :     case PLUS_EXPR:
    4976              :       return "+";
    4977              : 
    4978            0 :     case WIDEN_SUM_EXPR:
    4979            0 :       return "w+";
    4980              : 
    4981        10105 :     case WIDEN_MULT_EXPR:
    4982        10105 :       return "w*";
    4983              : 
    4984         7134 :     case MULT_HIGHPART_EXPR:
    4985         7134 :       return (flags & TDF_GIMPLE) ? "__MULT_HIGHPART" : "h*";
    4986              : 
    4987       188894 :     case NEGATE_EXPR:
    4988       188894 :     case MINUS_EXPR:
    4989       188894 :     case POINTER_DIFF_EXPR:
    4990       188894 :       return "-";
    4991              : 
    4992          714 :     case BIT_NOT_EXPR:
    4993          714 :       return "~";
    4994              : 
    4995          491 :     case TRUTH_NOT_EXPR:
    4996          491 :       return "!";
    4997              : 
    4998       364558 :     case MULT_EXPR:
    4999       364558 :     case INDIRECT_REF:
    5000       364558 :       return "*";
    5001              : 
    5002        14026 :     case TRUNC_DIV_EXPR:
    5003        14026 :     case RDIV_EXPR:
    5004        14026 :       return "/";
    5005              : 
    5006          135 :     case CEIL_DIV_EXPR:
    5007          135 :       return "/[cl]";
    5008              : 
    5009          217 :     case FLOOR_DIV_EXPR:
    5010          217 :       return "/[fl]";
    5011              : 
    5012          126 :     case ROUND_DIV_EXPR:
    5013          126 :       return "/[rd]";
    5014              : 
    5015          447 :     case EXACT_DIV_EXPR:
    5016          447 :       return "/[ex]";
    5017              : 
    5018         6931 :     case TRUNC_MOD_EXPR:
    5019         6931 :       return "%";
    5020              : 
    5021          126 :     case CEIL_MOD_EXPR:
    5022          126 :       return "%[cl]";
    5023              : 
    5024           63 :     case FLOOR_MOD_EXPR:
    5025           63 :       return "%[fl]";
    5026              : 
    5027          126 :     case ROUND_MOD_EXPR:
    5028          126 :       return "%[rd]";
    5029              : 
    5030           53 :     case PREDECREMENT_EXPR:
    5031           53 :       return " --";
    5032              : 
    5033          538 :     case PREINCREMENT_EXPR:
    5034          538 :       return " ++";
    5035              : 
    5036           10 :     case POSTDECREMENT_EXPR:
    5037           10 :       return "-- ";
    5038              : 
    5039         1513 :     case POSTINCREMENT_EXPR:
    5040         1513 :       return "++ ";
    5041              : 
    5042           24 :     case MAX_EXPR:
    5043           24 :       return "max";
    5044              : 
    5045           22 :     case MIN_EXPR:
    5046           22 :       return "min";
    5047              : 
    5048         1422 :     default:
    5049         1422 :       return "<<< ??? >>>";
    5050              :     }
    5051              : }
    5052              : 
    5053              : /* Return the symbol associated with operator OP.  */
    5054              : 
    5055              : static const char *
    5056       590821 : op_symbol (const_tree op, dump_flags_t flags)
    5057              : {
    5058       590821 :   return op_symbol_code (TREE_CODE (op), flags);
    5059              : }
    5060              : 
    5061              : /* Prints the name of a call.  NODE is the CALL_EXPR_FN of a CALL_EXPR or
    5062              :    the gimple_call_fn of a GIMPLE_CALL.  */
    5063              : 
    5064              : void
    5065       184617 : print_call_name (pretty_printer *pp, tree node, dump_flags_t flags)
    5066              : {
    5067       184617 :   tree op0 = node;
    5068       184617 :   int spc = 0;
    5069              : 
    5070       184617 :   if (TREE_CODE (op0) == NON_LVALUE_EXPR)
    5071            4 :     op0 = TREE_OPERAND (op0, 0);
    5072              : 
    5073       184617 :  again:
    5074       364866 :   switch (TREE_CODE (op0))
    5075              :     {
    5076       179161 :     case VAR_DECL:
    5077       179161 :     case PARM_DECL:
    5078       179161 :     case FUNCTION_DECL:
    5079       179161 :       dump_function_name (pp, op0, flags);
    5080       179161 :       break;
    5081              : 
    5082       180249 :     case ADDR_EXPR:
    5083       180249 :     case INDIRECT_REF:
    5084       180249 :     CASE_CONVERT:
    5085       180249 :       op0 = TREE_OPERAND (op0, 0);
    5086       180249 :       goto again;
    5087              : 
    5088            0 :     case COND_EXPR:
    5089            0 :       pp_left_paren (pp);
    5090            0 :       dump_generic_node (pp, TREE_OPERAND (op0, 0), 0, flags, false);
    5091            0 :       pp_string (pp, ") ? ");
    5092            0 :       dump_generic_node (pp, TREE_OPERAND (op0, 1), 0, flags, false);
    5093            0 :       pp_string (pp, " : ");
    5094            0 :       dump_generic_node (pp, TREE_OPERAND (op0, 2), 0, flags, false);
    5095            0 :       break;
    5096              : 
    5097            0 :     case ARRAY_REF:
    5098            0 :       if (VAR_P (TREE_OPERAND (op0, 0)))
    5099            0 :         dump_function_name (pp, TREE_OPERAND (op0, 0), flags);
    5100              :       else
    5101            0 :         dump_generic_node (pp, op0, 0, flags, false);
    5102              :       break;
    5103              : 
    5104            0 :     case MEM_REF:
    5105            0 :       if (integer_zerop (TREE_OPERAND (op0, 1)))
    5106              :         {
    5107            0 :           op0 = TREE_OPERAND (op0, 0);
    5108            0 :           goto again;
    5109              :         }
    5110              :       /* Fallthru.  */
    5111         5456 :     case COMPONENT_REF:
    5112         5456 :     case SSA_NAME:
    5113         5456 :     case OBJ_TYPE_REF:
    5114         5456 :       dump_generic_node (pp, op0, 0, flags, false);
    5115         5456 :       break;
    5116              : 
    5117            0 :     default:
    5118            0 :       NIY;
    5119              :     }
    5120       184617 : }
    5121              : 
    5122              : /* Print the first N characters in the array STR, replacing non-printable
    5123              :    characters (including embedded nuls) with unambiguous escape sequences.  */
    5124              : 
    5125              : void
    5126        61379 : pretty_print_string (pretty_printer *pp, const char *str, size_t n)
    5127              : {
    5128        61379 :   if (str == NULL)
    5129              :     return;
    5130              : 
    5131      1467914 :   for ( ; n; --n, ++str)
    5132              :     {
    5133      1406535 :       switch (str[0])
    5134              :         {
    5135           26 :         case '\b':
    5136           26 :           pp_string (pp, "\\b");
    5137           26 :           break;
    5138              : 
    5139           30 :         case '\f':
    5140           30 :           pp_string (pp, "\\f");
    5141           30 :           break;
    5142              : 
    5143         2942 :         case '\n':
    5144         2942 :           pp_string (pp, "\\n");
    5145         2942 :           break;
    5146              : 
    5147           18 :         case '\r':
    5148           18 :           pp_string (pp, "\\r");
    5149           18 :           break;
    5150              : 
    5151           44 :         case '\t':
    5152           44 :           pp_string (pp, "\\t");
    5153           44 :           break;
    5154              : 
    5155           20 :         case '\v':
    5156           20 :           pp_string (pp, "\\v");
    5157           20 :           break;
    5158              : 
    5159           51 :         case '\\':
    5160           51 :           pp_string (pp, "\\\\");
    5161           51 :           break;
    5162              : 
    5163          146 :         case '\"':
    5164          146 :           pp_string (pp, "\\\"");
    5165          146 :           break;
    5166              : 
    5167        14827 :         case '\'':
    5168        14827 :           pp_string (pp, "\\'");
    5169        14827 :           break;
    5170              : 
    5171      1388431 :         default:
    5172      1388431 :           if (str[0] || n > 1)
    5173              :             {
    5174      1348113 :               if (!ISPRINT (str[0]))
    5175              :                 {
    5176         6835 :                   char buf[5];
    5177         6835 :                   sprintf (buf, "\\x%02x", (unsigned char)str[0]);
    5178         6835 :                   pp_string (pp, buf);
    5179              :                 }
    5180              :               else
    5181      1341278 :                 pp_character (pp, str[0]);
    5182              :               break;
    5183              :             }
    5184              :         }
    5185              :     }
    5186              : }
    5187              : 
    5188              : static void
    5189      6119571 : maybe_init_pretty_print (FILE *file)
    5190              : {
    5191      6119571 :   if (!tree_pp)
    5192              :     {
    5193        18578 :       tree_pp = new pretty_printer ();
    5194        18578 :       pp_needs_newline (tree_pp) = true;
    5195        18578 :       pp_translate_identifiers (tree_pp) = false;
    5196              :     }
    5197              : 
    5198      6119571 :   tree_pp->set_output_stream (file);
    5199      6119571 : }
    5200              : 
    5201              : static void
    5202       570855 : newline_and_indent (pretty_printer *pp, int spc)
    5203              : {
    5204       570855 :   pp_newline (pp);
    5205      7022218 :   INDENT (spc);
    5206       570855 : }
    5207              : 
    5208              : /* Print the identifier ID to PRETTY-PRINTER.  */
    5209              : 
    5210              : void
    5211     15215982 : pp_tree_identifier (pretty_printer *pp, tree id)
    5212              : {
    5213     15215982 :   if (pp_translate_identifiers (pp))
    5214              :     {
    5215      8642839 :       const char *text = identifier_to_locale (IDENTIFIER_POINTER (id));
    5216      8642839 :       pp_append_text (pp, text, text + strlen (text));
    5217              :     }
    5218              :   else
    5219      6573143 :     pp_append_text (pp, IDENTIFIER_POINTER (id),
    5220      6573143 :                     IDENTIFIER_POINTER (id) + IDENTIFIER_LENGTH (id));
    5221     15215982 : }
    5222              : 
    5223              : /* A helper function that is used to dump function information before the
    5224              :    function dump.  */
    5225              : 
    5226              : void
    5227        60361 : dump_function_header (FILE *dump_file, tree fdecl, dump_flags_t flags)
    5228              : {
    5229        60361 :   const char *dname, *aname;
    5230        60361 :   struct cgraph_node *node = cgraph_node::get (fdecl);
    5231        60361 :   struct function *fun = DECL_STRUCT_FUNCTION (fdecl);
    5232              : 
    5233        60361 :   dname = lang_hooks.decl_printable_name (fdecl, 1);
    5234              : 
    5235        60361 :   if (DECL_ASSEMBLER_NAME_SET_P (fdecl))
    5236        60357 :     aname = (IDENTIFIER_POINTER
    5237              :              (DECL_ASSEMBLER_NAME (fdecl)));
    5238              :   else
    5239              :     aname = "<unset-asm-name>";
    5240              : 
    5241        60361 :   fprintf (dump_file, "\n;; Function %s (%s, funcdef_no=%d",
    5242              :            dname, aname, fun->funcdef_no);
    5243        60361 :   if (!(flags & TDF_NOUID))
    5244        56388 :     fprintf (dump_file, ", decl_uid=%d", DECL_UID (fdecl));
    5245        60361 :   if (node)
    5246              :     {
    5247        60361 :       fprintf (dump_file, ", cgraph_uid=%d", node->get_uid ());
    5248        60361 :       fprintf (dump_file, ", symbol_order=%d)%s\n\n", node->order,
    5249        60361 :                node->frequency == NODE_FREQUENCY_HOT
    5250              :                ? " (hot)"
    5251              :                : node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED
    5252        60274 :                ? " (unlikely executed)"
    5253              :                : node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
    5254        59974 :                ? " (executed once)"
    5255              :                : "");
    5256              :     }
    5257              :   else
    5258            0 :     fprintf (dump_file, ")\n\n");
    5259        60361 : }
    5260              : 
    5261              : /* Dump double_int D to pretty_printer PP.  UNS is true
    5262              :    if D is unsigned and false otherwise.  */
    5263              : void
    5264            0 : pp_double_int (pretty_printer *pp, double_int d, bool uns)
    5265              : {
    5266            0 :   if (d.fits_shwi ())
    5267            0 :     pp_wide_integer (pp, d.low);
    5268            0 :   else if (d.fits_uhwi ())
    5269            0 :     pp_unsigned_wide_integer (pp, d.low);
    5270              :   else
    5271              :     {
    5272            0 :       unsigned HOST_WIDE_INT low = d.low;
    5273            0 :       HOST_WIDE_INT high = d.high;
    5274            0 :       if (!uns && d.is_negative ())
    5275              :         {
    5276            0 :           pp_minus (pp);
    5277            0 :           high = ~high + !low;
    5278            0 :           low = -low;
    5279              :         }
    5280              :       /* Would "%x%0*x" or "%x%*0x" get zero-padding on all
    5281              :          systems?  */
    5282            0 :       sprintf (pp_buffer (pp)->m_digit_buffer,
    5283              :                HOST_WIDE_INT_PRINT_DOUBLE_HEX,
    5284              :                (unsigned HOST_WIDE_INT) high, low);
    5285            0 :       pp_string (pp, pp_buffer (pp)->m_digit_buffer);
    5286              :     }
    5287            0 : }
    5288              : 
    5289              : #if __GNUC__ >= 10
    5290              : #  pragma GCC diagnostic pop
    5291              : #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.