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