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