1 /* Pretty formatting of GENERIC trees in C syntax.
2 Copyright (C) 2001-2013 Free Software Foundation, Inc.
3 Adapted from c-pretty-print.c by Diego Novillo <dnovillo@redhat.com>
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
23 #include "coretypes.h"
26 #include "tree-pretty-print.h"
28 #include "tree-flow.h"
29 #include "langhooks.h"
30 #include "tree-iterator.h"
31 #include "tree-chrec.h"
33 #include "value-prof.h"
36 /* Local functions, macros and variables. */
37 static const char *op_symbol (const_tree
);
38 static void pretty_print_string (pretty_printer
*, const char*);
39 static void newline_and_indent (pretty_printer
*, int);
40 static void maybe_init_pretty_print (FILE *);
41 static void print_struct_decl (pretty_printer
*, const_tree
, int, int);
42 static void do_niy (pretty_printer
*, const_tree
);
44 #define INDENT(SPACE) do { \
45 int i; for (i = 0; i<SPACE; i++) pp_space (buffer); } while (0)
47 #define NIY do_niy(buffer,node)
49 static pretty_printer buffer
;
50 static int initialized
= 0;
52 /* Try to print something for an unknown tree code. */
55 do_niy (pretty_printer
*buffer
, const_tree node
)
59 pp_string (buffer
, "<<< Unknown tree: ");
60 pp_string (buffer
, tree_code_name
[(int) TREE_CODE (node
)]);
64 len
= TREE_OPERAND_LENGTH (node
);
65 for (i
= 0; i
< len
; ++i
)
67 newline_and_indent (buffer
, 2);
68 dump_generic_node (buffer
, TREE_OPERAND (node
, i
), 2, 0, false);
72 pp_string (buffer
, " >>>");
75 /* Debugging function to print out a generic expression. */
78 debug_generic_expr (tree t
)
80 print_generic_expr (stderr
, t
, TDF_VOPS
|TDF_MEMSYMS
);
81 fprintf (stderr
, "\n");
84 /* Debugging function to print out a generic statement. */
87 debug_generic_stmt (tree t
)
89 print_generic_stmt (stderr
, t
, TDF_VOPS
|TDF_MEMSYMS
);
90 fprintf (stderr
, "\n");
93 /* Debugging function to print out a chain of trees . */
96 debug_tree_chain (tree t
)
98 struct pointer_set_t
*seen
= pointer_set_create ();
102 print_generic_expr (stderr
, t
, TDF_VOPS
|TDF_MEMSYMS
|TDF_UID
);
103 fprintf (stderr
, " ");
105 if (pointer_set_insert (seen
, t
))
107 fprintf (stderr
, "... [cycled back to ");
108 print_generic_expr (stderr
, t
, TDF_VOPS
|TDF_MEMSYMS
|TDF_UID
);
109 fprintf (stderr
, "]");
113 fprintf (stderr
, "\n");
115 pointer_set_destroy (seen
);
118 /* Prints declaration DECL to the FILE with details specified by FLAGS. */
120 print_generic_decl (FILE *file
, tree decl
, int flags
)
122 maybe_init_pretty_print (file
);
123 print_declaration (&buffer
, decl
, 2, flags
);
124 pp_write_text_to_stream (&buffer
);
127 /* Print tree T, and its successors, on file FILE. FLAGS specifies details
128 to show in the dump. See TDF_* in dumpfile.h. */
131 print_generic_stmt (FILE *file
, tree t
, int flags
)
133 maybe_init_pretty_print (file
);
134 dump_generic_node (&buffer
, t
, 0, flags
, true);
135 pp_newline_and_flush (&buffer
);
138 /* Print tree T, and its successors, on file FILE. FLAGS specifies details
139 to show in the dump. See TDF_* in dumpfile.h. The output is indented by
143 print_generic_stmt_indented (FILE *file
, tree t
, int flags
, int indent
)
147 maybe_init_pretty_print (file
);
149 for (i
= 0; i
< indent
; i
++)
151 dump_generic_node (&buffer
, t
, indent
, flags
, true);
152 pp_newline_and_flush (&buffer
);
155 /* Print a single expression T on file FILE. FLAGS specifies details to show
156 in the dump. See TDF_* in dumpfile.h. */
159 print_generic_expr (FILE *file
, tree t
, int flags
)
161 maybe_init_pretty_print (file
);
162 dump_generic_node (&buffer
, t
, 0, flags
, false);
166 /* Dump the name of a _DECL node and its DECL_UID if TDF_UID is set
170 dump_decl_name (pretty_printer
*buffer
, tree node
, int flags
)
172 if (DECL_NAME (node
))
174 if ((flags
& TDF_ASMNAME
) && DECL_ASSEMBLER_NAME_SET_P (node
))
175 pp_tree_identifier (buffer
, DECL_ASSEMBLER_NAME (node
));
177 pp_tree_identifier (buffer
, DECL_NAME (node
));
179 if ((flags
& TDF_UID
) || DECL_NAME (node
) == NULL_TREE
)
181 if (TREE_CODE (node
) == LABEL_DECL
&& LABEL_DECL_UID (node
) != -1)
182 pp_printf (buffer
, "L.%d", (int) LABEL_DECL_UID (node
));
183 else if (TREE_CODE (node
) == DEBUG_EXPR_DECL
)
185 if (flags
& TDF_NOUID
)
186 pp_string (buffer
, "D#xxxx");
188 pp_printf (buffer
, "D#%i", DEBUG_TEMP_UID (node
));
192 char c
= TREE_CODE (node
) == CONST_DECL
? 'C' : 'D';
193 if (flags
& TDF_NOUID
)
194 pp_printf (buffer
, "%c.xxxx", c
);
196 pp_printf (buffer
, "%c.%u", c
, DECL_UID (node
));
199 if ((flags
& TDF_ALIAS
) && DECL_PT_UID (node
) != DECL_UID (node
))
201 if (flags
& TDF_NOUID
)
202 pp_printf (buffer
, "ptD.xxxx");
204 pp_printf (buffer
, "ptD.%u", DECL_PT_UID (node
));
208 /* Like the above, but used for pretty printing function calls. */
211 dump_function_name (pretty_printer
*buffer
, tree node
, int flags
)
213 if (TREE_CODE (node
) == NOP_EXPR
)
214 node
= TREE_OPERAND (node
, 0);
215 if (DECL_NAME (node
) && (flags
& TDF_ASMNAME
) == 0)
216 pp_string (buffer
, lang_hooks
.decl_printable_name (node
, 1));
218 dump_decl_name (buffer
, node
, flags
);
221 /* Dump a function declaration. NODE is the FUNCTION_TYPE. BUFFER, SPC and
222 FLAGS are as in dump_generic_node. */
225 dump_function_declaration (pretty_printer
*buffer
, tree node
,
228 bool wrote_arg
= false;
232 pp_left_paren (buffer
);
234 /* Print the argument types. */
235 arg
= TYPE_ARG_TYPES (node
);
236 while (arg
&& arg
!= void_list_node
&& arg
!= error_mark_node
)
244 dump_generic_node (buffer
, TREE_VALUE (arg
), spc
, flags
, false);
245 arg
= TREE_CHAIN (arg
);
248 /* Drop the trailing void_type_node if we had any previous argument. */
249 if (arg
== void_list_node
&& !wrote_arg
)
250 pp_string (buffer
, "void");
251 /* Properly dump vararg function types. */
252 else if (!arg
&& wrote_arg
)
253 pp_string (buffer
, ", ...");
254 /* Avoid printing any arg for unprototyped functions. */
256 pp_right_paren (buffer
);
259 /* Dump the domain associated with an array. */
262 dump_array_domain (pretty_printer
*buffer
, tree domain
, int spc
, int flags
)
264 pp_left_bracket (buffer
);
267 tree min
= TYPE_MIN_VALUE (domain
);
268 tree max
= TYPE_MAX_VALUE (domain
);
271 && integer_zerop (min
)
272 && host_integerp (max
, 0))
273 pp_wide_integer (buffer
, TREE_INT_CST_LOW (max
) + 1);
277 dump_generic_node (buffer
, min
, spc
, flags
, false);
280 dump_generic_node (buffer
, max
, spc
, flags
, false);
284 pp_string (buffer
, "<unknown>");
285 pp_right_bracket (buffer
);
289 /* Dump OpenMP clause CLAUSE. BUFFER, CLAUSE, SPC and FLAGS are as in
290 dump_generic_node. */
293 dump_omp_clause (pretty_printer
*buffer
, tree clause
, int spc
, int flags
)
297 switch (OMP_CLAUSE_CODE (clause
))
299 case OMP_CLAUSE_PRIVATE
:
302 case OMP_CLAUSE_SHARED
:
305 case OMP_CLAUSE_FIRSTPRIVATE
:
306 name
= "firstprivate";
308 case OMP_CLAUSE_LASTPRIVATE
:
309 name
= "lastprivate";
311 case OMP_CLAUSE_COPYIN
:
314 case OMP_CLAUSE_COPYPRIVATE
:
315 name
= "copyprivate";
318 pp_string (buffer
, name
);
319 pp_left_paren (buffer
);
320 dump_generic_node (buffer
, OMP_CLAUSE_DECL (clause
),
322 pp_right_paren (buffer
);
325 case OMP_CLAUSE_REDUCTION
:
326 pp_string (buffer
, "reduction(");
327 pp_string (buffer
, op_symbol_code (OMP_CLAUSE_REDUCTION_CODE (clause
)));
329 dump_generic_node (buffer
, OMP_CLAUSE_DECL (clause
),
331 pp_right_paren (buffer
);
335 pp_string (buffer
, "if(");
336 dump_generic_node (buffer
, OMP_CLAUSE_IF_EXPR (clause
),
338 pp_right_paren (buffer
);
341 case OMP_CLAUSE_NUM_THREADS
:
342 pp_string (buffer
, "num_threads(");
343 dump_generic_node (buffer
, OMP_CLAUSE_NUM_THREADS_EXPR (clause
),
345 pp_right_paren (buffer
);
348 case OMP_CLAUSE_NOWAIT
:
349 pp_string (buffer
, "nowait");
351 case OMP_CLAUSE_ORDERED
:
352 pp_string (buffer
, "ordered");
355 case OMP_CLAUSE_DEFAULT
:
356 pp_string (buffer
, "default(");
357 switch (OMP_CLAUSE_DEFAULT_KIND (clause
))
359 case OMP_CLAUSE_DEFAULT_UNSPECIFIED
:
361 case OMP_CLAUSE_DEFAULT_SHARED
:
362 pp_string (buffer
, "shared");
364 case OMP_CLAUSE_DEFAULT_NONE
:
365 pp_string (buffer
, "none");
367 case OMP_CLAUSE_DEFAULT_PRIVATE
:
368 pp_string (buffer
, "private");
370 case OMP_CLAUSE_DEFAULT_FIRSTPRIVATE
:
371 pp_string (buffer
, "firstprivate");
376 pp_right_paren (buffer
);
379 case OMP_CLAUSE_SCHEDULE
:
380 pp_string (buffer
, "schedule(");
381 switch (OMP_CLAUSE_SCHEDULE_KIND (clause
))
383 case OMP_CLAUSE_SCHEDULE_STATIC
:
384 pp_string (buffer
, "static");
386 case OMP_CLAUSE_SCHEDULE_DYNAMIC
:
387 pp_string (buffer
, "dynamic");
389 case OMP_CLAUSE_SCHEDULE_GUIDED
:
390 pp_string (buffer
, "guided");
392 case OMP_CLAUSE_SCHEDULE_RUNTIME
:
393 pp_string (buffer
, "runtime");
395 case OMP_CLAUSE_SCHEDULE_AUTO
:
396 pp_string (buffer
, "auto");
401 if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause
))
404 dump_generic_node (buffer
,
405 OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause
),
408 pp_right_paren (buffer
);
411 case OMP_CLAUSE_UNTIED
:
412 pp_string (buffer
, "untied");
415 case OMP_CLAUSE_COLLAPSE
:
416 pp_string (buffer
, "collapse(");
417 dump_generic_node (buffer
,
418 OMP_CLAUSE_COLLAPSE_EXPR (clause
),
420 pp_right_paren (buffer
);
423 case OMP_CLAUSE_FINAL
:
424 pp_string (buffer
, "final(");
425 dump_generic_node (buffer
, OMP_CLAUSE_FINAL_EXPR (clause
),
427 pp_right_paren (buffer
);
430 case OMP_CLAUSE_MERGEABLE
:
431 pp_string (buffer
, "mergeable");
435 /* Should never happen. */
436 dump_generic_node (buffer
, clause
, spc
, flags
, false);
442 /* Dump the list of OpenMP clauses. BUFFER, SPC and FLAGS are as in
443 dump_generic_node. */
446 dump_omp_clauses (pretty_printer
*buffer
, tree clause
, int spc
, int flags
)
454 dump_omp_clause (buffer
, clause
, spc
, flags
);
455 clause
= OMP_CLAUSE_CHAIN (clause
);
463 /* Dump location LOC to BUFFER. */
466 dump_location (pretty_printer
*buffer
, location_t loc
)
468 expanded_location xloc
= expand_location (loc
);
470 pp_left_bracket (buffer
);
473 pp_string (buffer
, xloc
.file
);
474 pp_string (buffer
, " : ");
476 pp_decimal_int (buffer
, xloc
.line
);
477 pp_string (buffer
, "] ");
481 /* Dump lexical block BLOCK. BUFFER, SPC and FLAGS are as in
482 dump_generic_node. */
485 dump_block_node (pretty_printer
*buffer
, tree block
, int spc
, int flags
)
489 pp_printf (buffer
, "BLOCK #%d ", BLOCK_NUMBER (block
));
491 if (flags
& TDF_ADDRESS
)
492 pp_printf (buffer
, "[%p] ", (void *) block
);
494 if (BLOCK_ABSTRACT (block
))
495 pp_string (buffer
, "[abstract] ");
497 if (TREE_ASM_WRITTEN (block
))
498 pp_string (buffer
, "[written] ");
500 if (flags
& TDF_SLIM
)
503 if (BLOCK_SOURCE_LOCATION (block
))
504 dump_location (buffer
, BLOCK_SOURCE_LOCATION (block
));
506 newline_and_indent (buffer
, spc
+ 2);
508 if (BLOCK_SUPERCONTEXT (block
))
510 pp_string (buffer
, "SUPERCONTEXT: ");
511 dump_generic_node (buffer
, BLOCK_SUPERCONTEXT (block
), 0,
512 flags
| TDF_SLIM
, false);
513 newline_and_indent (buffer
, spc
+ 2);
516 if (BLOCK_SUBBLOCKS (block
))
518 pp_string (buffer
, "SUBBLOCKS: ");
519 for (t
= BLOCK_SUBBLOCKS (block
); t
; t
= BLOCK_CHAIN (t
))
521 dump_generic_node (buffer
, t
, 0, flags
| TDF_SLIM
, false);
524 newline_and_indent (buffer
, spc
+ 2);
527 if (BLOCK_CHAIN (block
))
529 pp_string (buffer
, "SIBLINGS: ");
530 for (t
= BLOCK_CHAIN (block
); t
; t
= BLOCK_CHAIN (t
))
532 dump_generic_node (buffer
, t
, 0, flags
| TDF_SLIM
, false);
535 newline_and_indent (buffer
, spc
+ 2);
538 if (BLOCK_VARS (block
))
540 pp_string (buffer
, "VARS: ");
541 for (t
= BLOCK_VARS (block
); t
; t
= TREE_CHAIN (t
))
543 dump_generic_node (buffer
, t
, 0, flags
, false);
546 newline_and_indent (buffer
, spc
+ 2);
549 if (vec_safe_length (BLOCK_NONLOCALIZED_VARS (block
)) > 0)
552 vec
<tree
, va_gc
> *nlv
= BLOCK_NONLOCALIZED_VARS (block
);
554 pp_string (buffer
, "NONLOCALIZED_VARS: ");
555 FOR_EACH_VEC_ELT (*nlv
, i
, t
)
557 dump_generic_node (buffer
, t
, 0, flags
, false);
560 newline_and_indent (buffer
, spc
+ 2);
563 if (BLOCK_ABSTRACT_ORIGIN (block
))
565 pp_string (buffer
, "ABSTRACT_ORIGIN: ");
566 dump_generic_node (buffer
, BLOCK_ABSTRACT_ORIGIN (block
), 0,
567 flags
| TDF_SLIM
, false);
568 newline_and_indent (buffer
, spc
+ 2);
571 if (BLOCK_FRAGMENT_ORIGIN (block
))
573 pp_string (buffer
, "FRAGMENT_ORIGIN: ");
574 dump_generic_node (buffer
, BLOCK_FRAGMENT_ORIGIN (block
), 0,
575 flags
| TDF_SLIM
, false);
576 newline_and_indent (buffer
, spc
+ 2);
579 if (BLOCK_FRAGMENT_CHAIN (block
))
581 pp_string (buffer
, "FRAGMENT_CHAIN: ");
582 for (t
= BLOCK_FRAGMENT_CHAIN (block
); t
; t
= BLOCK_FRAGMENT_CHAIN (t
))
584 dump_generic_node (buffer
, t
, 0, flags
| TDF_SLIM
, false);
587 newline_and_indent (buffer
, spc
+ 2);
593 dump_upc_type_quals (pretty_printer
*buffer
, tree type
, int quals
)
595 gcc_assert (type
&& TYPE_CHECK (type
));
596 gcc_assert (quals
& TYPE_QUAL_SHARED
);
597 if (quals
& TYPE_QUAL_STRICT
)
598 pp_string (buffer
, "strict ");
599 if (quals
& TYPE_QUAL_RELAXED
)
600 pp_string (buffer
, "relaxed ");
601 pp_string (buffer
, "shared ");
602 if (TYPE_HAS_BLOCK_FACTOR (type
))
604 tree block_factor
= TYPE_BLOCK_FACTOR (type
);
605 pp_string (buffer
, "[");
606 pp_wide_integer (buffer
, TREE_INT_CST_LOW (block_factor
));
607 pp_string (buffer
, "] ");
611 /* Dump the node NODE on the pretty_printer BUFFER, SPC spaces of
612 indent. FLAGS specifies details to show in the dump (see TDF_* in
613 dumpfile.h). If IS_STMT is true, the object printed is considered
614 to be a statement and it is terminated by ';' if appropriate. */
617 dump_generic_node (pretty_printer
*buffer
, tree node
, int spc
, int flags
,
626 if (node
== NULL_TREE
)
629 is_expr
= EXPR_P (node
);
631 if (is_stmt
&& (flags
& TDF_STMTADDR
))
632 pp_printf (buffer
, "<&%p> ", (void *)node
);
634 if ((flags
& TDF_LINENO
) && EXPR_HAS_LOCATION (node
))
635 dump_location (buffer
, EXPR_LOCATION (node
));
637 code
= TREE_CODE (node
);
641 pp_string (buffer
, "<<< error >>>");
644 case IDENTIFIER_NODE
:
645 pp_tree_identifier (buffer
, node
);
649 while (node
&& node
!= error_mark_node
)
651 if (TREE_PURPOSE (node
))
653 dump_generic_node (buffer
, TREE_PURPOSE (node
), spc
, flags
, false);
656 dump_generic_node (buffer
, TREE_VALUE (node
), spc
, flags
, false);
657 node
= TREE_CHAIN (node
);
658 if (node
&& TREE_CODE (node
) == TREE_LIST
)
667 dump_generic_node (buffer
, BINFO_TYPE (node
), spc
, flags
, false);
673 if (TREE_VEC_LENGTH (node
) > 0)
675 size_t len
= TREE_VEC_LENGTH (node
);
676 for (i
= 0; i
< len
- 1; i
++)
678 dump_generic_node (buffer
, TREE_VEC_ELT (node
, i
), spc
, flags
,
683 dump_generic_node (buffer
, TREE_VEC_ELT (node
, len
- 1), spc
,
692 case FIXED_POINT_TYPE
:
698 unsigned int quals
= TYPE_QUALS (node
);
699 enum tree_code_class tclass
;
701 if (quals
& TYPE_QUAL_CONST
)
702 pp_string (buffer
, "const ");
703 else if (quals
& TYPE_QUAL_VOLATILE
)
704 pp_string (buffer
, "volatile ");
705 else if (quals
& TYPE_QUAL_RESTRICT
)
706 pp_string (buffer
, "restrict ");
707 else if (quals
& TYPE_QUAL_SHARED
)
708 dump_upc_type_quals (buffer
, node
, quals
);
710 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node
)))
712 pp_string (buffer
, "<address-space-");
713 pp_decimal_int (buffer
, TYPE_ADDR_SPACE (node
));
714 pp_string (buffer
, "> ");
717 tclass
= TREE_CODE_CLASS (TREE_CODE (node
));
719 if (tclass
== tcc_declaration
)
721 if (DECL_NAME (node
))
722 dump_decl_name (buffer
, node
, flags
);
724 pp_string (buffer
, "<unnamed type decl>");
726 else if (tclass
== tcc_type
)
728 if (TYPE_NAME (node
))
730 if (TREE_CODE (TYPE_NAME (node
)) == IDENTIFIER_NODE
)
731 pp_tree_identifier (buffer
, TYPE_NAME (node
));
732 else if (TREE_CODE (TYPE_NAME (node
)) == TYPE_DECL
733 && DECL_NAME (TYPE_NAME (node
)))
734 dump_decl_name (buffer
, TYPE_NAME (node
), flags
);
736 pp_string (buffer
, "<unnamed type>");
738 else if (TREE_CODE (node
) == VECTOR_TYPE
)
740 pp_string (buffer
, "vector");
741 pp_left_paren (buffer
);
742 pp_wide_integer (buffer
, TYPE_VECTOR_SUBPARTS (node
));
743 pp_string (buffer
, ") ");
744 dump_generic_node (buffer
, TREE_TYPE (node
), spc
, flags
, false);
746 else if (TREE_CODE (node
) == INTEGER_TYPE
)
748 if (TYPE_PRECISION (node
) == CHAR_TYPE_SIZE
)
749 pp_string (buffer
, (TYPE_UNSIGNED (node
)
752 else if (TYPE_PRECISION (node
) == SHORT_TYPE_SIZE
)
753 pp_string (buffer
, (TYPE_UNSIGNED (node
)
756 else if (TYPE_PRECISION (node
) == INT_TYPE_SIZE
)
757 pp_string (buffer
, (TYPE_UNSIGNED (node
)
760 else if (TYPE_PRECISION (node
) == LONG_TYPE_SIZE
)
761 pp_string (buffer
, (TYPE_UNSIGNED (node
)
764 else if (TYPE_PRECISION (node
) == LONG_LONG_TYPE_SIZE
)
765 pp_string (buffer
, (TYPE_UNSIGNED (node
)
766 ? "unsigned long long"
767 : "signed long long"));
768 else if (TYPE_PRECISION (node
) >= CHAR_TYPE_SIZE
769 && exact_log2 (TYPE_PRECISION (node
)) != -1)
771 pp_string (buffer
, (TYPE_UNSIGNED (node
) ? "uint" : "int"));
772 pp_decimal_int (buffer
, TYPE_PRECISION (node
));
773 pp_string (buffer
, "_t");
777 pp_string (buffer
, (TYPE_UNSIGNED (node
)
778 ? "<unnamed-unsigned:"
779 : "<unnamed-signed:"));
780 pp_decimal_int (buffer
, TYPE_PRECISION (node
));
784 else if (TREE_CODE (node
) == COMPLEX_TYPE
)
786 pp_string (buffer
, "__complex__ ");
787 dump_generic_node (buffer
, TREE_TYPE (node
), spc
, flags
, false);
789 else if (TREE_CODE (node
) == REAL_TYPE
)
791 pp_string (buffer
, "<float:");
792 pp_decimal_int (buffer
, TYPE_PRECISION (node
));
795 else if (TREE_CODE (node
) == FIXED_POINT_TYPE
)
797 pp_string (buffer
, "<fixed-point-");
798 pp_string (buffer
, TYPE_SATURATING (node
) ? "sat:" : "nonsat:");
799 pp_decimal_int (buffer
, TYPE_PRECISION (node
));
802 else if (TREE_CODE (node
) == VOID_TYPE
)
803 pp_string (buffer
, "void");
805 pp_string (buffer
, "<unnamed type>");
812 str
= (TREE_CODE (node
) == POINTER_TYPE
? "*" : "&");
814 if (TREE_TYPE (node
) == NULL
)
816 pp_string (buffer
, str
);
817 pp_string (buffer
, "<null type>");
819 else if (TREE_CODE (TREE_TYPE (node
)) == FUNCTION_TYPE
)
821 tree fnode
= TREE_TYPE (node
);
823 dump_generic_node (buffer
, TREE_TYPE (fnode
), spc
, flags
, false);
825 pp_left_paren (buffer
);
826 pp_string (buffer
, str
);
827 if (TYPE_NAME (node
) && DECL_NAME (TYPE_NAME (node
)))
828 dump_decl_name (buffer
, TYPE_NAME (node
), flags
);
829 else if (flags
& TDF_NOUID
)
830 pp_printf (buffer
, "<Txxxx>");
832 pp_printf (buffer
, "<T%x>", TYPE_UID (node
));
834 pp_right_paren (buffer
);
835 dump_function_declaration (buffer
, fnode
, spc
, flags
);
839 unsigned int quals
= TYPE_QUALS (node
);
841 dump_generic_node (buffer
, TREE_TYPE (node
), spc
, flags
, false);
843 pp_string (buffer
, str
);
845 if (quals
& TYPE_QUAL_CONST
)
846 pp_string (buffer
, " const");
847 if (quals
& TYPE_QUAL_VOLATILE
)
848 pp_string (buffer
, " volatile");
849 if (quals
& TYPE_QUAL_RESTRICT
)
850 pp_string (buffer
, " restrict");
851 if (quals
& TYPE_QUAL_SHARED
)
853 if (quals
& TYPE_QUAL_STRICT
)
854 pp_string (buffer
, " strict");
855 if (quals
& TYPE_QUAL_RELAXED
)
856 pp_string (buffer
, " relaxed");
857 pp_string (buffer
, " shared");
860 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node
)))
862 pp_string (buffer
, " <address-space-");
863 pp_decimal_int (buffer
, TYPE_ADDR_SPACE (node
));
867 if (TYPE_REF_CAN_ALIAS_ALL (node
))
868 pp_string (buffer
, " {ref-all}");
878 if (integer_zerop (TREE_OPERAND (node
, 1))
879 /* Dump the types of INTEGER_CSTs explicitly, for we can't
880 infer them and MEM_ATTR caching will share MEM_REFs
881 with differently-typed op0s. */
882 && TREE_CODE (TREE_OPERAND (node
, 0)) != INTEGER_CST
883 /* Released SSA_NAMES have no TREE_TYPE. */
884 && TREE_TYPE (TREE_OPERAND (node
, 0)) != NULL_TREE
885 /* Same pointer types, but ignoring POINTER_TYPE vs.
887 && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node
, 0)))
888 == TREE_TYPE (TREE_TYPE (TREE_OPERAND (node
, 1))))
889 && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (node
, 0)))
890 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (node
, 1))))
891 && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node
, 0)))
892 == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node
, 1))))
893 /* Same value types ignoring qualifiers. */
894 && (TYPE_MAIN_VARIANT (TREE_TYPE (node
))
896 (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node
, 1))))))
898 if (TREE_CODE (TREE_OPERAND (node
, 0)) != ADDR_EXPR
)
901 dump_generic_node (buffer
, TREE_OPERAND (node
, 0),
905 dump_generic_node (buffer
,
906 TREE_OPERAND (TREE_OPERAND (node
, 0), 0),
913 pp_string (buffer
, "MEM[");
914 pp_left_paren (buffer
);
915 ptype
= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (node
, 1)));
916 dump_generic_node (buffer
, ptype
,
917 spc
, flags
| TDF_SLIM
, false);
918 pp_right_paren (buffer
);
919 dump_generic_node (buffer
, TREE_OPERAND (node
, 0),
921 if (!integer_zerop (TREE_OPERAND (node
, 1)))
923 pp_string (buffer
, " + ");
924 dump_generic_node (buffer
, TREE_OPERAND (node
, 1),
927 pp_right_bracket (buffer
);
934 const char *sep
= "";
937 pp_string (buffer
, "MEM[");
939 if (TREE_CODE (TMR_BASE (node
)) == ADDR_EXPR
)
941 pp_string (buffer
, sep
);
943 pp_string (buffer
, "symbol: ");
944 dump_generic_node (buffer
, TREE_OPERAND (TMR_BASE (node
), 0),
949 pp_string (buffer
, sep
);
951 pp_string (buffer
, "base: ");
952 dump_generic_node (buffer
, TMR_BASE (node
), spc
, flags
, false);
954 tmp
= TMR_INDEX2 (node
);
957 pp_string (buffer
, sep
);
959 pp_string (buffer
, "base: ");
960 dump_generic_node (buffer
, tmp
, spc
, flags
, false);
962 tmp
= TMR_INDEX (node
);
965 pp_string (buffer
, sep
);
967 pp_string (buffer
, "index: ");
968 dump_generic_node (buffer
, tmp
, spc
, flags
, false);
970 tmp
= TMR_STEP (node
);
973 pp_string (buffer
, sep
);
975 pp_string (buffer
, "step: ");
976 dump_generic_node (buffer
, tmp
, spc
, flags
, false);
978 tmp
= TMR_OFFSET (node
);
981 pp_string (buffer
, sep
);
983 pp_string (buffer
, "offset: ");
984 dump_generic_node (buffer
, tmp
, spc
, flags
, false);
986 pp_right_bracket (buffer
);
994 /* Print the innermost component type. */
995 for (tmp
= TREE_TYPE (node
); TREE_CODE (tmp
) == ARRAY_TYPE
;
996 tmp
= TREE_TYPE (tmp
))
998 dump_generic_node (buffer
, tmp
, spc
, flags
, false);
1000 /* Print the dimensions. */
1001 for (tmp
= node
; TREE_CODE (tmp
) == ARRAY_TYPE
; tmp
= TREE_TYPE (tmp
))
1002 dump_array_domain (buffer
, TYPE_DOMAIN (tmp
), spc
, flags
);
1008 case QUAL_UNION_TYPE
:
1010 unsigned int quals
= TYPE_QUALS (node
);
1012 if (quals
& TYPE_QUAL_CONST
)
1013 pp_string (buffer
, "const ");
1014 if (quals
& TYPE_QUAL_VOLATILE
)
1015 pp_string (buffer
, "volatile ");
1016 if (quals
& TYPE_QUAL_SHARED
)
1017 dump_upc_type_quals (buffer
, node
, quals
);
1019 /* Print the name of the structure. */
1020 if (TREE_CODE (node
) == RECORD_TYPE
)
1021 pp_string (buffer
, "struct ");
1022 else if (TREE_CODE (node
) == UNION_TYPE
)
1023 pp_string (buffer
, "union ");
1025 if (upc_pts_rep_type_node
&& node
== upc_pts_rep_type_node
)
1026 /* Normally, builtin types will not be printed.
1027 We short-circuit that check for the UPC "struct PTS"
1028 representation type. */
1029 pp_string (buffer
, "upc_shared_ptr_t");
1030 else if (TYPE_NAME (node
))
1031 dump_generic_node (buffer
, TYPE_NAME (node
), spc
, flags
, false);
1032 else if (!(flags
& TDF_SLIM
))
1033 /* FIXME: If we eliminate the 'else' above and attempt
1034 to show the fields for named types, we may get stuck
1035 following a cycle of pointers to structs. The alleged
1036 self-reference check in print_struct_decl will not detect
1037 cycles involving more than one pointer or struct type. */
1038 print_struct_decl (buffer
, node
, spc
, flags
);
1047 if (TREE_CODE (TREE_TYPE (node
)) == POINTER_TYPE
)
1049 /* In the case of a pointer, one may want to divide by the
1050 size of the pointed-to type. Unfortunately, this not
1051 straightforward. The C front-end maps expressions
1056 in such a way that the two INTEGER_CST nodes for "5" have
1057 different values but identical types. In the latter
1058 case, the 5 is multiplied by sizeof (int) in c-common.c
1059 (pointer_int_sum) to convert it to a byte address, and
1060 yet the type of the node is left unchanged. Argh. What
1061 is consistent though is that the number value corresponds
1062 to bytes (UNITS) offset.
1064 NB: Neither of the following divisors can be trivially
1065 used to recover the original literal:
1067 TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (node)))
1068 TYPE_PRECISION (TREE_TYPE (TREE_TYPE (node))) */
1069 pp_wide_integer (buffer
, TREE_INT_CST_LOW (node
));
1070 pp_string (buffer
, "B"); /* pseudo-unit */
1072 else if (host_integerp (node
, 0))
1073 pp_wide_integer (buffer
, TREE_INT_CST_LOW (node
));
1074 else if (host_integerp (node
, 1))
1075 pp_unsigned_wide_integer (buffer
, TREE_INT_CST_LOW (node
));
1079 unsigned HOST_WIDE_INT low
= TREE_INT_CST_LOW (val
);
1080 HOST_WIDE_INT high
= TREE_INT_CST_HIGH (val
);
1082 if (tree_int_cst_sgn (val
) < 0)
1085 high
= ~high
+ !low
;
1088 /* Would "%x%0*x" or "%x%*0x" get zero-padding on all
1090 sprintf (pp_buffer (buffer
)->digit_buffer
,
1091 HOST_WIDE_INT_PRINT_DOUBLE_HEX
,
1092 (unsigned HOST_WIDE_INT
) high
, low
);
1093 pp_string (buffer
, pp_buffer (buffer
)->digit_buffer
);
1098 /* Code copied from print_node. */
1101 if (TREE_OVERFLOW (node
))
1102 pp_string (buffer
, " overflow");
1104 #if !defined(REAL_IS_NOT_DOUBLE) || defined(REAL_ARITHMETIC)
1105 d
= TREE_REAL_CST (node
);
1106 if (REAL_VALUE_ISINF (d
))
1107 pp_string (buffer
, REAL_VALUE_NEGATIVE (d
) ? " -Inf" : " Inf");
1108 else if (REAL_VALUE_ISNAN (d
))
1109 pp_string (buffer
, " Nan");
1113 real_to_decimal (string
, &d
, sizeof (string
), 0, 1);
1114 pp_string (buffer
, string
);
1119 unsigned char *p
= (unsigned char *) &TREE_REAL_CST (node
);
1120 pp_string (buffer
, "0x");
1121 for (i
= 0; i
< sizeof TREE_REAL_CST (node
); i
++)
1122 output_formatted_integer (buffer
, "%02x", *p
++);
1131 fixed_to_decimal (string
, TREE_FIXED_CST_PTR (node
), sizeof (string
));
1132 pp_string (buffer
, string
);
1137 pp_string (buffer
, "__complex__ (");
1138 dump_generic_node (buffer
, TREE_REALPART (node
), spc
, flags
, false);
1139 pp_string (buffer
, ", ");
1140 dump_generic_node (buffer
, TREE_IMAGPART (node
), spc
, flags
, false);
1141 pp_right_paren (buffer
);
1145 pp_string (buffer
, "\"");
1146 pretty_print_string (buffer
, TREE_STRING_POINTER (node
));
1147 pp_string (buffer
, "\"");
1153 pp_string (buffer
, "{ ");
1154 for (i
= 0; i
< VECTOR_CST_NELTS (node
); ++i
)
1157 pp_string (buffer
, ", ");
1158 dump_generic_node (buffer
, VECTOR_CST_ELT (node
, i
),
1161 pp_string (buffer
, " }");
1167 dump_generic_node (buffer
, TREE_TYPE (node
), spc
, flags
, false);
1169 if (TREE_CODE (node
) == METHOD_TYPE
)
1171 if (TYPE_METHOD_BASETYPE (node
))
1172 dump_decl_name (buffer
, TYPE_NAME (TYPE_METHOD_BASETYPE (node
)),
1175 pp_string (buffer
, "<null method basetype>");
1176 pp_colon_colon (buffer
);
1178 if (TYPE_NAME (node
) && DECL_NAME (TYPE_NAME (node
)))
1179 dump_decl_name (buffer
, TYPE_NAME (node
), flags
);
1180 else if (flags
& TDF_NOUID
)
1181 pp_printf (buffer
, "<Txxxx>");
1183 pp_printf (buffer
, "<T%x>", TYPE_UID (node
));
1184 dump_function_declaration (buffer
, node
, spc
, flags
);
1189 dump_decl_name (buffer
, node
, flags
);
1193 if (DECL_NAME (node
))
1194 dump_decl_name (buffer
, node
, flags
);
1195 else if (LABEL_DECL_UID (node
) != -1)
1196 pp_printf (buffer
, "<L%d>", (int) LABEL_DECL_UID (node
));
1199 if (flags
& TDF_NOUID
)
1200 pp_string (buffer
, "<D.xxxx>");
1202 pp_printf (buffer
, "<D.%u>", DECL_UID (node
));
1207 if (DECL_IS_BUILTIN (node
))
1209 /* Don't print the declaration of built-in types. */
1212 if (DECL_NAME (node
))
1213 dump_decl_name (buffer
, node
, flags
);
1214 else if (TYPE_NAME (TREE_TYPE (node
)) != node
)
1216 if ((TREE_CODE (TREE_TYPE (node
)) == RECORD_TYPE
1217 || TREE_CODE (TREE_TYPE (node
)) == UNION_TYPE
)
1218 && TYPE_METHODS (TREE_TYPE (node
)))
1220 /* The type is a c++ class: all structures have at least
1222 pp_string (buffer
, "class ");
1223 dump_generic_node (buffer
, TREE_TYPE (node
), spc
, flags
, false);
1228 (TREE_CODE (TREE_TYPE (node
)) == UNION_TYPE
1229 ? "union" : "struct "));
1230 dump_generic_node (buffer
, TREE_TYPE (node
), spc
, flags
, false);
1234 pp_string (buffer
, "<anon>");
1240 case DEBUG_EXPR_DECL
:
1241 case NAMESPACE_DECL
:
1242 dump_decl_name (buffer
, node
, flags
);
1246 pp_string (buffer
, "<retval>");
1250 op0
= TREE_OPERAND (node
, 0);
1253 && (TREE_CODE (op0
) == INDIRECT_REF
1254 || (TREE_CODE (op0
) == MEM_REF
1255 && TREE_CODE (TREE_OPERAND (op0
, 0)) != ADDR_EXPR
1256 && integer_zerop (TREE_OPERAND (op0
, 1))
1257 /* Dump the types of INTEGER_CSTs explicitly, for we
1258 can't infer them and MEM_ATTR caching will share
1259 MEM_REFs with differently-typed op0s. */
1260 && TREE_CODE (TREE_OPERAND (op0
, 0)) != INTEGER_CST
1261 /* Released SSA_NAMES have no TREE_TYPE. */
1262 && TREE_TYPE (TREE_OPERAND (op0
, 0)) != NULL_TREE
1263 /* Same pointer types, but ignoring POINTER_TYPE vs.
1265 && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0
, 0)))
1266 == TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0
, 1))))
1267 && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0
, 0)))
1268 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0
, 1))))
1269 && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0
, 0)))
1270 == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0
, 1))))
1271 /* Same value types ignoring qualifiers. */
1272 && (TYPE_MAIN_VARIANT (TREE_TYPE (op0
))
1273 == TYPE_MAIN_VARIANT
1274 (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0
, 1))))))))
1276 op0
= TREE_OPERAND (op0
, 0);
1279 if (op_prio (op0
) < op_prio (node
))
1280 pp_left_paren (buffer
);
1281 dump_generic_node (buffer
, op0
, spc
, flags
, false);
1282 if (op_prio (op0
) < op_prio (node
))
1283 pp_right_paren (buffer
);
1284 pp_string (buffer
, str
);
1285 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1286 op0
= component_ref_field_offset (node
);
1287 if (op0
&& TREE_CODE (op0
) != INTEGER_CST
)
1289 pp_string (buffer
, "{off: ");
1290 dump_generic_node (buffer
, op0
, spc
, flags
, false);
1291 pp_right_brace (buffer
);
1296 pp_string (buffer
, "BIT_FIELD_REF <");
1297 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1298 pp_string (buffer
, ", ");
1299 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1300 pp_string (buffer
, ", ");
1301 dump_generic_node (buffer
, TREE_OPERAND (node
, 2), spc
, flags
, false);
1302 pp_greater (buffer
);
1306 case ARRAY_RANGE_REF
:
1307 op0
= TREE_OPERAND (node
, 0);
1308 if (op_prio (op0
) < op_prio (node
))
1309 pp_left_paren (buffer
);
1310 dump_generic_node (buffer
, op0
, spc
, flags
, false);
1311 if (op_prio (op0
) < op_prio (node
))
1312 pp_right_paren (buffer
);
1313 pp_left_bracket (buffer
);
1314 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1315 if (TREE_CODE (node
) == ARRAY_RANGE_REF
)
1316 pp_string (buffer
, " ...");
1317 pp_right_bracket (buffer
);
1319 op0
= array_ref_low_bound (node
);
1320 op1
= array_ref_element_size (node
);
1322 if (!integer_zerop (op0
)
1323 || TREE_OPERAND (node
, 2)
1324 || TREE_OPERAND (node
, 3))
1326 pp_string (buffer
, "{lb: ");
1327 dump_generic_node (buffer
, op0
, spc
, flags
, false);
1328 pp_string (buffer
, " sz: ");
1329 dump_generic_node (buffer
, op1
, spc
, flags
, false);
1330 pp_right_brace (buffer
);
1336 unsigned HOST_WIDE_INT ix
;
1338 bool is_struct_init
= false;
1339 bool is_array_init
= false;
1340 double_int curidx
= double_int_zero
;
1341 pp_left_brace (buffer
);
1342 if (TREE_CLOBBER_P (node
))
1343 pp_string (buffer
, "CLOBBER");
1344 else if (TREE_CODE (TREE_TYPE (node
)) == RECORD_TYPE
1345 || TREE_CODE (TREE_TYPE (node
)) == UNION_TYPE
)
1346 is_struct_init
= true;
1347 else if (TREE_CODE (TREE_TYPE (node
)) == ARRAY_TYPE
1348 && TYPE_DOMAIN (TREE_TYPE (node
))
1349 && TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node
)))
1350 && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node
))))
1353 tree minv
= TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node
)));
1354 is_array_init
= true;
1355 curidx
= tree_to_double_int (minv
);
1357 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (node
), ix
, field
, val
)
1364 dump_generic_node (buffer
, field
, spc
, flags
, false);
1367 else if (is_array_init
1368 && (TREE_CODE (field
) != INTEGER_CST
1369 || tree_to_double_int (field
) != curidx
))
1371 pp_left_bracket (buffer
);
1372 if (TREE_CODE (field
) == RANGE_EXPR
)
1374 dump_generic_node (buffer
, TREE_OPERAND (field
, 0), spc
,
1376 pp_string (buffer
, " ... ");
1377 dump_generic_node (buffer
, TREE_OPERAND (field
, 1), spc
,
1379 if (TREE_CODE (TREE_OPERAND (field
, 1)) == INTEGER_CST
)
1380 curidx
= tree_to_double_int (TREE_OPERAND (field
, 1));
1383 dump_generic_node (buffer
, field
, spc
, flags
, false);
1384 if (TREE_CODE (field
) == INTEGER_CST
)
1385 curidx
= tree_to_double_int (field
);
1386 pp_string (buffer
, "]=");
1390 curidx
+= double_int_one
;
1391 if (val
&& TREE_CODE (val
) == ADDR_EXPR
)
1392 if (TREE_CODE (TREE_OPERAND (val
, 0)) == FUNCTION_DECL
)
1393 val
= TREE_OPERAND (val
, 0);
1394 if (val
&& TREE_CODE (val
) == FUNCTION_DECL
)
1395 dump_decl_name (buffer
, val
, flags
);
1397 dump_generic_node (buffer
, val
, spc
, flags
, false);
1398 if (ix
!= vec_safe_length (CONSTRUCTOR_ELTS (node
)) - 1)
1404 pp_right_brace (buffer
);
1411 if (flags
& TDF_SLIM
)
1413 pp_string (buffer
, "<COMPOUND_EXPR>");
1417 dump_generic_node (buffer
, TREE_OPERAND (node
, 0),
1418 spc
, flags
, !(flags
& TDF_SLIM
));
1419 if (flags
& TDF_SLIM
)
1420 newline_and_indent (buffer
, spc
);
1427 for (tp
= &TREE_OPERAND (node
, 1);
1428 TREE_CODE (*tp
) == COMPOUND_EXPR
;
1429 tp
= &TREE_OPERAND (*tp
, 1))
1431 dump_generic_node (buffer
, TREE_OPERAND (*tp
, 0),
1432 spc
, flags
, !(flags
& TDF_SLIM
));
1433 if (flags
& TDF_SLIM
)
1434 newline_and_indent (buffer
, spc
);
1442 dump_generic_node (buffer
, *tp
, spc
, flags
, !(flags
& TDF_SLIM
));
1446 case STATEMENT_LIST
:
1448 tree_stmt_iterator si
;
1451 if (flags
& TDF_SLIM
)
1453 pp_string (buffer
, "<STATEMENT_LIST>");
1457 for (si
= tsi_start (node
); !tsi_end_p (si
); tsi_next (&si
))
1460 newline_and_indent (buffer
, spc
);
1463 dump_generic_node (buffer
, tsi_stmt (si
), spc
, flags
, true);
1470 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
,
1475 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
,
1480 pp_string (buffer
, "TARGET_EXPR <");
1481 dump_generic_node (buffer
, TARGET_EXPR_SLOT (node
), spc
, flags
, false);
1484 dump_generic_node (buffer
, TARGET_EXPR_INITIAL (node
), spc
, flags
, false);
1485 pp_greater (buffer
);
1489 print_declaration (buffer
, DECL_EXPR_DECL (node
), spc
, flags
);
1494 if (TREE_TYPE (node
) == NULL
|| TREE_TYPE (node
) == void_type_node
)
1496 pp_string (buffer
, "if (");
1497 dump_generic_node (buffer
, COND_EXPR_COND (node
), spc
, flags
, false);
1498 pp_right_paren (buffer
);
1499 /* The lowered cond_exprs should always be printed in full. */
1500 if (COND_EXPR_THEN (node
)
1501 && (IS_EMPTY_STMT (COND_EXPR_THEN (node
))
1502 || TREE_CODE (COND_EXPR_THEN (node
)) == GOTO_EXPR
)
1503 && COND_EXPR_ELSE (node
)
1504 && (IS_EMPTY_STMT (COND_EXPR_ELSE (node
))
1505 || TREE_CODE (COND_EXPR_ELSE (node
)) == GOTO_EXPR
))
1508 dump_generic_node (buffer
, COND_EXPR_THEN (node
),
1510 if (!IS_EMPTY_STMT (COND_EXPR_ELSE (node
)))
1512 pp_string (buffer
, " else ");
1513 dump_generic_node (buffer
, COND_EXPR_ELSE (node
),
1517 else if (!(flags
& TDF_SLIM
))
1519 /* Output COND_EXPR_THEN. */
1520 if (COND_EXPR_THEN (node
))
1522 newline_and_indent (buffer
, spc
+2);
1523 pp_left_brace (buffer
);
1524 newline_and_indent (buffer
, spc
+4);
1525 dump_generic_node (buffer
, COND_EXPR_THEN (node
), spc
+4,
1527 newline_and_indent (buffer
, spc
+2);
1528 pp_right_brace (buffer
);
1531 /* Output COND_EXPR_ELSE. */
1532 if (COND_EXPR_ELSE (node
)
1533 && !IS_EMPTY_STMT (COND_EXPR_ELSE (node
)))
1535 newline_and_indent (buffer
, spc
);
1536 pp_string (buffer
, "else");
1537 newline_and_indent (buffer
, spc
+2);
1538 pp_left_brace (buffer
);
1539 newline_and_indent (buffer
, spc
+4);
1540 dump_generic_node (buffer
, COND_EXPR_ELSE (node
), spc
+4,
1542 newline_and_indent (buffer
, spc
+2);
1543 pp_right_brace (buffer
);
1550 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1552 pp_question (buffer
);
1554 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1558 dump_generic_node (buffer
, TREE_OPERAND (node
, 2), spc
, flags
, false);
1563 pp_left_brace (buffer
);
1564 if (!(flags
& TDF_SLIM
))
1566 if (BIND_EXPR_VARS (node
))
1568 pp_newline (buffer
);
1570 for (op0
= BIND_EXPR_VARS (node
); op0
; op0
= DECL_CHAIN (op0
))
1572 print_declaration (buffer
, op0
, spc
+2, flags
);
1573 pp_newline (buffer
);
1577 newline_and_indent (buffer
, spc
+2);
1578 dump_generic_node (buffer
, BIND_EXPR_BODY (node
), spc
+2, flags
, true);
1579 newline_and_indent (buffer
, spc
);
1580 pp_right_brace (buffer
);
1586 print_call_name (buffer
, CALL_EXPR_FN (node
), flags
);
1588 /* Print parameters. */
1590 pp_left_paren (buffer
);
1593 call_expr_arg_iterator iter
;
1594 FOR_EACH_CALL_EXPR_ARG (arg
, iter
, node
)
1596 dump_generic_node (buffer
, arg
, spc
, flags
, false);
1597 if (more_call_expr_args_p (&iter
))
1604 if (CALL_EXPR_VA_ARG_PACK (node
))
1606 if (call_expr_nargs (node
) > 0)
1611 pp_string (buffer
, "__builtin_va_arg_pack ()");
1613 pp_right_paren (buffer
);
1615 op1
= CALL_EXPR_STATIC_CHAIN (node
);
1618 pp_string (buffer
, " [static-chain: ");
1619 dump_generic_node (buffer
, op1
, spc
, flags
, false);
1620 pp_right_bracket (buffer
);
1623 if (CALL_EXPR_RETURN_SLOT_OPT (node
))
1624 pp_string (buffer
, " [return slot optimization]");
1625 if (CALL_EXPR_TAILCALL (node
))
1626 pp_string (buffer
, " [tail call]");
1629 case WITH_CLEANUP_EXPR
:
1633 case CLEANUP_POINT_EXPR
:
1634 pp_string (buffer
, "<<cleanup_point ");
1635 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1636 pp_string (buffer
, ">>");
1639 case PLACEHOLDER_EXPR
:
1640 pp_string (buffer
, "<PLACEHOLDER_EXPR ");
1641 dump_generic_node (buffer
, TREE_TYPE (node
), spc
, flags
, false);
1642 pp_greater (buffer
);
1645 /* Binary arithmetic and logic expressions. */
1646 case WIDEN_SUM_EXPR
:
1647 case WIDEN_MULT_EXPR
:
1649 case MULT_HIGHPART_EXPR
:
1651 case POINTER_PLUS_EXPR
:
1653 case TRUNC_DIV_EXPR
:
1655 case FLOOR_DIV_EXPR
:
1656 case ROUND_DIV_EXPR
:
1657 case TRUNC_MOD_EXPR
:
1659 case FLOOR_MOD_EXPR
:
1660 case ROUND_MOD_EXPR
:
1662 case EXACT_DIV_EXPR
:
1667 case VEC_LSHIFT_EXPR
:
1668 case VEC_RSHIFT_EXPR
:
1669 case WIDEN_LSHIFT_EXPR
:
1673 case TRUTH_ANDIF_EXPR
:
1674 case TRUTH_ORIF_EXPR
:
1675 case TRUTH_AND_EXPR
:
1677 case TRUTH_XOR_EXPR
:
1691 case UNORDERED_EXPR
:
1693 const char *op
= op_symbol (node
);
1694 op0
= TREE_OPERAND (node
, 0);
1695 op1
= TREE_OPERAND (node
, 1);
1697 /* When the operands are expressions with less priority,
1698 keep semantics of the tree representation. */
1699 if (op_prio (op0
) <= op_prio (node
))
1701 pp_left_paren (buffer
);
1702 dump_generic_node (buffer
, op0
, spc
, flags
, false);
1703 pp_right_paren (buffer
);
1706 dump_generic_node (buffer
, op0
, spc
, flags
, false);
1709 pp_string (buffer
, op
);
1712 /* When the operands are expressions with less priority,
1713 keep semantics of the tree representation. */
1714 if (op_prio (op1
) <= op_prio (node
))
1716 pp_left_paren (buffer
);
1717 dump_generic_node (buffer
, op1
, spc
, flags
, false);
1718 pp_right_paren (buffer
);
1721 dump_generic_node (buffer
, op1
, spc
, flags
, false);
1725 /* Unary arithmetic and logic expressions. */
1728 case TRUTH_NOT_EXPR
:
1730 case PREDECREMENT_EXPR
:
1731 case PREINCREMENT_EXPR
:
1733 if (TREE_CODE (node
) == ADDR_EXPR
1734 && (TREE_CODE (TREE_OPERAND (node
, 0)) == STRING_CST
1735 || TREE_CODE (TREE_OPERAND (node
, 0)) == FUNCTION_DECL
))
1736 ; /* Do not output '&' for strings and function pointers. */
1738 pp_string (buffer
, op_symbol (node
));
1740 if (op_prio (TREE_OPERAND (node
, 0)) < op_prio (node
))
1742 pp_left_paren (buffer
);
1743 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1744 pp_right_paren (buffer
);
1747 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1750 case POSTDECREMENT_EXPR
:
1751 case POSTINCREMENT_EXPR
:
1752 if (op_prio (TREE_OPERAND (node
, 0)) < op_prio (node
))
1754 pp_left_paren (buffer
);
1755 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1756 pp_right_paren (buffer
);
1759 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1760 pp_string (buffer
, op_symbol (node
));
1764 pp_string (buffer
, "MIN_EXPR <");
1765 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1766 pp_string (buffer
, ", ");
1767 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1768 pp_greater (buffer
);
1772 pp_string (buffer
, "MAX_EXPR <");
1773 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1774 pp_string (buffer
, ", ");
1775 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1776 pp_greater (buffer
);
1780 pp_string (buffer
, "ABS_EXPR <");
1781 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1782 pp_greater (buffer
);
1789 case ADDR_SPACE_CONVERT_EXPR
:
1790 case FIXED_CONVERT_EXPR
:
1791 case FIX_TRUNC_EXPR
:
1794 type
= TREE_TYPE (node
);
1795 op0
= TREE_OPERAND (node
, 0);
1796 if (type
!= TREE_TYPE (op0
))
1798 pp_left_paren (buffer
);
1799 dump_generic_node (buffer
, type
, spc
, flags
, false);
1800 pp_string (buffer
, ") ");
1802 if (op_prio (op0
) < op_prio (node
))
1803 pp_left_paren (buffer
);
1804 dump_generic_node (buffer
, op0
, spc
, flags
, false);
1805 if (op_prio (op0
) < op_prio (node
))
1806 pp_right_paren (buffer
);
1809 case VIEW_CONVERT_EXPR
:
1810 pp_string (buffer
, "VIEW_CONVERT_EXPR<");
1811 dump_generic_node (buffer
, TREE_TYPE (node
), spc
, flags
, false);
1812 pp_string (buffer
, ">(");
1813 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1814 pp_right_paren (buffer
);
1818 pp_string (buffer
, "((");
1819 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1820 pp_string (buffer
, "))");
1823 case NON_LVALUE_EXPR
:
1824 pp_string (buffer
, "NON_LVALUE_EXPR <");
1825 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1826 pp_greater (buffer
);
1830 pp_string (buffer
, "SAVE_EXPR <");
1831 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1832 pp_greater (buffer
);
1836 pp_string (buffer
, "COMPLEX_EXPR <");
1837 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1838 pp_string (buffer
, ", ");
1839 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1840 pp_greater (buffer
);
1844 pp_string (buffer
, "CONJ_EXPR <");
1845 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1846 pp_greater (buffer
);
1850 pp_string (buffer
, "REALPART_EXPR <");
1851 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1852 pp_greater (buffer
);
1856 pp_string (buffer
, "IMAGPART_EXPR <");
1857 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1858 pp_greater (buffer
);
1862 pp_string (buffer
, "VA_ARG_EXPR <");
1863 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1864 pp_greater (buffer
);
1867 case TRY_FINALLY_EXPR
:
1868 case TRY_CATCH_EXPR
:
1869 pp_string (buffer
, "try");
1870 newline_and_indent (buffer
, spc
+2);
1871 pp_left_brace (buffer
);
1872 newline_and_indent (buffer
, spc
+4);
1873 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
+4, flags
, true);
1874 newline_and_indent (buffer
, spc
+2);
1875 pp_right_brace (buffer
);
1876 newline_and_indent (buffer
, spc
);
1878 (TREE_CODE (node
) == TRY_CATCH_EXPR
) ? "catch" : "finally");
1879 newline_and_indent (buffer
, spc
+2);
1880 pp_left_brace (buffer
);
1881 newline_and_indent (buffer
, spc
+4);
1882 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
+4, flags
, true);
1883 newline_and_indent (buffer
, spc
+2);
1884 pp_right_brace (buffer
);
1889 pp_string (buffer
, "catch (");
1890 dump_generic_node (buffer
, CATCH_TYPES (node
), spc
+2, flags
, false);
1891 pp_right_paren (buffer
);
1892 newline_and_indent (buffer
, spc
+2);
1893 pp_left_brace (buffer
);
1894 newline_and_indent (buffer
, spc
+4);
1895 dump_generic_node (buffer
, CATCH_BODY (node
), spc
+4, flags
, true);
1896 newline_and_indent (buffer
, spc
+2);
1897 pp_right_brace (buffer
);
1901 case EH_FILTER_EXPR
:
1902 pp_string (buffer
, "<<<eh_filter (");
1903 dump_generic_node (buffer
, EH_FILTER_TYPES (node
), spc
+2, flags
, false);
1904 pp_string (buffer
, ")>>>");
1905 newline_and_indent (buffer
, spc
+2);
1906 pp_left_brace (buffer
);
1907 newline_and_indent (buffer
, spc
+4);
1908 dump_generic_node (buffer
, EH_FILTER_FAILURE (node
), spc
+4, flags
, true);
1909 newline_and_indent (buffer
, spc
+2);
1910 pp_right_brace (buffer
);
1915 op0
= TREE_OPERAND (node
, 0);
1916 /* If this is for break or continue, don't bother printing it. */
1917 if (DECL_NAME (op0
))
1919 const char *name
= IDENTIFIER_POINTER (DECL_NAME (op0
));
1920 if (strcmp (name
, "break") == 0
1921 || strcmp (name
, "continue") == 0)
1924 dump_generic_node (buffer
, op0
, spc
, flags
, false);
1926 if (DECL_NONLOCAL (op0
))
1927 pp_string (buffer
, " [non-local]");
1931 pp_string (buffer
, "while (1)");
1932 if (!(flags
& TDF_SLIM
))
1934 newline_and_indent (buffer
, spc
+2);
1935 pp_left_brace (buffer
);
1936 newline_and_indent (buffer
, spc
+4);
1937 dump_generic_node (buffer
, LOOP_EXPR_BODY (node
), spc
+4, flags
, true);
1938 newline_and_indent (buffer
, spc
+2);
1939 pp_right_brace (buffer
);
1945 pp_string (buffer
, "// predicted ");
1946 if (PREDICT_EXPR_OUTCOME (node
))
1947 pp_string (buffer
, "likely by ");
1949 pp_string (buffer
, "unlikely by ");
1950 pp_string (buffer
, predictor_name (PREDICT_EXPR_PREDICTOR (node
)));
1951 pp_string (buffer
, " predictor.");
1955 pp_string (buffer
, "return");
1956 op0
= TREE_OPERAND (node
, 0);
1960 if (TREE_CODE (op0
) == MODIFY_EXPR
)
1961 dump_generic_node (buffer
, TREE_OPERAND (op0
, 1),
1964 dump_generic_node (buffer
, op0
, spc
, flags
, false);
1969 pp_string (buffer
, "if (");
1970 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1971 pp_string (buffer
, ") break");
1975 pp_string (buffer
, "switch (");
1976 dump_generic_node (buffer
, SWITCH_COND (node
), spc
, flags
, false);
1977 pp_right_paren (buffer
);
1978 if (!(flags
& TDF_SLIM
))
1980 newline_and_indent (buffer
, spc
+2);
1981 pp_left_brace (buffer
);
1982 if (SWITCH_BODY (node
))
1984 newline_and_indent (buffer
, spc
+4);
1985 dump_generic_node (buffer
, SWITCH_BODY (node
), spc
+4, flags
,
1990 tree vec
= SWITCH_LABELS (node
);
1991 size_t i
, n
= TREE_VEC_LENGTH (vec
);
1992 for (i
= 0; i
< n
; ++i
)
1994 tree elt
= TREE_VEC_ELT (vec
, i
);
1995 newline_and_indent (buffer
, spc
+4);
1998 dump_generic_node (buffer
, elt
, spc
+4, flags
, false);
1999 pp_string (buffer
, " goto ");
2000 dump_generic_node (buffer
, CASE_LABEL (elt
), spc
+4,
2002 pp_semicolon (buffer
);
2005 pp_string (buffer
, "case ???: goto ???;");
2008 newline_and_indent (buffer
, spc
+2);
2009 pp_right_brace (buffer
);
2015 op0
= GOTO_DESTINATION (node
);
2016 if (TREE_CODE (op0
) != SSA_NAME
&& DECL_P (op0
) && DECL_NAME (op0
))
2018 const char *name
= IDENTIFIER_POINTER (DECL_NAME (op0
));
2019 if (strcmp (name
, "break") == 0
2020 || strcmp (name
, "continue") == 0)
2022 pp_string (buffer
, name
);
2026 pp_string (buffer
, "goto ");
2027 dump_generic_node (buffer
, op0
, spc
, flags
, false);
2031 pp_string (buffer
, "__asm__");
2032 if (ASM_VOLATILE_P (node
))
2033 pp_string (buffer
, " __volatile__");
2034 pp_left_paren (buffer
);
2035 dump_generic_node (buffer
, ASM_STRING (node
), spc
, flags
, false);
2037 dump_generic_node (buffer
, ASM_OUTPUTS (node
), spc
, flags
, false);
2039 dump_generic_node (buffer
, ASM_INPUTS (node
), spc
, flags
, false);
2040 if (ASM_CLOBBERS (node
))
2043 dump_generic_node (buffer
, ASM_CLOBBERS (node
), spc
, flags
, false);
2045 pp_right_paren (buffer
);
2048 case CASE_LABEL_EXPR
:
2049 if (CASE_LOW (node
) && CASE_HIGH (node
))
2051 pp_string (buffer
, "case ");
2052 dump_generic_node (buffer
, CASE_LOW (node
), spc
, flags
, false);
2053 pp_string (buffer
, " ... ");
2054 dump_generic_node (buffer
, CASE_HIGH (node
), spc
, flags
, false);
2056 else if (CASE_LOW (node
))
2058 pp_string (buffer
, "case ");
2059 dump_generic_node (buffer
, CASE_LOW (node
), spc
, flags
, false);
2062 pp_string (buffer
, "default");
2067 pp_string (buffer
, "OBJ_TYPE_REF(");
2068 dump_generic_node (buffer
, OBJ_TYPE_REF_EXPR (node
), spc
, flags
, false);
2069 pp_semicolon (buffer
);
2070 dump_generic_node (buffer
, OBJ_TYPE_REF_OBJECT (node
), spc
, flags
, false);
2072 dump_generic_node (buffer
, OBJ_TYPE_REF_TOKEN (node
), spc
, flags
, false);
2073 pp_right_paren (buffer
);
2077 if (SSA_NAME_IDENTIFIER (node
))
2078 dump_generic_node (buffer
, SSA_NAME_IDENTIFIER (node
),
2080 pp_underscore (buffer
);
2081 pp_decimal_int (buffer
, SSA_NAME_VERSION (node
));
2082 if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (node
))
2083 pp_string (buffer
, "(ab)");
2084 else if (SSA_NAME_IS_DEFAULT_DEF (node
))
2085 pp_string (buffer
, "(D)");
2088 case WITH_SIZE_EXPR
:
2089 pp_string (buffer
, "WITH_SIZE_EXPR <");
2090 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2091 pp_string (buffer
, ", ");
2092 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2093 pp_greater (buffer
);
2097 pp_string (buffer
, "ASSERT_EXPR <");
2098 dump_generic_node (buffer
, ASSERT_EXPR_VAR (node
), spc
, flags
, false);
2099 pp_string (buffer
, ", ");
2100 dump_generic_node (buffer
, ASSERT_EXPR_COND (node
), spc
, flags
, false);
2101 pp_greater (buffer
);
2105 pp_string (buffer
, "scev_known");
2108 case SCEV_NOT_KNOWN
:
2109 pp_string (buffer
, "scev_not_known");
2112 case POLYNOMIAL_CHREC
:
2113 pp_left_brace (buffer
);
2114 dump_generic_node (buffer
, CHREC_LEFT (node
), spc
, flags
, false);
2115 pp_string (buffer
, ", +, ");
2116 dump_generic_node (buffer
, CHREC_RIGHT (node
), spc
, flags
, false);
2117 pp_string (buffer
, "}_");
2118 dump_generic_node (buffer
, CHREC_VAR (node
), spc
, flags
, false);
2122 case REALIGN_LOAD_EXPR
:
2123 pp_string (buffer
, "REALIGN_LOAD <");
2124 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2125 pp_string (buffer
, ", ");
2126 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2127 pp_string (buffer
, ", ");
2128 dump_generic_node (buffer
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2129 pp_greater (buffer
);
2133 pp_string (buffer
, " VEC_COND_EXPR < ");
2134 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2135 pp_string (buffer
, " , ");
2136 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2137 pp_string (buffer
, " , ");
2138 dump_generic_node (buffer
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2139 pp_string (buffer
, " > ");
2143 pp_string (buffer
, " VEC_PERM_EXPR < ");
2144 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2145 pp_string (buffer
, " , ");
2146 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2147 pp_string (buffer
, " , ");
2148 dump_generic_node (buffer
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2149 pp_string (buffer
, " > ");
2153 pp_string (buffer
, " DOT_PROD_EXPR < ");
2154 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2155 pp_string (buffer
, ", ");
2156 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2157 pp_string (buffer
, ", ");
2158 dump_generic_node (buffer
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2159 pp_string (buffer
, " > ");
2162 case WIDEN_MULT_PLUS_EXPR
:
2163 pp_string (buffer
, " WIDEN_MULT_PLUS_EXPR < ");
2164 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2165 pp_string (buffer
, ", ");
2166 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2167 pp_string (buffer
, ", ");
2168 dump_generic_node (buffer
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2169 pp_string (buffer
, " > ");
2172 case WIDEN_MULT_MINUS_EXPR
:
2173 pp_string (buffer
, " WIDEN_MULT_MINUS_EXPR < ");
2174 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2175 pp_string (buffer
, ", ");
2176 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2177 pp_string (buffer
, ", ");
2178 dump_generic_node (buffer
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2179 pp_string (buffer
, " > ");
2183 pp_string (buffer
, " FMA_EXPR < ");
2184 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2185 pp_string (buffer
, ", ");
2186 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2187 pp_string (buffer
, ", ");
2188 dump_generic_node (buffer
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2189 pp_string (buffer
, " > ");
2193 pp_string (buffer
, "#pragma omp parallel");
2194 dump_omp_clauses (buffer
, OMP_PARALLEL_CLAUSES (node
), spc
, flags
);
2197 if (!(flags
& TDF_SLIM
) && OMP_BODY (node
))
2199 newline_and_indent (buffer
, spc
+ 2);
2200 pp_left_brace (buffer
);
2201 newline_and_indent (buffer
, spc
+ 4);
2202 dump_generic_node (buffer
, OMP_BODY (node
), spc
+ 4, flags
, false);
2203 newline_and_indent (buffer
, spc
+ 2);
2204 pp_right_brace (buffer
);
2210 pp_string (buffer
, "#pragma omp task");
2211 dump_omp_clauses (buffer
, OMP_TASK_CLAUSES (node
), spc
, flags
);
2215 pp_string (buffer
, "#pragma omp for");
2216 dump_omp_clauses (buffer
, OMP_FOR_CLAUSES (node
), spc
, flags
);
2218 if (!(flags
& TDF_SLIM
))
2222 if (OMP_FOR_PRE_BODY (node
))
2224 newline_and_indent (buffer
, spc
+ 2);
2225 pp_left_brace (buffer
);
2227 newline_and_indent (buffer
, spc
);
2228 dump_generic_node (buffer
, OMP_FOR_PRE_BODY (node
),
2232 for (i
= 0; i
< TREE_VEC_LENGTH (OMP_FOR_INIT (node
)); i
++)
2235 newline_and_indent (buffer
, spc
);
2236 pp_string (buffer
, "for (");
2237 dump_generic_node (buffer
, TREE_VEC_ELT (OMP_FOR_INIT (node
), i
),
2239 pp_string (buffer
, "; ");
2240 dump_generic_node (buffer
, TREE_VEC_ELT (OMP_FOR_COND (node
), i
),
2242 pp_string (buffer
, "; ");
2243 dump_generic_node (buffer
, TREE_VEC_ELT (OMP_FOR_INCR (node
), i
),
2245 pp_right_paren (buffer
);
2247 if (OMP_FOR_BODY (node
))
2249 newline_and_indent (buffer
, spc
+ 2);
2250 pp_left_brace (buffer
);
2251 newline_and_indent (buffer
, spc
+ 4);
2252 dump_generic_node (buffer
, OMP_FOR_BODY (node
), spc
+ 4, flags
,
2254 newline_and_indent (buffer
, spc
+ 2);
2255 pp_right_brace (buffer
);
2257 spc
-= 2 * TREE_VEC_LENGTH (OMP_FOR_INIT (node
)) - 2;
2258 if (OMP_FOR_PRE_BODY (node
))
2261 newline_and_indent (buffer
, spc
+ 2);
2262 pp_right_brace (buffer
);
2269 pp_string (buffer
, "#pragma omp sections");
2270 dump_omp_clauses (buffer
, OMP_SECTIONS_CLAUSES (node
), spc
, flags
);
2274 pp_string (buffer
, "#pragma omp section");
2278 pp_string (buffer
, "#pragma omp master");
2282 pp_string (buffer
, "#pragma omp ordered");
2286 pp_string (buffer
, "#pragma omp critical");
2287 if (OMP_CRITICAL_NAME (node
))
2290 pp_left_paren (buffer
);
2291 dump_generic_node (buffer
, OMP_CRITICAL_NAME (node
), spc
,
2293 pp_right_paren (buffer
);
2298 pp_string (buffer
, "#pragma omp atomic");
2299 newline_and_indent (buffer
, spc
+ 2);
2300 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2304 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2307 case OMP_ATOMIC_READ
:
2308 pp_string (buffer
, "#pragma omp atomic read");
2309 newline_and_indent (buffer
, spc
+ 2);
2310 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2314 case OMP_ATOMIC_CAPTURE_OLD
:
2315 case OMP_ATOMIC_CAPTURE_NEW
:
2316 pp_string (buffer
, "#pragma omp atomic capture");
2317 newline_and_indent (buffer
, spc
+ 2);
2318 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2322 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2326 pp_string (buffer
, "#pragma omp single");
2327 dump_omp_clauses (buffer
, OMP_SINGLE_CLAUSES (node
), spc
, flags
);
2331 dump_omp_clause (buffer
, node
, spc
, flags
);
2335 case TRANSACTION_EXPR
:
2336 if (TRANSACTION_EXPR_OUTER (node
))
2337 pp_string (buffer
, "__transaction_atomic [[outer]]");
2338 else if (TRANSACTION_EXPR_RELAXED (node
))
2339 pp_string (buffer
, "__transaction_relaxed");
2341 pp_string (buffer
, "__transaction_atomic");
2342 if (!(flags
& TDF_SLIM
) && TRANSACTION_EXPR_BODY (node
))
2344 newline_and_indent (buffer
, spc
);
2345 pp_left_brace (buffer
);
2346 newline_and_indent (buffer
, spc
+ 2);
2347 dump_generic_node (buffer
, TRANSACTION_EXPR_BODY (node
),
2348 spc
+ 2, flags
, false);
2349 newline_and_indent (buffer
, spc
);
2350 pp_right_brace (buffer
);
2355 case REDUC_MAX_EXPR
:
2356 pp_string (buffer
, " REDUC_MAX_EXPR < ");
2357 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2358 pp_string (buffer
, " > ");
2361 case REDUC_MIN_EXPR
:
2362 pp_string (buffer
, " REDUC_MIN_EXPR < ");
2363 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2364 pp_string (buffer
, " > ");
2367 case REDUC_PLUS_EXPR
:
2368 pp_string (buffer
, " REDUC_PLUS_EXPR < ");
2369 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2370 pp_string (buffer
, " > ");
2373 case VEC_WIDEN_MULT_HI_EXPR
:
2374 case VEC_WIDEN_MULT_LO_EXPR
:
2375 case VEC_WIDEN_MULT_EVEN_EXPR
:
2376 case VEC_WIDEN_MULT_ODD_EXPR
:
2377 case VEC_WIDEN_LSHIFT_HI_EXPR
:
2378 case VEC_WIDEN_LSHIFT_LO_EXPR
:
2380 for (str
= tree_code_name
[code
]; *str
; str
++)
2381 pp_character (buffer
, TOUPPER (*str
));
2382 pp_string (buffer
, " < ");
2383 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2384 pp_string (buffer
, ", ");
2385 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2386 pp_string (buffer
, " > ");
2389 case VEC_UNPACK_HI_EXPR
:
2390 pp_string (buffer
, " VEC_UNPACK_HI_EXPR < ");
2391 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2392 pp_string (buffer
, " > ");
2395 case VEC_UNPACK_LO_EXPR
:
2396 pp_string (buffer
, " VEC_UNPACK_LO_EXPR < ");
2397 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2398 pp_string (buffer
, " > ");
2401 case VEC_UNPACK_FLOAT_HI_EXPR
:
2402 pp_string (buffer
, " VEC_UNPACK_FLOAT_HI_EXPR < ");
2403 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2404 pp_string (buffer
, " > ");
2407 case VEC_UNPACK_FLOAT_LO_EXPR
:
2408 pp_string (buffer
, " VEC_UNPACK_FLOAT_LO_EXPR < ");
2409 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2410 pp_string (buffer
, " > ");
2413 case VEC_PACK_TRUNC_EXPR
:
2414 pp_string (buffer
, " VEC_PACK_TRUNC_EXPR < ");
2415 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2416 pp_string (buffer
, ", ");
2417 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2418 pp_string (buffer
, " > ");
2421 case VEC_PACK_SAT_EXPR
:
2422 pp_string (buffer
, " VEC_PACK_SAT_EXPR < ");
2423 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2424 pp_string (buffer
, ", ");
2425 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2426 pp_string (buffer
, " > ");
2429 case VEC_PACK_FIX_TRUNC_EXPR
:
2430 pp_string (buffer
, " VEC_PACK_FIX_TRUNC_EXPR < ");
2431 dump_generic_node (buffer
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2432 pp_string (buffer
, ", ");
2433 dump_generic_node (buffer
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2434 pp_string (buffer
, " > ");
2438 dump_block_node (buffer
, node
, spc
, flags
);
2445 if (is_stmt
&& is_expr
)
2446 pp_semicolon (buffer
);
2451 /* Print the declaration of a variable. */
2454 print_declaration (pretty_printer
*buffer
, tree t
, int spc
, int flags
)
2458 if (TREE_CODE (t
) == TYPE_DECL
)
2459 pp_string (buffer
, "typedef ");
2461 if (CODE_CONTAINS_STRUCT (TREE_CODE (t
), TS_DECL_WRTL
) && DECL_REGISTER (t
))
2462 pp_string (buffer
, "register ");
2464 if (TREE_PUBLIC (t
) && DECL_EXTERNAL (t
))
2465 pp_string (buffer
, "extern ");
2466 else if (TREE_STATIC (t
))
2467 pp_string (buffer
, "static ");
2469 /* Print the type and name. */
2470 if (TREE_TYPE (t
) && TREE_CODE (TREE_TYPE (t
)) == ARRAY_TYPE
)
2474 /* Print array's type. */
2475 tmp
= TREE_TYPE (t
);
2476 while (TREE_CODE (TREE_TYPE (tmp
)) == ARRAY_TYPE
)
2477 tmp
= TREE_TYPE (tmp
);
2478 dump_generic_node (buffer
, TREE_TYPE (tmp
), spc
, flags
, false);
2480 /* Print variable's name. */
2482 dump_generic_node (buffer
, t
, spc
, flags
, false);
2484 /* Print the dimensions. */
2485 tmp
= TREE_TYPE (t
);
2486 while (TREE_CODE (tmp
) == ARRAY_TYPE
)
2488 dump_array_domain (buffer
, TYPE_DOMAIN (tmp
), spc
, flags
);
2489 tmp
= TREE_TYPE (tmp
);
2492 else if (TREE_CODE (t
) == FUNCTION_DECL
)
2494 dump_generic_node (buffer
, TREE_TYPE (TREE_TYPE (t
)), spc
, flags
, false);
2496 dump_decl_name (buffer
, t
, flags
);
2497 dump_function_declaration (buffer
, TREE_TYPE (t
), spc
, flags
);
2501 /* Print type declaration. */
2502 dump_generic_node (buffer
, TREE_TYPE (t
), spc
, flags
, false);
2504 /* Print variable's name. */
2506 dump_generic_node (buffer
, t
, spc
, flags
, false);
2509 if (TREE_CODE (t
) == VAR_DECL
&& DECL_HARD_REGISTER (t
))
2511 pp_string (buffer
, " __asm__ ");
2512 pp_left_paren (buffer
);
2513 dump_generic_node (buffer
, DECL_ASSEMBLER_NAME (t
), spc
, flags
, false);
2514 pp_right_paren (buffer
);
2517 /* The initial value of a function serves to determine whether the function
2518 is declared or defined. So the following does not apply to function
2520 if (TREE_CODE (t
) != FUNCTION_DECL
)
2522 /* Print the initial value. */
2523 if (DECL_INITIAL (t
))
2528 dump_generic_node (buffer
, DECL_INITIAL (t
), spc
, flags
, false);
2532 if (TREE_CODE (t
) == VAR_DECL
&& DECL_HAS_VALUE_EXPR_P (t
))
2534 pp_string (buffer
, " [value-expr: ");
2535 dump_generic_node (buffer
, DECL_VALUE_EXPR (t
), spc
, flags
, false);
2536 pp_right_bracket (buffer
);
2539 pp_semicolon (buffer
);
2543 /* Prints a structure: name, fields, and methods.
2544 FIXME: Still incomplete. */
2547 print_struct_decl (pretty_printer
*buffer
, const_tree node
, int spc
, int flags
)
2549 /* Print the name of the structure. */
2550 if (TYPE_NAME (node
))
2553 if (TREE_CODE (node
) == RECORD_TYPE
)
2554 pp_string (buffer
, "struct ");
2555 else if ((TREE_CODE (node
) == UNION_TYPE
2556 || TREE_CODE (node
) == QUAL_UNION_TYPE
))
2557 pp_string (buffer
, "union ");
2559 dump_generic_node (buffer
, TYPE_NAME (node
), spc
, 0, false);
2562 /* Print the contents of the structure. */
2563 pp_newline (buffer
);
2565 pp_left_brace (buffer
);
2566 pp_newline (buffer
);
2568 /* Print the fields of the structure. */
2571 tmp
= TYPE_FIELDS (node
);
2574 /* Avoid to print recursively the structure. */
2575 /* FIXME : Not implemented correctly...,
2576 what about the case when we have a cycle in the contain graph? ...
2577 Maybe this could be solved by looking at the scope in which the
2578 structure was declared. */
2579 if (TREE_TYPE (tmp
) != node
2580 && (TREE_CODE (TREE_TYPE (tmp
)) != POINTER_TYPE
2581 || TREE_TYPE (TREE_TYPE (tmp
)) != node
))
2583 print_declaration (buffer
, tmp
, spc
+2, flags
);
2584 pp_newline (buffer
);
2586 tmp
= DECL_CHAIN (tmp
);
2590 pp_right_brace (buffer
);
2593 /* Return the priority of the operator CODE.
2595 From lowest to highest precedence with either left-to-right (L-R)
2596 or right-to-left (R-L) associativity]:
2599 2 [R-L] = += -= *= /= %= &= ^= |= <<= >>=
2611 14 [R-L] ! ~ ++ -- + - * & (type) sizeof
2612 15 [L-R] fn() [] -> .
2614 unary +, - and * have higher precedence than the corresponding binary
2618 op_code_prio (enum tree_code code
)
2635 case TRUTH_ORIF_EXPR
:
2638 case TRUTH_AND_EXPR
:
2639 case TRUTH_ANDIF_EXPR
:
2646 case TRUTH_XOR_EXPR
:
2663 case UNORDERED_EXPR
:
2674 case VEC_WIDEN_LSHIFT_HI_EXPR
:
2675 case VEC_WIDEN_LSHIFT_LO_EXPR
:
2676 case WIDEN_LSHIFT_EXPR
:
2679 case WIDEN_SUM_EXPR
:
2681 case POINTER_PLUS_EXPR
:
2685 case VEC_WIDEN_MULT_HI_EXPR
:
2686 case VEC_WIDEN_MULT_LO_EXPR
:
2687 case WIDEN_MULT_EXPR
:
2689 case WIDEN_MULT_PLUS_EXPR
:
2690 case WIDEN_MULT_MINUS_EXPR
:
2692 case MULT_HIGHPART_EXPR
:
2693 case TRUNC_DIV_EXPR
:
2695 case FLOOR_DIV_EXPR
:
2696 case ROUND_DIV_EXPR
:
2698 case EXACT_DIV_EXPR
:
2699 case TRUNC_MOD_EXPR
:
2701 case FLOOR_MOD_EXPR
:
2702 case ROUND_MOD_EXPR
:
2706 case TRUTH_NOT_EXPR
:
2708 case POSTINCREMENT_EXPR
:
2709 case POSTDECREMENT_EXPR
:
2710 case PREINCREMENT_EXPR
:
2711 case PREDECREMENT_EXPR
:
2717 case FIX_TRUNC_EXPR
:
2723 case ARRAY_RANGE_REF
:
2727 /* Special expressions. */
2733 case REDUC_MAX_EXPR
:
2734 case REDUC_MIN_EXPR
:
2735 case REDUC_PLUS_EXPR
:
2736 case VEC_LSHIFT_EXPR
:
2737 case VEC_RSHIFT_EXPR
:
2738 case VEC_UNPACK_HI_EXPR
:
2739 case VEC_UNPACK_LO_EXPR
:
2740 case VEC_UNPACK_FLOAT_HI_EXPR
:
2741 case VEC_UNPACK_FLOAT_LO_EXPR
:
2742 case VEC_PACK_TRUNC_EXPR
:
2743 case VEC_PACK_SAT_EXPR
:
2747 /* Return an arbitrarily high precedence to avoid surrounding single
2748 VAR_DECLs in ()s. */
2753 /* Return the priority of the operator OP. */
2756 op_prio (const_tree op
)
2758 enum tree_code code
;
2763 code
= TREE_CODE (op
);
2764 if (code
== SAVE_EXPR
|| code
== NON_LVALUE_EXPR
)
2765 return op_prio (TREE_OPERAND (op
, 0));
2767 return op_code_prio (code
);
2770 /* Return the symbol associated with operator CODE. */
2773 op_symbol_code (enum tree_code code
)
2781 case TRUTH_ORIF_EXPR
:
2784 case TRUTH_AND_EXPR
:
2785 case TRUTH_ANDIF_EXPR
:
2791 case TRUTH_XOR_EXPR
:
2801 case UNORDERED_EXPR
:
2847 case VEC_LSHIFT_EXPR
:
2850 case VEC_RSHIFT_EXPR
:
2853 case WIDEN_LSHIFT_EXPR
:
2856 case POINTER_PLUS_EXPR
:
2862 case REDUC_PLUS_EXPR
:
2865 case WIDEN_SUM_EXPR
:
2868 case WIDEN_MULT_EXPR
:
2871 case MULT_HIGHPART_EXPR
:
2881 case TRUTH_NOT_EXPR
:
2888 case TRUNC_DIV_EXPR
:
2895 case FLOOR_DIV_EXPR
:
2898 case ROUND_DIV_EXPR
:
2901 case EXACT_DIV_EXPR
:
2904 case TRUNC_MOD_EXPR
:
2910 case FLOOR_MOD_EXPR
:
2913 case ROUND_MOD_EXPR
:
2916 case PREDECREMENT_EXPR
:
2919 case PREINCREMENT_EXPR
:
2922 case POSTDECREMENT_EXPR
:
2925 case POSTINCREMENT_EXPR
:
2935 return "<<< ??? >>>";
2939 /* Return the symbol associated with operator OP. */
2942 op_symbol (const_tree op
)
2944 return op_symbol_code (TREE_CODE (op
));
2947 /* Prints the name of a call. NODE is the CALL_EXPR_FN of a CALL_EXPR or
2948 the gimple_call_fn of a GIMPLE_CALL. */
2951 print_call_name (pretty_printer
*buffer
, tree node
, int flags
)
2955 if (TREE_CODE (op0
) == NON_LVALUE_EXPR
)
2956 op0
= TREE_OPERAND (op0
, 0);
2959 switch (TREE_CODE (op0
))
2964 dump_function_name (buffer
, op0
, flags
);
2970 op0
= TREE_OPERAND (op0
, 0);
2974 pp_left_paren (buffer
);
2975 dump_generic_node (buffer
, TREE_OPERAND (op0
, 0), 0, flags
, false);
2976 pp_string (buffer
, ") ? ");
2977 dump_generic_node (buffer
, TREE_OPERAND (op0
, 1), 0, flags
, false);
2978 pp_string (buffer
, " : ");
2979 dump_generic_node (buffer
, TREE_OPERAND (op0
, 2), 0, flags
, false);
2983 if (TREE_CODE (TREE_OPERAND (op0
, 0)) == VAR_DECL
)
2984 dump_function_name (buffer
, TREE_OPERAND (op0
, 0), flags
);
2986 dump_generic_node (buffer
, op0
, 0, flags
, false);
2990 if (integer_zerop (TREE_OPERAND (op0
, 1)))
2992 op0
= TREE_OPERAND (op0
, 0);
2999 dump_generic_node (buffer
, op0
, 0, flags
, false);
3007 /* Parses the string STR and replaces new-lines by '\n', tabs by '\t', ... */
3010 pretty_print_string (pretty_printer
*buffer
, const char *str
)
3020 pp_string (buffer
, "\\b");
3024 pp_string (buffer
, "\\f");
3028 pp_string (buffer
, "\\n");
3032 pp_string (buffer
, "\\r");
3036 pp_string (buffer
, "\\t");
3040 pp_string (buffer
, "\\v");
3044 pp_string (buffer
, "\\\\");
3048 pp_string (buffer
, "\\\"");
3052 pp_string (buffer
, "\\'");
3055 /* No need to handle \0; the loop terminates on \0. */
3058 pp_string (buffer
, "\\1");
3062 pp_string (buffer
, "\\2");
3066 pp_string (buffer
, "\\3");
3070 pp_string (buffer
, "\\4");
3074 pp_string (buffer
, "\\5");
3078 pp_string (buffer
, "\\6");
3082 pp_string (buffer
, "\\7");
3086 pp_character (buffer
, str
[0]);
3094 maybe_init_pretty_print (FILE *file
)
3098 pp_construct (&buffer
, /* prefix */NULL
, /* line-width */0);
3099 pp_needs_newline (&buffer
) = true;
3100 pp_translate_identifiers (&buffer
) = false;
3104 buffer
.buffer
->stream
= file
;
3108 newline_and_indent (pretty_printer
*buffer
, int spc
)
3110 pp_newline (buffer
);
3114 /* Handle a %K format for TEXT. Separate from default_tree_printer so
3115 it can also be used in front ends.
3116 %K: a statement, from which EXPR_LOCATION and TREE_BLOCK will be recorded.
3120 percent_K_format (text_info
*text
)
3122 tree t
= va_arg (*text
->args_ptr
, tree
), block
;
3123 gcc_assert (text
->locus
!= NULL
);
3124 *text
->locus
= EXPR_LOCATION (t
);
3125 gcc_assert (pp_ti_abstract_origin (text
) != NULL
);
3126 block
= TREE_BLOCK (t
);
3127 *pp_ti_abstract_origin (text
) = NULL
;
3129 && TREE_CODE (block
) == BLOCK
3130 && BLOCK_ABSTRACT_ORIGIN (block
))
3132 tree ao
= BLOCK_ABSTRACT_ORIGIN (block
);
3134 while (TREE_CODE (ao
) == BLOCK
3135 && BLOCK_ABSTRACT_ORIGIN (ao
)
3136 && BLOCK_ABSTRACT_ORIGIN (ao
) != ao
)
3137 ao
= BLOCK_ABSTRACT_ORIGIN (ao
);
3139 if (TREE_CODE (ao
) == FUNCTION_DECL
)
3141 *pp_ti_abstract_origin (text
) = block
;
3144 block
= BLOCK_SUPERCONTEXT (block
);
3148 /* Print the identifier ID to PRETTY-PRINTER. */
3151 pp_tree_identifier (pretty_printer
*pp
, tree id
)
3153 if (pp_translate_identifiers (pp
))
3155 const char *text
= identifier_to_locale (IDENTIFIER_POINTER (id
));
3156 pp_append_text (pp
, text
, text
+ strlen (text
));
3159 pp_append_text (pp
, IDENTIFIER_POINTER (id
),
3160 IDENTIFIER_POINTER (id
) + IDENTIFIER_LENGTH (id
));
3163 /* A helper function that is used to dump function information before the
3167 dump_function_header (FILE *dump_file
, tree fdecl
, int flags
)
3169 const char *dname
, *aname
;
3170 struct cgraph_node
*node
= cgraph_get_node (fdecl
);
3171 struct function
*fun
= DECL_STRUCT_FUNCTION (fdecl
);
3173 dname
= lang_hooks
.decl_printable_name (fdecl
, 2);
3175 if (DECL_ASSEMBLER_NAME_SET_P (fdecl
))
3176 aname
= (IDENTIFIER_POINTER
3177 (DECL_ASSEMBLER_NAME (fdecl
)));
3179 aname
= "<unset-asm-name>";
3181 fprintf (dump_file
, "\n;; Function %s (%s, funcdef_no=%d",
3182 dname
, aname
, fun
->funcdef_no
);
3183 if (!(flags
& TDF_NOUID
))
3184 fprintf (dump_file
, ", decl_uid=%d", DECL_UID (fdecl
));
3187 fprintf (dump_file
, ", symbol_order=%d)%s\n\n", node
->symbol
.order
,
3188 node
->frequency
== NODE_FREQUENCY_HOT
3190 : node
->frequency
== NODE_FREQUENCY_UNLIKELY_EXECUTED
3191 ? " (unlikely executed)"
3192 : node
->frequency
== NODE_FREQUENCY_EXECUTED_ONCE
3193 ? " (executed once)"
3197 fprintf (dump_file
, ")\n\n");