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