1 /* Pretty formatting of GENERIC trees in C syntax.
2 Copyright (C) 2001-2018 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"
29 #include "tree-pretty-print.h"
30 #include "stor-layout.h"
31 #include "langhooks.h"
32 #include "tree-iterator.h"
34 #include "internal-fn.h"
35 #include "gomp-constants.h"
38 /* Local functions, macros and variables. */
39 static const char *op_symbol (const_tree
);
40 static void pretty_print_string (pretty_printer
*, const char*);
41 static void newline_and_indent (pretty_printer
*, int);
42 static void maybe_init_pretty_print (FILE *);
43 static void print_struct_decl (pretty_printer
*, const_tree
, int, dump_flags_t
);
44 static void do_niy (pretty_printer
*, const_tree
, dump_flags_t
);
46 #define INDENT(SPACE) do { \
47 int i; for (i = 0; i<SPACE; i++) pp_space (pp); } while (0)
49 #define NIY do_niy (pp, node, flags)
51 static pretty_printer
*tree_pp
;
53 /* Try to print something for an unknown tree code. */
56 do_niy (pretty_printer
*pp
, const_tree node
, dump_flags_t flags
)
60 pp_string (pp
, "<<< Unknown tree: ");
61 pp_string (pp
, get_tree_code_name (TREE_CODE (node
)));
65 len
= TREE_OPERAND_LENGTH (node
);
66 for (i
= 0; i
< len
; ++i
)
68 newline_and_indent (pp
, 2);
69 dump_generic_node (pp
, TREE_OPERAND (node
, i
), 2, flags
, false);
73 pp_string (pp
, " >>>");
76 /* Debugging function to print out a generic expression. */
79 debug_generic_expr (tree t
)
81 print_generic_expr (stderr
, t
, TDF_VOPS
|TDF_MEMSYMS
);
82 fprintf (stderr
, "\n");
85 /* Debugging function to print out a generic statement. */
88 debug_generic_stmt (tree t
)
90 print_generic_stmt (stderr
, t
, TDF_VOPS
|TDF_MEMSYMS
);
91 fprintf (stderr
, "\n");
94 /* Debugging function to print out a chain of trees . */
97 debug_tree_chain (tree t
)
103 print_generic_expr (stderr
, t
, TDF_VOPS
|TDF_MEMSYMS
|TDF_UID
);
104 fprintf (stderr
, " ");
108 fprintf (stderr
, "... [cycled back to ");
109 print_generic_expr (stderr
, t
, TDF_VOPS
|TDF_MEMSYMS
|TDF_UID
);
110 fprintf (stderr
, "]");
114 fprintf (stderr
, "\n");
117 /* Prints declaration DECL to the FILE with details specified by FLAGS. */
119 print_generic_decl (FILE *file
, tree decl
, dump_flags_t flags
)
121 maybe_init_pretty_print (file
);
122 print_declaration (tree_pp
, decl
, 2, flags
);
123 pp_write_text_to_stream (tree_pp
);
126 /* Print tree T, and its successors, on file FILE. FLAGS specifies details
127 to show in the dump. See TDF_* in dumpfile.h. */
130 print_generic_stmt (FILE *file
, tree t
, dump_flags_t flags
)
132 maybe_init_pretty_print (file
);
133 dump_generic_node (tree_pp
, t
, 0, flags
, true);
134 pp_newline_and_flush (tree_pp
);
137 /* Print tree T, and its successors, on file FILE. FLAGS specifies details
138 to show in the dump. See TDF_* in dumpfile.h. The output is indented by
142 print_generic_stmt_indented (FILE *file
, tree t
, dump_flags_t flags
, int indent
)
146 maybe_init_pretty_print (file
);
148 for (i
= 0; i
< indent
; i
++)
150 dump_generic_node (tree_pp
, t
, indent
, flags
, true);
151 pp_newline_and_flush (tree_pp
);
154 /* Print a single expression T on file FILE. FLAGS specifies details to show
155 in the dump. See TDF_* in dumpfile.h. */
158 print_generic_expr (FILE *file
, tree t
, dump_flags_t flags
)
160 maybe_init_pretty_print (file
);
161 dump_generic_node (tree_pp
, t
, 0, flags
, false);
165 /* Dump NAME, an IDENTIFIER_POINTER, sanitized so that D<num> sequences
166 in it are replaced with Dxxxx, as long as they are at the start or
167 preceded by $ and at the end or followed by $. See make_fancy_name
171 dump_fancy_name (pretty_printer
*pp
, tree name
)
174 int length
= IDENTIFIER_LENGTH (name
);
175 const char *n
= IDENTIFIER_POINTER (name
);
182 && (n
== IDENTIFIER_POINTER (name
) || n
[-1] == '$'))
185 while (ISDIGIT (n
[l
]))
187 if (n
[l
] == '\0' || n
[l
] == '$')
200 pp_tree_identifier (pp
, name
);
204 char *str
= XNEWVEC (char, length
+ 1);
207 q
= n
= IDENTIFIER_POINTER (name
);
214 && (q
== IDENTIFIER_POINTER (name
) || q
[-1] == '$'))
217 while (ISDIGIT (q
[l
]))
219 if (q
[l
] == '\0' || q
[l
] == '$')
221 memcpy (p
, n
, q
- n
);
222 memcpy (p
+ (q
- n
), "Dxxxx", 5);
232 memcpy (p
, n
, IDENTIFIER_LENGTH (name
) - (n
- IDENTIFIER_POINTER (name
)));
234 if (pp_translate_identifiers (pp
))
236 const char *text
= identifier_to_locale (str
);
237 pp_append_text (pp
, text
, text
+ strlen (text
));
240 pp_append_text (pp
, str
, str
+ length
);
244 /* Dump the name of a _DECL node and its DECL_UID if TDF_UID is set
248 dump_decl_name (pretty_printer
*pp
, tree node
, dump_flags_t flags
)
250 tree name
= DECL_NAME (node
);
253 if ((flags
& TDF_ASMNAME
)
254 && HAS_DECL_ASSEMBLER_NAME_P (node
)
255 && DECL_ASSEMBLER_NAME_SET_P (node
))
256 pp_tree_identifier (pp
, DECL_ASSEMBLER_NAME_RAW (node
));
257 /* For -fcompare-debug don't dump DECL_NAMELESS names at all,
258 -g might have created more fancy names and their indexes
259 could get out of sync. Usually those should be DECL_IGNORED_P
260 too, SRA can create even non-DECL_IGNORED_P DECL_NAMELESS fancy
261 names, let's hope those never get out of sync after doing the
262 dump_fancy_name sanitization. */
263 else if ((flags
& TDF_COMPARE_DEBUG
)
264 && DECL_NAMELESS (node
)
265 && DECL_IGNORED_P (node
))
267 /* For DECL_NAMELESS names look for embedded uids in the
268 names and sanitize them for TDF_NOUID. */
269 else if ((flags
& TDF_NOUID
) && DECL_NAMELESS (node
))
270 dump_fancy_name (pp
, name
);
272 pp_tree_identifier (pp
, name
);
274 char uid_sep
= (flags
& TDF_GIMPLE
) ? '_' : '.';
275 if ((flags
& TDF_UID
) || name
== NULL_TREE
)
277 if (TREE_CODE (node
) == LABEL_DECL
&& LABEL_DECL_UID (node
) != -1)
278 pp_printf (pp
, "L%c%d", uid_sep
, (int) LABEL_DECL_UID (node
));
279 else if (TREE_CODE (node
) == DEBUG_EXPR_DECL
)
281 if (flags
& TDF_NOUID
)
282 pp_string (pp
, "D#xxxx");
284 pp_printf (pp
, "D#%i", DEBUG_TEMP_UID (node
));
288 char c
= TREE_CODE (node
) == CONST_DECL
? 'C' : 'D';
289 if (flags
& TDF_NOUID
)
290 pp_printf (pp
, "%c.xxxx", c
);
292 pp_printf (pp
, "%c%c%u", c
, uid_sep
, DECL_UID (node
));
295 if ((flags
& TDF_ALIAS
) && DECL_PT_UID (node
) != DECL_UID (node
))
297 if (flags
& TDF_NOUID
)
298 pp_printf (pp
, "ptD.xxxx");
300 pp_printf (pp
, "ptD.%u", DECL_PT_UID (node
));
304 /* Like the above, but used for pretty printing function calls. */
307 dump_function_name (pretty_printer
*pp
, tree node
, dump_flags_t flags
)
309 if (CONVERT_EXPR_P (node
))
310 node
= TREE_OPERAND (node
, 0);
311 if (DECL_NAME (node
) && (flags
& TDF_ASMNAME
) == 0)
312 pp_string (pp
, lang_hooks
.decl_printable_name (node
, 1));
314 dump_decl_name (pp
, node
, flags
);
317 /* Dump a function declaration. NODE is the FUNCTION_TYPE. PP, SPC and
318 FLAGS are as in dump_generic_node. */
321 dump_function_declaration (pretty_printer
*pp
, tree node
,
322 int spc
, dump_flags_t flags
)
324 bool wrote_arg
= false;
330 /* Print the argument types. */
331 arg
= TYPE_ARG_TYPES (node
);
332 while (arg
&& arg
!= void_list_node
&& arg
!= error_mark_node
)
340 dump_generic_node (pp
, TREE_VALUE (arg
), spc
, flags
, false);
341 arg
= TREE_CHAIN (arg
);
344 /* Drop the trailing void_type_node if we had any previous argument. */
345 if (arg
== void_list_node
&& !wrote_arg
)
346 pp_string (pp
, "void");
347 /* Properly dump vararg function types. */
348 else if (!arg
&& wrote_arg
)
349 pp_string (pp
, ", ...");
350 /* Avoid printing any arg for unprototyped functions. */
355 /* Dump the domain associated with an array. */
358 dump_array_domain (pretty_printer
*pp
, tree domain
, int spc
, dump_flags_t flags
)
360 pp_left_bracket (pp
);
363 tree min
= TYPE_MIN_VALUE (domain
);
364 tree max
= TYPE_MAX_VALUE (domain
);
367 && integer_zerop (min
)
368 && tree_fits_shwi_p (max
))
369 pp_wide_integer (pp
, tree_to_shwi (max
) + 1);
373 dump_generic_node (pp
, min
, spc
, flags
, false);
376 dump_generic_node (pp
, max
, spc
, flags
, false);
380 pp_string (pp
, "<unknown>");
381 pp_right_bracket (pp
);
385 /* Dump OpenMP clause CLAUSE. PP, CLAUSE, SPC and FLAGS are as in
386 dump_generic_node. */
389 dump_omp_clause (pretty_printer
*pp
, tree clause
, int spc
, dump_flags_t flags
)
393 switch (OMP_CLAUSE_CODE (clause
))
395 case OMP_CLAUSE_PRIVATE
:
398 case OMP_CLAUSE_SHARED
:
401 case OMP_CLAUSE_FIRSTPRIVATE
:
402 name
= "firstprivate";
404 case OMP_CLAUSE_LASTPRIVATE
:
405 name
= "lastprivate";
407 case OMP_CLAUSE_COPYIN
:
410 case OMP_CLAUSE_COPYPRIVATE
:
411 name
= "copyprivate";
413 case OMP_CLAUSE_UNIFORM
:
416 case OMP_CLAUSE_USE_DEVICE_PTR
:
417 name
= "use_device_ptr";
419 case OMP_CLAUSE_IS_DEVICE_PTR
:
420 name
= "is_device_ptr";
422 case OMP_CLAUSE__LOOPTEMP_
:
425 case OMP_CLAUSE_TO_DECLARE
:
428 case OMP_CLAUSE_LINK
:
432 pp_string (pp
, name
);
434 dump_generic_node (pp
, OMP_CLAUSE_DECL (clause
),
439 case OMP_CLAUSE_REDUCTION
:
440 pp_string (pp
, "reduction(");
441 if (OMP_CLAUSE_REDUCTION_CODE (clause
) != ERROR_MARK
)
444 op_symbol_code (OMP_CLAUSE_REDUCTION_CODE (clause
)));
447 dump_generic_node (pp
, OMP_CLAUSE_DECL (clause
),
453 pp_string (pp
, "if(");
454 switch (OMP_CLAUSE_IF_MODIFIER (clause
))
456 case ERROR_MARK
: break;
457 case OMP_PARALLEL
: pp_string (pp
, "parallel:"); break;
458 case OMP_TASK
: pp_string (pp
, "task:"); break;
459 case OMP_TASKLOOP
: pp_string (pp
, "taskloop:"); break;
460 case OMP_TARGET_DATA
: pp_string (pp
, "target data:"); break;
461 case OMP_TARGET
: pp_string (pp
, "target:"); break;
462 case OMP_TARGET_UPDATE
: pp_string (pp
, "target update:"); break;
463 case OMP_TARGET_ENTER_DATA
:
464 pp_string (pp
, "target enter data:"); break;
465 case OMP_TARGET_EXIT_DATA
: pp_string (pp
, "target exit data:"); break;
466 default: gcc_unreachable ();
468 dump_generic_node (pp
, OMP_CLAUSE_IF_EXPR (clause
),
473 case OMP_CLAUSE_NUM_THREADS
:
474 pp_string (pp
, "num_threads(");
475 dump_generic_node (pp
, OMP_CLAUSE_NUM_THREADS_EXPR (clause
),
480 case OMP_CLAUSE_NOWAIT
:
481 pp_string (pp
, "nowait");
483 case OMP_CLAUSE_ORDERED
:
484 pp_string (pp
, "ordered");
485 if (OMP_CLAUSE_ORDERED_EXPR (clause
))
488 dump_generic_node (pp
, OMP_CLAUSE_ORDERED_EXPR (clause
),
494 case OMP_CLAUSE_DEFAULT
:
495 pp_string (pp
, "default(");
496 switch (OMP_CLAUSE_DEFAULT_KIND (clause
))
498 case OMP_CLAUSE_DEFAULT_UNSPECIFIED
:
500 case OMP_CLAUSE_DEFAULT_SHARED
:
501 pp_string (pp
, "shared");
503 case OMP_CLAUSE_DEFAULT_NONE
:
504 pp_string (pp
, "none");
506 case OMP_CLAUSE_DEFAULT_PRIVATE
:
507 pp_string (pp
, "private");
509 case OMP_CLAUSE_DEFAULT_FIRSTPRIVATE
:
510 pp_string (pp
, "firstprivate");
512 case OMP_CLAUSE_DEFAULT_PRESENT
:
513 pp_string (pp
, "present");
521 case OMP_CLAUSE_SCHEDULE
:
522 pp_string (pp
, "schedule(");
523 if (OMP_CLAUSE_SCHEDULE_KIND (clause
)
524 & (OMP_CLAUSE_SCHEDULE_MONOTONIC
525 | OMP_CLAUSE_SCHEDULE_NONMONOTONIC
))
527 if (OMP_CLAUSE_SCHEDULE_KIND (clause
)
528 & OMP_CLAUSE_SCHEDULE_MONOTONIC
)
529 pp_string (pp
, "monotonic");
531 pp_string (pp
, "nonmonotonic");
532 if (OMP_CLAUSE_SCHEDULE_SIMD (clause
))
537 if (OMP_CLAUSE_SCHEDULE_SIMD (clause
))
538 pp_string (pp
, "simd:");
540 switch (OMP_CLAUSE_SCHEDULE_KIND (clause
) & OMP_CLAUSE_SCHEDULE_MASK
)
542 case OMP_CLAUSE_SCHEDULE_STATIC
:
543 pp_string (pp
, "static");
545 case OMP_CLAUSE_SCHEDULE_DYNAMIC
:
546 pp_string (pp
, "dynamic");
548 case OMP_CLAUSE_SCHEDULE_GUIDED
:
549 pp_string (pp
, "guided");
551 case OMP_CLAUSE_SCHEDULE_RUNTIME
:
552 pp_string (pp
, "runtime");
554 case OMP_CLAUSE_SCHEDULE_AUTO
:
555 pp_string (pp
, "auto");
560 if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause
))
563 dump_generic_node (pp
, OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause
),
569 case OMP_CLAUSE_UNTIED
:
570 pp_string (pp
, "untied");
573 case OMP_CLAUSE_COLLAPSE
:
574 pp_string (pp
, "collapse(");
575 dump_generic_node (pp
, OMP_CLAUSE_COLLAPSE_EXPR (clause
),
580 case OMP_CLAUSE_FINAL
:
581 pp_string (pp
, "final(");
582 dump_generic_node (pp
, OMP_CLAUSE_FINAL_EXPR (clause
),
587 case OMP_CLAUSE_MERGEABLE
:
588 pp_string (pp
, "mergeable");
591 case OMP_CLAUSE_LINEAR
:
592 pp_string (pp
, "linear(");
593 switch (OMP_CLAUSE_LINEAR_KIND (clause
))
595 case OMP_CLAUSE_LINEAR_DEFAULT
:
597 case OMP_CLAUSE_LINEAR_REF
:
598 pp_string (pp
, "ref(");
600 case OMP_CLAUSE_LINEAR_VAL
:
601 pp_string (pp
, "val(");
603 case OMP_CLAUSE_LINEAR_UVAL
:
604 pp_string (pp
, "uval(");
609 dump_generic_node (pp
, OMP_CLAUSE_DECL (clause
),
611 if (OMP_CLAUSE_LINEAR_KIND (clause
) != OMP_CLAUSE_LINEAR_DEFAULT
)
614 dump_generic_node (pp
, OMP_CLAUSE_LINEAR_STEP (clause
),
619 case OMP_CLAUSE_ALIGNED
:
620 pp_string (pp
, "aligned(");
621 dump_generic_node (pp
, OMP_CLAUSE_DECL (clause
),
623 if (OMP_CLAUSE_ALIGNED_ALIGNMENT (clause
))
626 dump_generic_node (pp
, OMP_CLAUSE_ALIGNED_ALIGNMENT (clause
),
632 case OMP_CLAUSE_DEPEND
:
633 pp_string (pp
, "depend(");
634 switch (OMP_CLAUSE_DEPEND_KIND (clause
))
636 case OMP_CLAUSE_DEPEND_IN
:
637 pp_string (pp
, "in");
639 case OMP_CLAUSE_DEPEND_OUT
:
640 pp_string (pp
, "out");
642 case OMP_CLAUSE_DEPEND_INOUT
:
643 pp_string (pp
, "inout");
645 case OMP_CLAUSE_DEPEND_SOURCE
:
646 pp_string (pp
, "source)");
648 case OMP_CLAUSE_DEPEND_SINK
:
649 pp_string (pp
, "sink:");
650 for (tree t
= OMP_CLAUSE_DECL (clause
); t
; t
= TREE_CHAIN (t
))
651 if (TREE_CODE (t
) == TREE_LIST
)
653 dump_generic_node (pp
, TREE_VALUE (t
), spc
, flags
, false);
654 if (TREE_PURPOSE (t
) != integer_zero_node
)
656 if (OMP_CLAUSE_DEPEND_SINK_NEGATIVE (t
))
660 dump_generic_node (pp
, TREE_PURPOSE (t
), spc
, flags
,
674 dump_generic_node (pp
, OMP_CLAUSE_DECL (clause
),
680 pp_string (pp
, "map(");
681 switch (OMP_CLAUSE_MAP_KIND (clause
))
684 case GOMP_MAP_POINTER
:
685 pp_string (pp
, "alloc");
688 case GOMP_MAP_TO_PSET
:
689 pp_string (pp
, "to");
692 pp_string (pp
, "from");
694 case GOMP_MAP_TOFROM
:
695 pp_string (pp
, "tofrom");
697 case GOMP_MAP_FORCE_ALLOC
:
698 pp_string (pp
, "force_alloc");
700 case GOMP_MAP_FORCE_TO
:
701 pp_string (pp
, "force_to");
703 case GOMP_MAP_FORCE_FROM
:
704 pp_string (pp
, "force_from");
706 case GOMP_MAP_FORCE_TOFROM
:
707 pp_string (pp
, "force_tofrom");
709 case GOMP_MAP_FORCE_PRESENT
:
710 pp_string (pp
, "force_present");
712 case GOMP_MAP_DELETE
:
713 pp_string (pp
, "delete");
715 case GOMP_MAP_FORCE_DEVICEPTR
:
716 pp_string (pp
, "force_deviceptr");
718 case GOMP_MAP_ALWAYS_TO
:
719 pp_string (pp
, "always,to");
721 case GOMP_MAP_ALWAYS_FROM
:
722 pp_string (pp
, "always,from");
724 case GOMP_MAP_ALWAYS_TOFROM
:
725 pp_string (pp
, "always,tofrom");
727 case GOMP_MAP_RELEASE
:
728 pp_string (pp
, "release");
730 case GOMP_MAP_FIRSTPRIVATE_POINTER
:
731 pp_string (pp
, "firstprivate");
733 case GOMP_MAP_FIRSTPRIVATE_REFERENCE
:
734 pp_string (pp
, "firstprivate ref");
736 case GOMP_MAP_STRUCT
:
737 pp_string (pp
, "struct");
739 case GOMP_MAP_ALWAYS_POINTER
:
740 pp_string (pp
, "always_pointer");
742 case GOMP_MAP_DEVICE_RESIDENT
:
743 pp_string (pp
, "device_resident");
746 pp_string (pp
, "link");
752 dump_generic_node (pp
, OMP_CLAUSE_DECL (clause
),
755 if (OMP_CLAUSE_SIZE (clause
))
757 switch (OMP_CLAUSE_CODE (clause
) == OMP_CLAUSE_MAP
758 ? OMP_CLAUSE_MAP_KIND (clause
) : GOMP_MAP_TO
)
760 case GOMP_MAP_POINTER
:
761 case GOMP_MAP_FIRSTPRIVATE_POINTER
:
762 case GOMP_MAP_FIRSTPRIVATE_REFERENCE
:
763 case GOMP_MAP_ALWAYS_POINTER
:
764 pp_string (pp
, " [pointer assign, bias: ");
766 case GOMP_MAP_TO_PSET
:
767 pp_string (pp
, " [pointer set, len: ");
770 pp_string (pp
, " [len: ");
773 dump_generic_node (pp
, OMP_CLAUSE_SIZE (clause
),
775 pp_right_bracket (pp
);
780 case OMP_CLAUSE_FROM
:
781 pp_string (pp
, "from(");
782 dump_generic_node (pp
, OMP_CLAUSE_DECL (clause
),
784 goto print_clause_size
;
787 pp_string (pp
, "to(");
788 dump_generic_node (pp
, OMP_CLAUSE_DECL (clause
),
790 goto print_clause_size
;
792 case OMP_CLAUSE__CACHE_
:
794 dump_generic_node (pp
, OMP_CLAUSE_DECL (clause
),
796 goto print_clause_size
;
798 case OMP_CLAUSE_NUM_TEAMS
:
799 pp_string (pp
, "num_teams(");
800 dump_generic_node (pp
, OMP_CLAUSE_NUM_TEAMS_EXPR (clause
),
805 case OMP_CLAUSE_THREAD_LIMIT
:
806 pp_string (pp
, "thread_limit(");
807 dump_generic_node (pp
, OMP_CLAUSE_THREAD_LIMIT_EXPR (clause
),
812 case OMP_CLAUSE_DEVICE
:
813 pp_string (pp
, "device(");
814 dump_generic_node (pp
, OMP_CLAUSE_DEVICE_ID (clause
),
819 case OMP_CLAUSE_DIST_SCHEDULE
:
820 pp_string (pp
, "dist_schedule(static");
821 if (OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (clause
))
824 dump_generic_node (pp
,
825 OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (clause
),
831 case OMP_CLAUSE_PROC_BIND
:
832 pp_string (pp
, "proc_bind(");
833 switch (OMP_CLAUSE_PROC_BIND_KIND (clause
))
835 case OMP_CLAUSE_PROC_BIND_MASTER
:
836 pp_string (pp
, "master");
838 case OMP_CLAUSE_PROC_BIND_CLOSE
:
839 pp_string (pp
, "close");
841 case OMP_CLAUSE_PROC_BIND_SPREAD
:
842 pp_string (pp
, "spread");
850 case OMP_CLAUSE_SAFELEN
:
851 pp_string (pp
, "safelen(");
852 dump_generic_node (pp
, OMP_CLAUSE_SAFELEN_EXPR (clause
),
857 case OMP_CLAUSE_SIMDLEN
:
858 pp_string (pp
, "simdlen(");
859 dump_generic_node (pp
, OMP_CLAUSE_SIMDLEN_EXPR (clause
),
864 case OMP_CLAUSE_PRIORITY
:
865 pp_string (pp
, "priority(");
866 dump_generic_node (pp
, OMP_CLAUSE_PRIORITY_EXPR (clause
),
871 case OMP_CLAUSE_GRAINSIZE
:
872 pp_string (pp
, "grainsize(");
873 dump_generic_node (pp
, OMP_CLAUSE_GRAINSIZE_EXPR (clause
),
878 case OMP_CLAUSE_NUM_TASKS
:
879 pp_string (pp
, "num_tasks(");
880 dump_generic_node (pp
, OMP_CLAUSE_NUM_TASKS_EXPR (clause
),
885 case OMP_CLAUSE_HINT
:
886 pp_string (pp
, "hint(");
887 dump_generic_node (pp
, OMP_CLAUSE_HINT_EXPR (clause
),
892 case OMP_CLAUSE_DEFAULTMAP
:
893 pp_string (pp
, "defaultmap(tofrom:scalar)");
896 case OMP_CLAUSE__SIMDUID_
:
897 pp_string (pp
, "_simduid_(");
898 dump_generic_node (pp
, OMP_CLAUSE__SIMDUID__DECL (clause
),
903 case OMP_CLAUSE__SIMT_
:
904 pp_string (pp
, "_simt_");
907 case OMP_CLAUSE_GANG
:
908 pp_string (pp
, "gang");
909 if (OMP_CLAUSE_GANG_EXPR (clause
) != NULL_TREE
)
911 pp_string (pp
, "(num: ");
912 dump_generic_node (pp
, OMP_CLAUSE_GANG_EXPR (clause
),
915 if (OMP_CLAUSE_GANG_STATIC_EXPR (clause
) != NULL_TREE
)
917 if (OMP_CLAUSE_GANG_EXPR (clause
) == NULL_TREE
)
921 pp_string (pp
, "static:");
922 if (OMP_CLAUSE_GANG_STATIC_EXPR (clause
)
923 == integer_minus_one_node
)
924 pp_character (pp
, '*');
926 dump_generic_node (pp
, OMP_CLAUSE_GANG_STATIC_EXPR (clause
),
929 if (OMP_CLAUSE_GANG_EXPR (clause
) != NULL_TREE
930 || OMP_CLAUSE_GANG_STATIC_EXPR (clause
) != NULL_TREE
)
934 case OMP_CLAUSE_ASYNC
:
935 pp_string (pp
, "async");
936 if (OMP_CLAUSE_ASYNC_EXPR (clause
))
938 pp_character(pp
, '(');
939 dump_generic_node (pp
, OMP_CLAUSE_ASYNC_EXPR (clause
),
941 pp_character(pp
, ')');
945 case OMP_CLAUSE_AUTO
:
947 pp_string (pp
, omp_clause_code_name
[OMP_CLAUSE_CODE (clause
)]);
950 case OMP_CLAUSE_WAIT
:
951 pp_string (pp
, "wait(");
952 dump_generic_node (pp
, OMP_CLAUSE_WAIT_EXPR (clause
),
954 pp_character(pp
, ')');
957 case OMP_CLAUSE_WORKER
:
958 pp_string (pp
, "worker");
959 if (OMP_CLAUSE_WORKER_EXPR (clause
) != NULL_TREE
)
962 dump_generic_node (pp
, OMP_CLAUSE_WORKER_EXPR (clause
),
968 case OMP_CLAUSE_VECTOR
:
969 pp_string (pp
, "vector");
970 if (OMP_CLAUSE_VECTOR_EXPR (clause
) != NULL_TREE
)
973 dump_generic_node (pp
, OMP_CLAUSE_VECTOR_EXPR (clause
),
979 case OMP_CLAUSE_NUM_GANGS
:
980 pp_string (pp
, "num_gangs(");
981 dump_generic_node (pp
, OMP_CLAUSE_NUM_GANGS_EXPR (clause
),
983 pp_character (pp
, ')');
986 case OMP_CLAUSE_NUM_WORKERS
:
987 pp_string (pp
, "num_workers(");
988 dump_generic_node (pp
, OMP_CLAUSE_NUM_WORKERS_EXPR (clause
),
990 pp_character (pp
, ')');
993 case OMP_CLAUSE_VECTOR_LENGTH
:
994 pp_string (pp
, "vector_length(");
995 dump_generic_node (pp
, OMP_CLAUSE_VECTOR_LENGTH_EXPR (clause
),
997 pp_character (pp
, ')');
1000 case OMP_CLAUSE_INBRANCH
:
1001 pp_string (pp
, "inbranch");
1003 case OMP_CLAUSE_NOTINBRANCH
:
1004 pp_string (pp
, "notinbranch");
1006 case OMP_CLAUSE_FOR
:
1007 pp_string (pp
, "for");
1009 case OMP_CLAUSE_PARALLEL
:
1010 pp_string (pp
, "parallel");
1012 case OMP_CLAUSE_SECTIONS
:
1013 pp_string (pp
, "sections");
1015 case OMP_CLAUSE_TASKGROUP
:
1016 pp_string (pp
, "taskgroup");
1018 case OMP_CLAUSE_NOGROUP
:
1019 pp_string (pp
, "nogroup");
1021 case OMP_CLAUSE_THREADS
:
1022 pp_string (pp
, "threads");
1024 case OMP_CLAUSE_SIMD
:
1025 pp_string (pp
, "simd");
1027 case OMP_CLAUSE_INDEPENDENT
:
1028 pp_string (pp
, "independent");
1030 case OMP_CLAUSE_TILE
:
1031 pp_string (pp
, "tile(");
1032 dump_generic_node (pp
, OMP_CLAUSE_TILE_LIST (clause
),
1034 pp_right_paren (pp
);
1037 case OMP_CLAUSE__GRIDDIM_
:
1038 pp_string (pp
, "_griddim_(");
1039 pp_unsigned_wide_integer (pp
, OMP_CLAUSE__GRIDDIM__DIMENSION (clause
));
1041 dump_generic_node (pp
, OMP_CLAUSE__GRIDDIM__SIZE (clause
), spc
, flags
,
1044 dump_generic_node (pp
, OMP_CLAUSE__GRIDDIM__GROUP (clause
), spc
, flags
,
1046 pp_right_paren (pp
);
1050 /* Should never happen. */
1051 dump_generic_node (pp
, clause
, spc
, flags
, false);
1057 /* Dump the list of OpenMP clauses. PP, SPC and FLAGS are as in
1058 dump_generic_node. */
1061 dump_omp_clauses (pretty_printer
*pp
, tree clause
, int spc
, dump_flags_t flags
)
1069 dump_omp_clause (pp
, clause
, spc
, flags
);
1070 clause
= OMP_CLAUSE_CHAIN (clause
);
1078 /* Dump location LOC to PP. */
1081 dump_location (pretty_printer
*pp
, location_t loc
)
1083 expanded_location xloc
= expand_location (loc
);
1085 pp_left_bracket (pp
);
1088 pp_string (pp
, xloc
.file
);
1089 pp_string (pp
, ":");
1091 pp_decimal_int (pp
, xloc
.line
);
1093 pp_decimal_int (pp
, xloc
.column
);
1094 pp_string (pp
, "] ");
1098 /* Dump lexical block BLOCK. PP, SPC and FLAGS are as in
1099 dump_generic_node. */
1102 dump_block_node (pretty_printer
*pp
, tree block
, int spc
, dump_flags_t flags
)
1106 pp_printf (pp
, "BLOCK #%d ", BLOCK_NUMBER (block
));
1108 if (flags
& TDF_ADDRESS
)
1109 pp_printf (pp
, "[%p] ", (void *) block
);
1111 if (BLOCK_ABSTRACT (block
))
1112 pp_string (pp
, "[abstract] ");
1114 if (TREE_ASM_WRITTEN (block
))
1115 pp_string (pp
, "[written] ");
1117 if (flags
& TDF_SLIM
)
1120 if (BLOCK_SOURCE_LOCATION (block
))
1121 dump_location (pp
, BLOCK_SOURCE_LOCATION (block
));
1123 newline_and_indent (pp
, spc
+ 2);
1125 if (BLOCK_SUPERCONTEXT (block
))
1127 pp_string (pp
, "SUPERCONTEXT: ");
1128 dump_generic_node (pp
, BLOCK_SUPERCONTEXT (block
), 0,
1129 flags
| TDF_SLIM
, false);
1130 newline_and_indent (pp
, spc
+ 2);
1133 if (BLOCK_SUBBLOCKS (block
))
1135 pp_string (pp
, "SUBBLOCKS: ");
1136 for (t
= BLOCK_SUBBLOCKS (block
); t
; t
= BLOCK_CHAIN (t
))
1138 dump_generic_node (pp
, t
, 0, flags
| TDF_SLIM
, false);
1141 newline_and_indent (pp
, spc
+ 2);
1144 if (BLOCK_CHAIN (block
))
1146 pp_string (pp
, "SIBLINGS: ");
1147 for (t
= BLOCK_CHAIN (block
); t
; t
= BLOCK_CHAIN (t
))
1149 dump_generic_node (pp
, t
, 0, flags
| TDF_SLIM
, false);
1152 newline_and_indent (pp
, spc
+ 2);
1155 if (BLOCK_VARS (block
))
1157 pp_string (pp
, "VARS: ");
1158 for (t
= BLOCK_VARS (block
); t
; t
= TREE_CHAIN (t
))
1160 dump_generic_node (pp
, t
, 0, flags
, false);
1163 newline_and_indent (pp
, spc
+ 2);
1166 if (vec_safe_length (BLOCK_NONLOCALIZED_VARS (block
)) > 0)
1169 vec
<tree
, va_gc
> *nlv
= BLOCK_NONLOCALIZED_VARS (block
);
1171 pp_string (pp
, "NONLOCALIZED_VARS: ");
1172 FOR_EACH_VEC_ELT (*nlv
, i
, t
)
1174 dump_generic_node (pp
, t
, 0, flags
, false);
1177 newline_and_indent (pp
, spc
+ 2);
1180 if (BLOCK_ABSTRACT_ORIGIN (block
))
1182 pp_string (pp
, "ABSTRACT_ORIGIN: ");
1183 dump_generic_node (pp
, BLOCK_ABSTRACT_ORIGIN (block
), 0,
1184 flags
| TDF_SLIM
, false);
1185 newline_and_indent (pp
, spc
+ 2);
1188 if (BLOCK_FRAGMENT_ORIGIN (block
))
1190 pp_string (pp
, "FRAGMENT_ORIGIN: ");
1191 dump_generic_node (pp
, BLOCK_FRAGMENT_ORIGIN (block
), 0,
1192 flags
| TDF_SLIM
, false);
1193 newline_and_indent (pp
, spc
+ 2);
1196 if (BLOCK_FRAGMENT_CHAIN (block
))
1198 pp_string (pp
, "FRAGMENT_CHAIN: ");
1199 for (t
= BLOCK_FRAGMENT_CHAIN (block
); t
; t
= BLOCK_FRAGMENT_CHAIN (t
))
1201 dump_generic_node (pp
, t
, 0, flags
| TDF_SLIM
, false);
1204 newline_and_indent (pp
, spc
+ 2);
1209 /* Dump the node NODE on the pretty_printer PP, SPC spaces of
1210 indent. FLAGS specifies details to show in the dump (see TDF_* in
1211 dumpfile.h). If IS_STMT is true, the object printed is considered
1212 to be a statement and it is terminated by ';' if appropriate. */
1215 dump_generic_node (pretty_printer
*pp
, tree node
, int spc
, dump_flags_t flags
,
1222 enum tree_code code
;
1224 if (node
== NULL_TREE
)
1227 is_expr
= EXPR_P (node
);
1229 if (is_stmt
&& (flags
& TDF_STMTADDR
))
1230 pp_printf (pp
, "<&%p> ", (void *)node
);
1232 if ((flags
& TDF_LINENO
) && EXPR_HAS_LOCATION (node
))
1233 dump_location (pp
, EXPR_LOCATION (node
));
1235 code
= TREE_CODE (node
);
1239 pp_string (pp
, "<<< error >>>");
1242 case IDENTIFIER_NODE
:
1243 pp_tree_identifier (pp
, node
);
1247 while (node
&& node
!= error_mark_node
)
1249 if (TREE_PURPOSE (node
))
1251 dump_generic_node (pp
, TREE_PURPOSE (node
), spc
, flags
, false);
1254 dump_generic_node (pp
, TREE_VALUE (node
), spc
, flags
, false);
1255 node
= TREE_CHAIN (node
);
1256 if (node
&& TREE_CODE (node
) == TREE_LIST
)
1265 dump_generic_node (pp
, BINFO_TYPE (node
), spc
, flags
, false);
1271 if (TREE_VEC_LENGTH (node
) > 0)
1273 size_t len
= TREE_VEC_LENGTH (node
);
1274 for (i
= 0; i
< len
- 1; i
++)
1276 dump_generic_node (pp
, TREE_VEC_ELT (node
, i
), spc
, flags
,
1281 dump_generic_node (pp
, TREE_VEC_ELT (node
, len
- 1), spc
,
1288 case POINTER_BOUNDS_TYPE
:
1291 case FIXED_POINT_TYPE
:
1297 unsigned int quals
= TYPE_QUALS (node
);
1298 enum tree_code_class tclass
;
1300 if (quals
& TYPE_QUAL_ATOMIC
)
1301 pp_string (pp
, "atomic ");
1302 if (quals
& TYPE_QUAL_CONST
)
1303 pp_string (pp
, "const ");
1304 else if (quals
& TYPE_QUAL_VOLATILE
)
1305 pp_string (pp
, "volatile ");
1306 else if (quals
& TYPE_QUAL_RESTRICT
)
1307 pp_string (pp
, "restrict ");
1309 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node
)))
1311 pp_string (pp
, "<address-space-");
1312 pp_decimal_int (pp
, TYPE_ADDR_SPACE (node
));
1313 pp_string (pp
, "> ");
1316 tclass
= TREE_CODE_CLASS (TREE_CODE (node
));
1318 if (tclass
== tcc_declaration
)
1320 if (DECL_NAME (node
))
1321 dump_decl_name (pp
, node
, flags
);
1323 pp_string (pp
, "<unnamed type decl>");
1325 else if (tclass
== tcc_type
)
1327 if (TYPE_NAME (node
))
1329 if (TREE_CODE (TYPE_NAME (node
)) == IDENTIFIER_NODE
)
1330 pp_tree_identifier (pp
, TYPE_NAME (node
));
1331 else if (TREE_CODE (TYPE_NAME (node
)) == TYPE_DECL
1332 && DECL_NAME (TYPE_NAME (node
)))
1333 dump_decl_name (pp
, TYPE_NAME (node
), flags
);
1335 pp_string (pp
, "<unnamed type>");
1337 else if (TREE_CODE (node
) == VECTOR_TYPE
)
1339 pp_string (pp
, "vector");
1341 pp_wide_integer (pp
, TYPE_VECTOR_SUBPARTS (node
));
1342 pp_string (pp
, ") ");
1343 dump_generic_node (pp
, TREE_TYPE (node
), spc
, flags
, false);
1345 else if (TREE_CODE (node
) == INTEGER_TYPE
)
1347 if (TYPE_PRECISION (node
) == CHAR_TYPE_SIZE
)
1348 pp_string (pp
, (TYPE_UNSIGNED (node
)
1351 else if (TYPE_PRECISION (node
) == SHORT_TYPE_SIZE
)
1352 pp_string (pp
, (TYPE_UNSIGNED (node
)
1355 else if (TYPE_PRECISION (node
) == INT_TYPE_SIZE
)
1356 pp_string (pp
, (TYPE_UNSIGNED (node
)
1359 else if (TYPE_PRECISION (node
) == LONG_TYPE_SIZE
)
1360 pp_string (pp
, (TYPE_UNSIGNED (node
)
1363 else if (TYPE_PRECISION (node
) == LONG_LONG_TYPE_SIZE
)
1364 pp_string (pp
, (TYPE_UNSIGNED (node
)
1365 ? "unsigned long long"
1366 : "signed long long"));
1367 else if (TYPE_PRECISION (node
) >= CHAR_TYPE_SIZE
1368 && pow2p_hwi (TYPE_PRECISION (node
)))
1370 pp_string (pp
, (TYPE_UNSIGNED (node
) ? "uint" : "int"));
1371 pp_decimal_int (pp
, TYPE_PRECISION (node
));
1372 pp_string (pp
, "_t");
1376 pp_string (pp
, (TYPE_UNSIGNED (node
)
1377 ? "<unnamed-unsigned:"
1378 : "<unnamed-signed:"));
1379 pp_decimal_int (pp
, TYPE_PRECISION (node
));
1383 else if (TREE_CODE (node
) == COMPLEX_TYPE
)
1385 pp_string (pp
, "__complex__ ");
1386 dump_generic_node (pp
, TREE_TYPE (node
), spc
, flags
, false);
1388 else if (TREE_CODE (node
) == REAL_TYPE
)
1390 pp_string (pp
, "<float:");
1391 pp_decimal_int (pp
, TYPE_PRECISION (node
));
1394 else if (TREE_CODE (node
) == FIXED_POINT_TYPE
)
1396 pp_string (pp
, "<fixed-point-");
1397 pp_string (pp
, TYPE_SATURATING (node
) ? "sat:" : "nonsat:");
1398 pp_decimal_int (pp
, TYPE_PRECISION (node
));
1401 else if (TREE_CODE (node
) == VOID_TYPE
)
1402 pp_string (pp
, "void");
1404 pp_string (pp
, "<unnamed type>");
1410 case REFERENCE_TYPE
:
1411 str
= (TREE_CODE (node
) == POINTER_TYPE
? "*" : "&");
1413 if (TREE_TYPE (node
) == NULL
)
1415 pp_string (pp
, str
);
1416 pp_string (pp
, "<null type>");
1418 else if (TREE_CODE (TREE_TYPE (node
)) == FUNCTION_TYPE
)
1420 tree fnode
= TREE_TYPE (node
);
1422 dump_generic_node (pp
, TREE_TYPE (fnode
), spc
, flags
, false);
1425 pp_string (pp
, str
);
1426 if (TYPE_IDENTIFIER (node
))
1427 dump_generic_node (pp
, TYPE_NAME (node
), spc
, flags
, false);
1428 else if (flags
& TDF_NOUID
)
1429 pp_printf (pp
, "<Txxxx>");
1431 pp_printf (pp
, "<T%x>", TYPE_UID (node
));
1433 pp_right_paren (pp
);
1434 dump_function_declaration (pp
, fnode
, spc
, flags
);
1438 unsigned int quals
= TYPE_QUALS (node
);
1440 dump_generic_node (pp
, TREE_TYPE (node
), spc
, flags
, false);
1442 pp_string (pp
, str
);
1444 if (quals
& TYPE_QUAL_CONST
)
1445 pp_string (pp
, " const");
1446 if (quals
& TYPE_QUAL_VOLATILE
)
1447 pp_string (pp
, " volatile");
1448 if (quals
& TYPE_QUAL_RESTRICT
)
1449 pp_string (pp
, " restrict");
1451 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node
)))
1453 pp_string (pp
, " <address-space-");
1454 pp_decimal_int (pp
, TYPE_ADDR_SPACE (node
));
1458 if (TYPE_REF_CAN_ALIAS_ALL (node
))
1459 pp_string (pp
, " {ref-all}");
1469 if (flags
& TDF_GIMPLE
)
1471 pp_string (pp
, "__MEM <");
1472 dump_generic_node (pp
, TREE_TYPE (node
),
1473 spc
, flags
| TDF_SLIM
, false);
1474 if (TYPE_ALIGN (TREE_TYPE (node
))
1475 != TYPE_ALIGN (TYPE_MAIN_VARIANT (TREE_TYPE (node
))))
1477 pp_string (pp
, ", ");
1478 pp_decimal_int (pp
, TYPE_ALIGN (TREE_TYPE (node
)));
1481 pp_string (pp
, " (");
1482 if (TREE_TYPE (TREE_OPERAND (node
, 0))
1483 != TREE_TYPE (TREE_OPERAND (node
, 1)))
1486 dump_generic_node (pp
, TREE_TYPE (TREE_OPERAND (node
, 1)),
1487 spc
, flags
| TDF_SLIM
, false);
1488 pp_right_paren (pp
);
1490 dump_generic_node (pp
, TREE_OPERAND (node
, 0),
1491 spc
, flags
| TDF_SLIM
, false);
1492 if (! integer_zerop (TREE_OPERAND (node
, 1)))
1494 pp_string (pp
, " + ");
1495 dump_generic_node (pp
, TREE_OPERAND (node
, 1),
1496 spc
, flags
| TDF_SLIM
, false);
1498 pp_right_paren (pp
);
1500 else if (integer_zerop (TREE_OPERAND (node
, 1))
1501 /* Dump the types of INTEGER_CSTs explicitly, for we can't
1502 infer them and MEM_ATTR caching will share MEM_REFs
1503 with differently-typed op0s. */
1504 && TREE_CODE (TREE_OPERAND (node
, 0)) != INTEGER_CST
1505 /* Released SSA_NAMES have no TREE_TYPE. */
1506 && TREE_TYPE (TREE_OPERAND (node
, 0)) != NULL_TREE
1507 /* Same pointer types, but ignoring POINTER_TYPE vs.
1509 && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node
, 0)))
1510 == TREE_TYPE (TREE_TYPE (TREE_OPERAND (node
, 1))))
1511 && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (node
, 0)))
1512 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (node
, 1))))
1513 && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node
, 0)))
1514 == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node
, 1))))
1515 /* Same value types ignoring qualifiers. */
1516 && (TYPE_MAIN_VARIANT (TREE_TYPE (node
))
1517 == TYPE_MAIN_VARIANT
1518 (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node
, 1)))))
1519 && (!(flags
& TDF_ALIAS
)
1520 || MR_DEPENDENCE_CLIQUE (node
) == 0))
1522 if (TREE_CODE (TREE_OPERAND (node
, 0)) != ADDR_EXPR
)
1525 dump_generic_node (pp
, TREE_OPERAND (node
, 0),
1529 dump_generic_node (pp
,
1530 TREE_OPERAND (TREE_OPERAND (node
, 0), 0),
1537 pp_string (pp
, "MEM[");
1539 ptype
= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (node
, 1)));
1540 dump_generic_node (pp
, ptype
,
1541 spc
, flags
| TDF_SLIM
, false);
1542 pp_right_paren (pp
);
1543 dump_generic_node (pp
, TREE_OPERAND (node
, 0),
1545 if (!integer_zerop (TREE_OPERAND (node
, 1)))
1547 pp_string (pp
, " + ");
1548 dump_generic_node (pp
, TREE_OPERAND (node
, 1),
1551 if ((flags
& TDF_ALIAS
)
1552 && MR_DEPENDENCE_CLIQUE (node
) != 0)
1554 pp_string (pp
, " clique ");
1555 pp_unsigned_wide_integer (pp
, MR_DEPENDENCE_CLIQUE (node
));
1556 pp_string (pp
, " base ");
1557 pp_unsigned_wide_integer (pp
, MR_DEPENDENCE_BASE (node
));
1559 pp_right_bracket (pp
);
1564 case TARGET_MEM_REF
:
1566 const char *sep
= "";
1569 pp_string (pp
, "MEM[");
1571 if (TREE_CODE (TMR_BASE (node
)) == ADDR_EXPR
)
1573 pp_string (pp
, sep
);
1575 pp_string (pp
, "symbol: ");
1576 dump_generic_node (pp
, TREE_OPERAND (TMR_BASE (node
), 0),
1581 pp_string (pp
, sep
);
1583 pp_string (pp
, "base: ");
1584 dump_generic_node (pp
, TMR_BASE (node
), spc
, flags
, false);
1586 tmp
= TMR_INDEX2 (node
);
1589 pp_string (pp
, sep
);
1591 pp_string (pp
, "base: ");
1592 dump_generic_node (pp
, tmp
, spc
, flags
, false);
1594 tmp
= TMR_INDEX (node
);
1597 pp_string (pp
, sep
);
1599 pp_string (pp
, "index: ");
1600 dump_generic_node (pp
, tmp
, spc
, flags
, false);
1602 tmp
= TMR_STEP (node
);
1605 pp_string (pp
, sep
);
1607 pp_string (pp
, "step: ");
1608 dump_generic_node (pp
, tmp
, spc
, flags
, false);
1610 tmp
= TMR_OFFSET (node
);
1613 pp_string (pp
, sep
);
1615 pp_string (pp
, "offset: ");
1616 dump_generic_node (pp
, tmp
, spc
, flags
, false);
1618 pp_right_bracket (pp
);
1626 /* Print the innermost component type. */
1627 for (tmp
= TREE_TYPE (node
); TREE_CODE (tmp
) == ARRAY_TYPE
;
1628 tmp
= TREE_TYPE (tmp
))
1630 dump_generic_node (pp
, tmp
, spc
, flags
, false);
1632 /* Print the dimensions. */
1633 for (tmp
= node
; TREE_CODE (tmp
) == ARRAY_TYPE
; tmp
= TREE_TYPE (tmp
))
1634 dump_array_domain (pp
, TYPE_DOMAIN (tmp
), spc
, flags
);
1640 case QUAL_UNION_TYPE
:
1642 unsigned int quals
= TYPE_QUALS (node
);
1644 if (quals
& TYPE_QUAL_ATOMIC
)
1645 pp_string (pp
, "atomic ");
1646 if (quals
& TYPE_QUAL_CONST
)
1647 pp_string (pp
, "const ");
1648 if (quals
& TYPE_QUAL_VOLATILE
)
1649 pp_string (pp
, "volatile ");
1651 /* Print the name of the structure. */
1652 if (TREE_CODE (node
) == RECORD_TYPE
)
1653 pp_string (pp
, "struct ");
1654 else if (TREE_CODE (node
) == UNION_TYPE
)
1655 pp_string (pp
, "union ");
1657 if (TYPE_NAME (node
))
1658 dump_generic_node (pp
, TYPE_NAME (node
), spc
, flags
, false);
1659 else if (!(flags
& TDF_SLIM
))
1660 /* FIXME: If we eliminate the 'else' above and attempt
1661 to show the fields for named types, we may get stuck
1662 following a cycle of pointers to structs. The alleged
1663 self-reference check in print_struct_decl will not detect
1664 cycles involving more than one pointer or struct type. */
1665 print_struct_decl (pp
, node
, spc
, flags
);
1674 if (flags
& TDF_GIMPLE
1675 && (POINTER_TYPE_P (TREE_TYPE (node
))
1676 || (TYPE_PRECISION (TREE_TYPE (node
))
1677 < TYPE_PRECISION (integer_type_node
))
1678 || exact_log2 (TYPE_PRECISION (TREE_TYPE (node
))) == -1))
1680 pp_string (pp
, "_Literal (");
1681 dump_generic_node (pp
, TREE_TYPE (node
), spc
, flags
, false);
1682 pp_string (pp
, ") ");
1684 if (TREE_CODE (TREE_TYPE (node
)) == POINTER_TYPE
1685 && ! (flags
& TDF_GIMPLE
))
1687 /* In the case of a pointer, one may want to divide by the
1688 size of the pointed-to type. Unfortunately, this not
1689 straightforward. The C front-end maps expressions
1694 in such a way that the two INTEGER_CST nodes for "5" have
1695 different values but identical types. In the latter
1696 case, the 5 is multiplied by sizeof (int) in c-common.c
1697 (pointer_int_sum) to convert it to a byte address, and
1698 yet the type of the node is left unchanged. Argh. What
1699 is consistent though is that the number value corresponds
1700 to bytes (UNITS) offset.
1702 NB: Neither of the following divisors can be trivially
1703 used to recover the original literal:
1705 TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (node)))
1706 TYPE_PRECISION (TREE_TYPE (TREE_TYPE (node))) */
1707 pp_wide_integer (pp
, TREE_INT_CST_LOW (node
));
1708 pp_string (pp
, "B"); /* pseudo-unit */
1710 else if (tree_fits_shwi_p (node
))
1711 pp_wide_integer (pp
, tree_to_shwi (node
));
1712 else if (tree_fits_uhwi_p (node
))
1713 pp_unsigned_wide_integer (pp
, tree_to_uhwi (node
));
1716 wide_int val
= wi::to_wide (node
);
1718 if (wi::neg_p (val
, TYPE_SIGN (TREE_TYPE (node
))))
1723 print_hex (val
, pp_buffer (pp
)->digit_buffer
);
1724 pp_string (pp
, pp_buffer (pp
)->digit_buffer
);
1726 if ((flags
& TDF_GIMPLE
)
1727 && ! (POINTER_TYPE_P (TREE_TYPE (node
))
1728 || (TYPE_PRECISION (TREE_TYPE (node
))
1729 < TYPE_PRECISION (integer_type_node
))
1730 || exact_log2 (TYPE_PRECISION (TREE_TYPE (node
))) == -1))
1732 if (TYPE_UNSIGNED (TREE_TYPE (node
)))
1733 pp_character (pp
, 'u');
1734 if (TYPE_PRECISION (TREE_TYPE (node
))
1735 == TYPE_PRECISION (unsigned_type_node
))
1737 else if (TYPE_PRECISION (TREE_TYPE (node
))
1738 == TYPE_PRECISION (long_unsigned_type_node
))
1739 pp_character (pp
, 'l');
1740 else if (TYPE_PRECISION (TREE_TYPE (node
))
1741 == TYPE_PRECISION (long_long_unsigned_type_node
))
1742 pp_string (pp
, "ll");
1744 if (TREE_OVERFLOW (node
))
1745 pp_string (pp
, "(OVF)");
1749 pp_string (pp
, "POLY_INT_CST [");
1750 dump_generic_node (pp
, POLY_INT_CST_COEFF (node
, 0), spc
, flags
, false);
1751 for (unsigned int i
= 1; i
< NUM_POLY_INT_COEFFS
; ++i
)
1753 pp_string (pp
, ", ");
1754 dump_generic_node (pp
, POLY_INT_CST_COEFF (node
, i
),
1757 pp_string (pp
, "]");
1761 /* Code copied from print_node. */
1764 if (TREE_OVERFLOW (node
))
1765 pp_string (pp
, " overflow");
1767 d
= TREE_REAL_CST (node
);
1768 if (REAL_VALUE_ISINF (d
))
1769 pp_string (pp
, REAL_VALUE_NEGATIVE (d
) ? " -Inf" : " Inf");
1770 else if (REAL_VALUE_ISNAN (d
))
1771 pp_string (pp
, " Nan");
1775 real_to_decimal (string
, &d
, sizeof (string
), 0, 1);
1776 pp_string (pp
, string
);
1784 fixed_to_decimal (string
, TREE_FIXED_CST_PTR (node
), sizeof (string
));
1785 pp_string (pp
, string
);
1790 pp_string (pp
, "__complex__ (");
1791 dump_generic_node (pp
, TREE_REALPART (node
), spc
, flags
, false);
1792 pp_string (pp
, ", ");
1793 dump_generic_node (pp
, TREE_IMAGPART (node
), spc
, flags
, false);
1794 pp_right_paren (pp
);
1798 pp_string (pp
, "\"");
1799 pretty_print_string (pp
, TREE_STRING_POINTER (node
));
1800 pp_string (pp
, "\"");
1806 pp_string (pp
, "{ ");
1807 unsigned HOST_WIDE_INT nunits
;
1808 if (!VECTOR_CST_NELTS (node
).is_constant (&nunits
))
1809 nunits
= vector_cst_encoded_nelts (node
);
1810 for (i
= 0; i
< nunits
; ++i
)
1813 pp_string (pp
, ", ");
1814 dump_generic_node (pp
, VECTOR_CST_ELT (node
, i
),
1817 if (!VECTOR_CST_NELTS (node
).is_constant ())
1818 pp_string (pp
, ", ...");
1819 pp_string (pp
, " }");
1825 dump_generic_node (pp
, TREE_TYPE (node
), spc
, flags
, false);
1827 if (TREE_CODE (node
) == METHOD_TYPE
)
1829 if (TYPE_METHOD_BASETYPE (node
))
1830 dump_generic_node (pp
, TYPE_NAME (TYPE_METHOD_BASETYPE (node
)),
1833 pp_string (pp
, "<null method basetype>");
1834 pp_colon_colon (pp
);
1836 if (TYPE_IDENTIFIER (node
))
1837 dump_generic_node (pp
, TYPE_NAME (node
), spc
, flags
, false);
1838 else if (TYPE_NAME (node
) && DECL_NAME (TYPE_NAME (node
)))
1839 dump_decl_name (pp
, TYPE_NAME (node
), flags
);
1840 else if (flags
& TDF_NOUID
)
1841 pp_printf (pp
, "<Txxxx>");
1843 pp_printf (pp
, "<T%x>", TYPE_UID (node
));
1844 dump_function_declaration (pp
, node
, spc
, flags
);
1849 dump_decl_name (pp
, node
, flags
);
1853 if (DECL_NAME (node
))
1854 dump_decl_name (pp
, node
, flags
);
1855 else if (LABEL_DECL_UID (node
) != -1)
1857 if (flags
& TDF_GIMPLE
)
1858 pp_printf (pp
, "L%d", (int) LABEL_DECL_UID (node
));
1860 pp_printf (pp
, "<L%d>", (int) LABEL_DECL_UID (node
));
1864 if (flags
& TDF_NOUID
)
1865 pp_string (pp
, "<D.xxxx>");
1868 if (flags
& TDF_GIMPLE
)
1869 pp_printf (pp
, "<D%u>", DECL_UID (node
));
1871 pp_printf (pp
, "<D.%u>", DECL_UID (node
));
1877 if (DECL_IS_BUILTIN (node
))
1879 /* Don't print the declaration of built-in types. */
1882 if (DECL_NAME (node
))
1883 dump_decl_name (pp
, node
, flags
);
1884 else if (TYPE_NAME (TREE_TYPE (node
)) != node
)
1886 pp_string (pp
, (TREE_CODE (TREE_TYPE (node
)) == UNION_TYPE
1887 ? "union" : "struct "));
1888 dump_generic_node (pp
, TREE_TYPE (node
), spc
, flags
, false);
1891 pp_string (pp
, "<anon>");
1897 case DEBUG_EXPR_DECL
:
1898 case NAMESPACE_DECL
:
1900 dump_decl_name (pp
, node
, flags
);
1904 pp_string (pp
, "<retval>");
1908 op0
= TREE_OPERAND (node
, 0);
1911 && (TREE_CODE (op0
) == INDIRECT_REF
1912 || (TREE_CODE (op0
) == MEM_REF
1913 && TREE_CODE (TREE_OPERAND (op0
, 0)) != ADDR_EXPR
1914 && integer_zerop (TREE_OPERAND (op0
, 1))
1915 /* Dump the types of INTEGER_CSTs explicitly, for we
1916 can't infer them and MEM_ATTR caching will share
1917 MEM_REFs with differently-typed op0s. */
1918 && TREE_CODE (TREE_OPERAND (op0
, 0)) != INTEGER_CST
1919 /* Released SSA_NAMES have no TREE_TYPE. */
1920 && TREE_TYPE (TREE_OPERAND (op0
, 0)) != NULL_TREE
1921 /* Same pointer types, but ignoring POINTER_TYPE vs.
1923 && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0
, 0)))
1924 == TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0
, 1))))
1925 && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0
, 0)))
1926 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0
, 1))))
1927 && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0
, 0)))
1928 == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0
, 1))))
1929 /* Same value types ignoring qualifiers. */
1930 && (TYPE_MAIN_VARIANT (TREE_TYPE (op0
))
1931 == TYPE_MAIN_VARIANT
1932 (TREE_TYPE (TREE_TYPE (TREE_OPERAND (op0
, 1)))))
1933 && MR_DEPENDENCE_CLIQUE (op0
) == 0)))
1935 op0
= TREE_OPERAND (op0
, 0);
1938 if (op_prio (op0
) < op_prio (node
))
1940 dump_generic_node (pp
, op0
, spc
, flags
, false);
1941 if (op_prio (op0
) < op_prio (node
))
1942 pp_right_paren (pp
);
1943 pp_string (pp
, str
);
1944 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1945 op0
= component_ref_field_offset (node
);
1946 if (op0
&& TREE_CODE (op0
) != INTEGER_CST
)
1948 pp_string (pp
, "{off: ");
1949 dump_generic_node (pp
, op0
, spc
, flags
, false);
1950 pp_right_brace (pp
);
1955 pp_string (pp
, "BIT_FIELD_REF <");
1956 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1957 pp_string (pp
, ", ");
1958 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1959 pp_string (pp
, ", ");
1960 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
1964 case BIT_INSERT_EXPR
:
1965 pp_string (pp
, "BIT_INSERT_EXPR <");
1966 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
1967 pp_string (pp
, ", ");
1968 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1969 pp_string (pp
, ", ");
1970 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
1971 pp_string (pp
, " (");
1972 if (INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (node
, 1))))
1974 TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (node
, 1))));
1976 dump_generic_node (pp
, TYPE_SIZE (TREE_TYPE (TREE_OPERAND (node
, 1))),
1978 pp_string (pp
, " bits)>");
1982 case ARRAY_RANGE_REF
:
1983 op0
= TREE_OPERAND (node
, 0);
1984 if (op_prio (op0
) < op_prio (node
))
1986 dump_generic_node (pp
, op0
, spc
, flags
, false);
1987 if (op_prio (op0
) < op_prio (node
))
1988 pp_right_paren (pp
);
1989 pp_left_bracket (pp
);
1990 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
1991 if (TREE_CODE (node
) == ARRAY_RANGE_REF
)
1992 pp_string (pp
, " ...");
1993 pp_right_bracket (pp
);
1995 op0
= array_ref_low_bound (node
);
1996 op1
= array_ref_element_size (node
);
1998 if (!integer_zerop (op0
)
1999 || TREE_OPERAND (node
, 2)
2000 || TREE_OPERAND (node
, 3))
2002 pp_string (pp
, "{lb: ");
2003 dump_generic_node (pp
, op0
, spc
, flags
, false);
2004 pp_string (pp
, " sz: ");
2005 dump_generic_node (pp
, op1
, spc
, flags
, false);
2006 pp_right_brace (pp
);
2012 unsigned HOST_WIDE_INT ix
;
2014 bool is_struct_init
= false;
2015 bool is_array_init
= false;
2018 if (TREE_CLOBBER_P (node
))
2019 pp_string (pp
, "CLOBBER");
2020 else if (TREE_CODE (TREE_TYPE (node
)) == RECORD_TYPE
2021 || TREE_CODE (TREE_TYPE (node
)) == UNION_TYPE
)
2022 is_struct_init
= true;
2023 else if (TREE_CODE (TREE_TYPE (node
)) == ARRAY_TYPE
2024 && TYPE_DOMAIN (TREE_TYPE (node
))
2025 && TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node
)))
2026 && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node
))))
2029 tree minv
= TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node
)));
2030 is_array_init
= true;
2031 curidx
= wi::to_widest (minv
);
2033 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (node
), ix
, field
, val
)
2040 dump_generic_node (pp
, field
, spc
, flags
, false);
2043 else if (is_array_init
2044 && (TREE_CODE (field
) != INTEGER_CST
2045 || curidx
!= wi::to_widest (field
)))
2047 pp_left_bracket (pp
);
2048 if (TREE_CODE (field
) == RANGE_EXPR
)
2050 dump_generic_node (pp
, TREE_OPERAND (field
, 0), spc
,
2052 pp_string (pp
, " ... ");
2053 dump_generic_node (pp
, TREE_OPERAND (field
, 1), spc
,
2055 if (TREE_CODE (TREE_OPERAND (field
, 1)) == INTEGER_CST
)
2056 curidx
= wi::to_widest (TREE_OPERAND (field
, 1));
2059 dump_generic_node (pp
, field
, spc
, flags
, false);
2060 if (TREE_CODE (field
) == INTEGER_CST
)
2061 curidx
= wi::to_widest (field
);
2062 pp_string (pp
, "]=");
2067 if (val
&& TREE_CODE (val
) == ADDR_EXPR
)
2068 if (TREE_CODE (TREE_OPERAND (val
, 0)) == FUNCTION_DECL
)
2069 val
= TREE_OPERAND (val
, 0);
2070 if (val
&& TREE_CODE (val
) == FUNCTION_DECL
)
2071 dump_decl_name (pp
, val
, flags
);
2073 dump_generic_node (pp
, val
, spc
, flags
, false);
2074 if (ix
!= CONSTRUCTOR_NELTS (node
) - 1)
2080 pp_right_brace (pp
);
2087 if (flags
& TDF_SLIM
)
2089 pp_string (pp
, "<COMPOUND_EXPR>");
2093 dump_generic_node (pp
, TREE_OPERAND (node
, 0),
2094 spc
, flags
, !(flags
& TDF_SLIM
));
2095 if (flags
& TDF_SLIM
)
2096 newline_and_indent (pp
, spc
);
2103 for (tp
= &TREE_OPERAND (node
, 1);
2104 TREE_CODE (*tp
) == COMPOUND_EXPR
;
2105 tp
= &TREE_OPERAND (*tp
, 1))
2107 dump_generic_node (pp
, TREE_OPERAND (*tp
, 0),
2108 spc
, flags
, !(flags
& TDF_SLIM
));
2109 if (flags
& TDF_SLIM
)
2110 newline_and_indent (pp
, spc
);
2118 dump_generic_node (pp
, *tp
, spc
, flags
, !(flags
& TDF_SLIM
));
2122 case STATEMENT_LIST
:
2124 tree_stmt_iterator si
;
2127 if (flags
& TDF_SLIM
)
2129 pp_string (pp
, "<STATEMENT_LIST>");
2133 for (si
= tsi_start (node
); !tsi_end_p (si
); tsi_next (&si
))
2136 newline_and_indent (pp
, spc
);
2139 dump_generic_node (pp
, tsi_stmt (si
), spc
, flags
, true);
2146 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
,
2151 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
,
2156 pp_string (pp
, "TARGET_EXPR <");
2157 dump_generic_node (pp
, TARGET_EXPR_SLOT (node
), spc
, flags
, false);
2160 dump_generic_node (pp
, TARGET_EXPR_INITIAL (node
), spc
, flags
, false);
2165 print_declaration (pp
, DECL_EXPR_DECL (node
), spc
, flags
);
2170 if (TREE_TYPE (node
) == NULL
|| TREE_TYPE (node
) == void_type_node
)
2172 pp_string (pp
, "if (");
2173 dump_generic_node (pp
, COND_EXPR_COND (node
), spc
, flags
, false);
2174 pp_right_paren (pp
);
2175 /* The lowered cond_exprs should always be printed in full. */
2176 if (COND_EXPR_THEN (node
)
2177 && (IS_EMPTY_STMT (COND_EXPR_THEN (node
))
2178 || TREE_CODE (COND_EXPR_THEN (node
)) == GOTO_EXPR
)
2179 && COND_EXPR_ELSE (node
)
2180 && (IS_EMPTY_STMT (COND_EXPR_ELSE (node
))
2181 || TREE_CODE (COND_EXPR_ELSE (node
)) == GOTO_EXPR
))
2184 dump_generic_node (pp
, COND_EXPR_THEN (node
),
2186 if (!IS_EMPTY_STMT (COND_EXPR_ELSE (node
)))
2188 pp_string (pp
, " else ");
2189 dump_generic_node (pp
, COND_EXPR_ELSE (node
),
2193 else if (!(flags
& TDF_SLIM
))
2195 /* Output COND_EXPR_THEN. */
2196 if (COND_EXPR_THEN (node
))
2198 newline_and_indent (pp
, spc
+2);
2200 newline_and_indent (pp
, spc
+4);
2201 dump_generic_node (pp
, COND_EXPR_THEN (node
), spc
+4,
2203 newline_and_indent (pp
, spc
+2);
2204 pp_right_brace (pp
);
2207 /* Output COND_EXPR_ELSE. */
2208 if (COND_EXPR_ELSE (node
)
2209 && !IS_EMPTY_STMT (COND_EXPR_ELSE (node
)))
2211 newline_and_indent (pp
, spc
);
2212 pp_string (pp
, "else");
2213 newline_and_indent (pp
, spc
+2);
2215 newline_and_indent (pp
, spc
+4);
2216 dump_generic_node (pp
, COND_EXPR_ELSE (node
), spc
+4,
2218 newline_and_indent (pp
, spc
+2);
2219 pp_right_brace (pp
);
2226 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2230 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2234 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2240 if (!(flags
& TDF_SLIM
))
2242 if (BIND_EXPR_VARS (node
))
2246 for (op0
= BIND_EXPR_VARS (node
); op0
; op0
= DECL_CHAIN (op0
))
2248 print_declaration (pp
, op0
, spc
+2, flags
);
2253 newline_and_indent (pp
, spc
+2);
2254 dump_generic_node (pp
, BIND_EXPR_BODY (node
), spc
+2, flags
, true);
2255 newline_and_indent (pp
, spc
);
2256 pp_right_brace (pp
);
2262 if (CALL_EXPR_FN (node
) != NULL_TREE
)
2263 print_call_name (pp
, CALL_EXPR_FN (node
), flags
);
2265 pp_string (pp
, internal_fn_name (CALL_EXPR_IFN (node
)));
2267 /* Print parameters. */
2272 call_expr_arg_iterator iter
;
2273 FOR_EACH_CALL_EXPR_ARG (arg
, iter
, node
)
2275 dump_generic_node (pp
, arg
, spc
, flags
, false);
2276 if (more_call_expr_args_p (&iter
))
2283 if (CALL_EXPR_VA_ARG_PACK (node
))
2285 if (call_expr_nargs (node
) > 0)
2290 pp_string (pp
, "__builtin_va_arg_pack ()");
2292 pp_right_paren (pp
);
2294 op1
= CALL_EXPR_STATIC_CHAIN (node
);
2297 pp_string (pp
, " [static-chain: ");
2298 dump_generic_node (pp
, op1
, spc
, flags
, false);
2299 pp_right_bracket (pp
);
2302 if (CALL_EXPR_RETURN_SLOT_OPT (node
))
2303 pp_string (pp
, " [return slot optimization]");
2304 if (CALL_EXPR_TAILCALL (node
))
2305 pp_string (pp
, " [tail call]");
2308 case WITH_CLEANUP_EXPR
:
2312 case CLEANUP_POINT_EXPR
:
2313 pp_string (pp
, "<<cleanup_point ");
2314 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2315 pp_string (pp
, ">>");
2318 case PLACEHOLDER_EXPR
:
2319 pp_string (pp
, "<PLACEHOLDER_EXPR ");
2320 dump_generic_node (pp
, TREE_TYPE (node
), spc
, flags
, false);
2324 /* Binary arithmetic and logic expressions. */
2325 case WIDEN_SUM_EXPR
:
2326 case WIDEN_MULT_EXPR
:
2328 case MULT_HIGHPART_EXPR
:
2330 case POINTER_PLUS_EXPR
:
2331 case POINTER_DIFF_EXPR
:
2333 case TRUNC_DIV_EXPR
:
2335 case FLOOR_DIV_EXPR
:
2336 case ROUND_DIV_EXPR
:
2337 case TRUNC_MOD_EXPR
:
2339 case FLOOR_MOD_EXPR
:
2340 case ROUND_MOD_EXPR
:
2342 case EXACT_DIV_EXPR
:
2347 case WIDEN_LSHIFT_EXPR
:
2351 case TRUTH_ANDIF_EXPR
:
2352 case TRUTH_ORIF_EXPR
:
2353 case TRUTH_AND_EXPR
:
2355 case TRUTH_XOR_EXPR
:
2369 case UNORDERED_EXPR
:
2371 const char *op
= op_symbol (node
);
2372 op0
= TREE_OPERAND (node
, 0);
2373 op1
= TREE_OPERAND (node
, 1);
2375 /* When the operands are expressions with less priority,
2376 keep semantics of the tree representation. */
2377 if (op_prio (op0
) <= op_prio (node
))
2380 dump_generic_node (pp
, op0
, spc
, flags
, false);
2381 pp_right_paren (pp
);
2384 dump_generic_node (pp
, op0
, spc
, flags
, false);
2390 /* When the operands are expressions with less priority,
2391 keep semantics of the tree representation. */
2392 if (op_prio (op1
) <= op_prio (node
))
2395 dump_generic_node (pp
, op1
, spc
, flags
, false);
2396 pp_right_paren (pp
);
2399 dump_generic_node (pp
, op1
, spc
, flags
, false);
2403 /* Unary arithmetic and logic expressions. */
2406 case TRUTH_NOT_EXPR
:
2408 case PREDECREMENT_EXPR
:
2409 case PREINCREMENT_EXPR
:
2411 if (TREE_CODE (node
) == ADDR_EXPR
2412 && (TREE_CODE (TREE_OPERAND (node
, 0)) == STRING_CST
2413 || TREE_CODE (TREE_OPERAND (node
, 0)) == FUNCTION_DECL
))
2414 ; /* Do not output '&' for strings and function pointers. */
2416 pp_string (pp
, op_symbol (node
));
2418 if (op_prio (TREE_OPERAND (node
, 0)) < op_prio (node
))
2421 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2422 pp_right_paren (pp
);
2425 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2428 case POSTDECREMENT_EXPR
:
2429 case POSTINCREMENT_EXPR
:
2430 if (op_prio (TREE_OPERAND (node
, 0)) < op_prio (node
))
2433 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2434 pp_right_paren (pp
);
2437 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2438 pp_string (pp
, op_symbol (node
));
2442 pp_string (pp
, "MIN_EXPR <");
2443 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2444 pp_string (pp
, ", ");
2445 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2450 pp_string (pp
, "MAX_EXPR <");
2451 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2452 pp_string (pp
, ", ");
2453 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2458 pp_string (pp
, "ABS_EXPR <");
2459 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2467 case ADDR_SPACE_CONVERT_EXPR
:
2468 case FIXED_CONVERT_EXPR
:
2469 case FIX_TRUNC_EXPR
:
2472 type
= TREE_TYPE (node
);
2473 op0
= TREE_OPERAND (node
, 0);
2474 if (type
!= TREE_TYPE (op0
))
2477 dump_generic_node (pp
, type
, spc
, flags
, false);
2478 pp_string (pp
, ") ");
2480 if (op_prio (op0
) < op_prio (node
))
2482 dump_generic_node (pp
, op0
, spc
, flags
, false);
2483 if (op_prio (op0
) < op_prio (node
))
2484 pp_right_paren (pp
);
2487 case VIEW_CONVERT_EXPR
:
2488 pp_string (pp
, "VIEW_CONVERT_EXPR<");
2489 dump_generic_node (pp
, TREE_TYPE (node
), spc
, flags
, false);
2490 pp_string (pp
, ">(");
2491 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2492 pp_right_paren (pp
);
2496 pp_string (pp
, "((");
2497 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2498 pp_string (pp
, "))");
2501 case NON_LVALUE_EXPR
:
2502 pp_string (pp
, "NON_LVALUE_EXPR <");
2503 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2508 pp_string (pp
, "SAVE_EXPR <");
2509 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2514 pp_string (pp
, "COMPLEX_EXPR <");
2515 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2516 pp_string (pp
, ", ");
2517 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2522 pp_string (pp
, "CONJ_EXPR <");
2523 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2528 if (flags
& TDF_GIMPLE
)
2530 pp_string (pp
, "__real ");
2531 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2535 pp_string (pp
, "REALPART_EXPR <");
2536 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2542 if (flags
& TDF_GIMPLE
)
2544 pp_string (pp
, "__imag ");
2545 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2549 pp_string (pp
, "IMAGPART_EXPR <");
2550 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2556 pp_string (pp
, "VA_ARG_EXPR <");
2557 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2561 case TRY_FINALLY_EXPR
:
2562 case TRY_CATCH_EXPR
:
2563 pp_string (pp
, "try");
2564 newline_and_indent (pp
, spc
+2);
2566 newline_and_indent (pp
, spc
+4);
2567 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
+4, flags
, true);
2568 newline_and_indent (pp
, spc
+2);
2569 pp_right_brace (pp
);
2570 newline_and_indent (pp
, spc
);
2572 (TREE_CODE (node
) == TRY_CATCH_EXPR
) ? "catch" : "finally");
2573 newline_and_indent (pp
, spc
+2);
2575 newline_and_indent (pp
, spc
+4);
2576 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
+4, flags
, true);
2577 newline_and_indent (pp
, spc
+2);
2578 pp_right_brace (pp
);
2583 pp_string (pp
, "catch (");
2584 dump_generic_node (pp
, CATCH_TYPES (node
), spc
+2, flags
, false);
2585 pp_right_paren (pp
);
2586 newline_and_indent (pp
, spc
+2);
2588 newline_and_indent (pp
, spc
+4);
2589 dump_generic_node (pp
, CATCH_BODY (node
), spc
+4, flags
, true);
2590 newline_and_indent (pp
, spc
+2);
2591 pp_right_brace (pp
);
2595 case EH_FILTER_EXPR
:
2596 pp_string (pp
, "<<<eh_filter (");
2597 dump_generic_node (pp
, EH_FILTER_TYPES (node
), spc
+2, flags
, false);
2598 pp_string (pp
, ")>>>");
2599 newline_and_indent (pp
, spc
+2);
2601 newline_and_indent (pp
, spc
+4);
2602 dump_generic_node (pp
, EH_FILTER_FAILURE (node
), spc
+4, flags
, true);
2603 newline_and_indent (pp
, spc
+2);
2604 pp_right_brace (pp
);
2609 op0
= TREE_OPERAND (node
, 0);
2610 /* If this is for break or continue, don't bother printing it. */
2611 if (DECL_NAME (op0
))
2613 const char *name
= IDENTIFIER_POINTER (DECL_NAME (op0
));
2614 if (strcmp (name
, "break") == 0
2615 || strcmp (name
, "continue") == 0)
2618 dump_generic_node (pp
, op0
, spc
, flags
, false);
2620 if (DECL_NONLOCAL (op0
))
2621 pp_string (pp
, " [non-local]");
2625 pp_string (pp
, "while (1)");
2626 if (!(flags
& TDF_SLIM
))
2628 newline_and_indent (pp
, spc
+2);
2630 newline_and_indent (pp
, spc
+4);
2631 dump_generic_node (pp
, LOOP_EXPR_BODY (node
), spc
+4, flags
, true);
2632 newline_and_indent (pp
, spc
+2);
2633 pp_right_brace (pp
);
2639 pp_string (pp
, "// predicted ");
2640 if (PREDICT_EXPR_OUTCOME (node
))
2641 pp_string (pp
, "likely by ");
2643 pp_string (pp
, "unlikely by ");
2644 pp_string (pp
, predictor_name (PREDICT_EXPR_PREDICTOR (node
)));
2645 pp_string (pp
, " predictor.");
2649 pp_string (pp
, "ANNOTATE_EXPR <");
2650 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2651 switch ((enum annot_expr_kind
) TREE_INT_CST_LOW (TREE_OPERAND (node
, 1)))
2653 case annot_expr_ivdep_kind
:
2654 pp_string (pp
, ", ivdep");
2656 case annot_expr_unroll_kind
:
2657 pp_printf (pp
, ", unroll %d",
2658 (int) TREE_INT_CST_LOW (TREE_OPERAND (node
, 2)));
2660 case annot_expr_no_vector_kind
:
2661 pp_string (pp
, ", no-vector");
2663 case annot_expr_vector_kind
:
2664 pp_string (pp
, ", vector");
2666 case annot_expr_parallel_kind
:
2667 pp_string (pp
, ", parallel");
2676 pp_string (pp
, "return");
2677 op0
= TREE_OPERAND (node
, 0);
2681 if (TREE_CODE (op0
) == MODIFY_EXPR
)
2682 dump_generic_node (pp
, TREE_OPERAND (op0
, 1),
2685 dump_generic_node (pp
, op0
, spc
, flags
, false);
2690 pp_string (pp
, "if (");
2691 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2692 pp_string (pp
, ") break");
2696 pp_string (pp
, "switch (");
2697 dump_generic_node (pp
, SWITCH_COND (node
), spc
, flags
, false);
2698 pp_right_paren (pp
);
2699 if (!(flags
& TDF_SLIM
))
2701 newline_and_indent (pp
, spc
+2);
2703 if (SWITCH_BODY (node
))
2705 newline_and_indent (pp
, spc
+4);
2706 dump_generic_node (pp
, SWITCH_BODY (node
), spc
+4, flags
,
2709 newline_and_indent (pp
, spc
+2);
2710 pp_right_brace (pp
);
2716 op0
= GOTO_DESTINATION (node
);
2717 if (TREE_CODE (op0
) != SSA_NAME
&& DECL_P (op0
) && DECL_NAME (op0
))
2719 const char *name
= IDENTIFIER_POINTER (DECL_NAME (op0
));
2720 if (strcmp (name
, "break") == 0
2721 || strcmp (name
, "continue") == 0)
2723 pp_string (pp
, name
);
2727 pp_string (pp
, "goto ");
2728 dump_generic_node (pp
, op0
, spc
, flags
, false);
2732 pp_string (pp
, "__asm__");
2733 if (ASM_VOLATILE_P (node
))
2734 pp_string (pp
, " __volatile__");
2736 dump_generic_node (pp
, ASM_STRING (node
), spc
, flags
, false);
2738 dump_generic_node (pp
, ASM_OUTPUTS (node
), spc
, flags
, false);
2740 dump_generic_node (pp
, ASM_INPUTS (node
), spc
, flags
, false);
2741 if (ASM_CLOBBERS (node
))
2744 dump_generic_node (pp
, ASM_CLOBBERS (node
), spc
, flags
, false);
2746 pp_right_paren (pp
);
2749 case CASE_LABEL_EXPR
:
2750 if (CASE_LOW (node
) && CASE_HIGH (node
))
2752 pp_string (pp
, "case ");
2753 dump_generic_node (pp
, CASE_LOW (node
), spc
, flags
, false);
2754 pp_string (pp
, " ... ");
2755 dump_generic_node (pp
, CASE_HIGH (node
), spc
, flags
, false);
2757 else if (CASE_LOW (node
))
2759 pp_string (pp
, "case ");
2760 dump_generic_node (pp
, CASE_LOW (node
), spc
, flags
, false);
2763 pp_string (pp
, "default");
2768 pp_string (pp
, "OBJ_TYPE_REF(");
2769 dump_generic_node (pp
, OBJ_TYPE_REF_EXPR (node
), spc
, flags
, false);
2771 /* We omit the class type for -fcompare-debug because we may
2772 drop TYPE_BINFO early depending on debug info, and then
2773 virtual_method_call_p would return false, whereas when
2774 TYPE_BINFO is preserved it may still return true and then
2775 we'd print the class type. Compare tree and rtl dumps for
2776 libstdc++-prettyprinters/shared_ptr.cc with and without -g,
2777 for example, at occurrences of OBJ_TYPE_REF. */
2778 if (!(flags
& (TDF_SLIM
| TDF_COMPARE_DEBUG
))
2779 && virtual_method_call_p (node
))
2781 pp_string (pp
, "(");
2782 dump_generic_node (pp
, obj_type_ref_class (node
), spc
, flags
, false);
2783 pp_string (pp
, ")");
2785 dump_generic_node (pp
, OBJ_TYPE_REF_OBJECT (node
), spc
, flags
, false);
2787 dump_generic_node (pp
, OBJ_TYPE_REF_TOKEN (node
), spc
, flags
, false);
2788 pp_right_paren (pp
);
2792 if (SSA_NAME_IDENTIFIER (node
))
2794 if ((flags
& TDF_NOUID
)
2795 && SSA_NAME_VAR (node
)
2796 && DECL_NAMELESS (SSA_NAME_VAR (node
)))
2797 dump_fancy_name (pp
, SSA_NAME_IDENTIFIER (node
));
2798 else if (! (flags
& TDF_GIMPLE
)
2799 || SSA_NAME_VAR (node
))
2800 dump_generic_node (pp
, SSA_NAME_IDENTIFIER (node
),
2804 pp_decimal_int (pp
, SSA_NAME_VERSION (node
));
2805 if (SSA_NAME_IS_DEFAULT_DEF (node
))
2806 pp_string (pp
, "(D)");
2807 if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (node
))
2808 pp_string (pp
, "(ab)");
2811 case WITH_SIZE_EXPR
:
2812 pp_string (pp
, "WITH_SIZE_EXPR <");
2813 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2814 pp_string (pp
, ", ");
2815 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2820 pp_string (pp
, "ASSERT_EXPR <");
2821 dump_generic_node (pp
, ASSERT_EXPR_VAR (node
), spc
, flags
, false);
2822 pp_string (pp
, ", ");
2823 dump_generic_node (pp
, ASSERT_EXPR_COND (node
), spc
, flags
, false);
2828 pp_string (pp
, "scev_known");
2831 case SCEV_NOT_KNOWN
:
2832 pp_string (pp
, "scev_not_known");
2835 case POLYNOMIAL_CHREC
:
2837 dump_generic_node (pp
, CHREC_LEFT (node
), spc
, flags
, false);
2838 pp_string (pp
, ", +, ");
2839 dump_generic_node (pp
, CHREC_RIGHT (node
), spc
, flags
, false);
2840 pp_printf (pp
, "}_%u", CHREC_VARIABLE (node
));
2844 case REALIGN_LOAD_EXPR
:
2845 pp_string (pp
, "REALIGN_LOAD <");
2846 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2847 pp_string (pp
, ", ");
2848 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2849 pp_string (pp
, ", ");
2850 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2855 pp_string (pp
, " VEC_COND_EXPR < ");
2856 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2857 pp_string (pp
, " , ");
2858 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2859 pp_string (pp
, " , ");
2860 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2861 pp_string (pp
, " > ");
2865 pp_string (pp
, " VEC_PERM_EXPR < ");
2866 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2867 pp_string (pp
, " , ");
2868 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2869 pp_string (pp
, " , ");
2870 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2871 pp_string (pp
, " > ");
2875 pp_string (pp
, " DOT_PROD_EXPR < ");
2876 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2877 pp_string (pp
, ", ");
2878 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2879 pp_string (pp
, ", ");
2880 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2881 pp_string (pp
, " > ");
2884 case WIDEN_MULT_PLUS_EXPR
:
2885 pp_string (pp
, " WIDEN_MULT_PLUS_EXPR < ");
2886 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2887 pp_string (pp
, ", ");
2888 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2889 pp_string (pp
, ", ");
2890 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2891 pp_string (pp
, " > ");
2894 case WIDEN_MULT_MINUS_EXPR
:
2895 pp_string (pp
, " WIDEN_MULT_MINUS_EXPR < ");
2896 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2897 pp_string (pp
, ", ");
2898 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2899 pp_string (pp
, ", ");
2900 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2901 pp_string (pp
, " > ");
2905 pp_string (pp
, " FMA_EXPR < ");
2906 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
2907 pp_string (pp
, ", ");
2908 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
2909 pp_string (pp
, ", ");
2910 dump_generic_node (pp
, TREE_OPERAND (node
, 2), spc
, flags
, false);
2911 pp_string (pp
, " > ");
2915 pp_string (pp
, "#pragma acc parallel");
2916 goto dump_omp_clauses_body
;
2919 pp_string (pp
, "#pragma acc kernels");
2920 goto dump_omp_clauses_body
;
2923 pp_string (pp
, "#pragma acc data");
2924 dump_omp_clauses (pp
, OACC_DATA_CLAUSES (node
), spc
, flags
);
2927 case OACC_HOST_DATA
:
2928 pp_string (pp
, "#pragma acc host_data");
2929 dump_omp_clauses (pp
, OACC_HOST_DATA_CLAUSES (node
), spc
, flags
);
2933 pp_string (pp
, "#pragma acc declare");
2934 dump_omp_clauses (pp
, OACC_DECLARE_CLAUSES (node
), spc
, flags
);
2938 pp_string (pp
, "#pragma acc update");
2939 dump_omp_clauses (pp
, OACC_UPDATE_CLAUSES (node
), spc
, flags
);
2942 case OACC_ENTER_DATA
:
2943 pp_string (pp
, "#pragma acc enter data");
2944 dump_omp_clauses (pp
, OACC_ENTER_DATA_CLAUSES (node
), spc
, flags
);
2947 case OACC_EXIT_DATA
:
2948 pp_string (pp
, "#pragma acc exit data");
2949 dump_omp_clauses (pp
, OACC_EXIT_DATA_CLAUSES (node
), spc
, flags
);
2953 pp_string (pp
, "#pragma acc cache");
2954 dump_omp_clauses (pp
, OACC_CACHE_CLAUSES (node
), spc
, flags
);
2958 pp_string (pp
, "#pragma omp parallel");
2959 dump_omp_clauses (pp
, OMP_PARALLEL_CLAUSES (node
), spc
, flags
);
2962 dump_omp_clauses_body
:
2963 dump_omp_clauses (pp
, OMP_CLAUSES (node
), spc
, flags
);
2967 if (!(flags
& TDF_SLIM
) && OMP_BODY (node
))
2969 newline_and_indent (pp
, spc
+ 2);
2971 newline_and_indent (pp
, spc
+ 4);
2972 dump_generic_node (pp
, OMP_BODY (node
), spc
+ 4, flags
, false);
2973 newline_and_indent (pp
, spc
+ 2);
2974 pp_right_brace (pp
);
2980 pp_string (pp
, "#pragma omp task");
2981 dump_omp_clauses (pp
, OMP_TASK_CLAUSES (node
), spc
, flags
);
2985 pp_string (pp
, "#pragma omp for");
2989 pp_string (pp
, "#pragma omp simd");
2992 case OMP_DISTRIBUTE
:
2993 pp_string (pp
, "#pragma omp distribute");
2997 pp_string (pp
, "#pragma omp taskloop");
3001 pp_string (pp
, "#pragma acc loop");
3005 pp_string (pp
, "#pragma omp teams");
3006 dump_omp_clauses (pp
, OMP_TEAMS_CLAUSES (node
), spc
, flags
);
3009 case OMP_TARGET_DATA
:
3010 pp_string (pp
, "#pragma omp target data");
3011 dump_omp_clauses (pp
, OMP_TARGET_DATA_CLAUSES (node
), spc
, flags
);
3014 case OMP_TARGET_ENTER_DATA
:
3015 pp_string (pp
, "#pragma omp target enter data");
3016 dump_omp_clauses (pp
, OMP_TARGET_ENTER_DATA_CLAUSES (node
), spc
, flags
);
3020 case OMP_TARGET_EXIT_DATA
:
3021 pp_string (pp
, "#pragma omp target exit data");
3022 dump_omp_clauses (pp
, OMP_TARGET_EXIT_DATA_CLAUSES (node
), spc
, flags
);
3027 pp_string (pp
, "#pragma omp target");
3028 dump_omp_clauses (pp
, OMP_TARGET_CLAUSES (node
), spc
, flags
);
3031 case OMP_TARGET_UPDATE
:
3032 pp_string (pp
, "#pragma omp target update");
3033 dump_omp_clauses (pp
, OMP_TARGET_UPDATE_CLAUSES (node
), spc
, flags
);
3038 dump_omp_clauses (pp
, OMP_FOR_CLAUSES (node
), spc
, flags
);
3039 if (!(flags
& TDF_SLIM
))
3043 if (OMP_FOR_PRE_BODY (node
))
3045 newline_and_indent (pp
, spc
+ 2);
3048 newline_and_indent (pp
, spc
);
3049 dump_generic_node (pp
, OMP_FOR_PRE_BODY (node
),
3052 if (OMP_FOR_INIT (node
))
3055 for (i
= 0; i
< TREE_VEC_LENGTH (OMP_FOR_INIT (node
)); i
++)
3058 newline_and_indent (pp
, spc
);
3059 pp_string (pp
, "for (");
3060 dump_generic_node (pp
,
3061 TREE_VEC_ELT (OMP_FOR_INIT (node
), i
),
3063 pp_string (pp
, "; ");
3064 dump_generic_node (pp
,
3065 TREE_VEC_ELT (OMP_FOR_COND (node
), i
),
3067 pp_string (pp
, "; ");
3068 dump_generic_node (pp
,
3069 TREE_VEC_ELT (OMP_FOR_INCR (node
), i
),
3071 pp_right_paren (pp
);
3074 if (OMP_FOR_BODY (node
))
3076 newline_and_indent (pp
, spc
+ 2);
3078 newline_and_indent (pp
, spc
+ 4);
3079 dump_generic_node (pp
, OMP_FOR_BODY (node
), spc
+ 4, flags
,
3081 newline_and_indent (pp
, spc
+ 2);
3082 pp_right_brace (pp
);
3084 if (OMP_FOR_INIT (node
))
3085 spc
-= 2 * TREE_VEC_LENGTH (OMP_FOR_INIT (node
)) - 2;
3086 if (OMP_FOR_PRE_BODY (node
))
3089 newline_and_indent (pp
, spc
+ 2);
3090 pp_right_brace (pp
);
3097 pp_string (pp
, "#pragma omp sections");
3098 dump_omp_clauses (pp
, OMP_SECTIONS_CLAUSES (node
), spc
, flags
);
3102 pp_string (pp
, "#pragma omp section");
3106 pp_string (pp
, "#pragma omp master");
3110 pp_string (pp
, "#pragma omp taskgroup");
3114 pp_string (pp
, "#pragma omp ordered");
3115 dump_omp_clauses (pp
, OMP_ORDERED_CLAUSES (node
), spc
, flags
);
3119 pp_string (pp
, "#pragma omp critical");
3120 if (OMP_CRITICAL_NAME (node
))
3124 dump_generic_node (pp
, OMP_CRITICAL_NAME (node
), spc
,
3126 pp_right_paren (pp
);
3128 dump_omp_clauses (pp
, OMP_CRITICAL_CLAUSES (node
), spc
, flags
);
3132 pp_string (pp
, "#pragma omp atomic");
3133 if (OMP_ATOMIC_SEQ_CST (node
))
3134 pp_string (pp
, " seq_cst");
3135 newline_and_indent (pp
, spc
+ 2);
3136 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3140 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
3143 case OMP_ATOMIC_READ
:
3144 pp_string (pp
, "#pragma omp atomic read");
3145 if (OMP_ATOMIC_SEQ_CST (node
))
3146 pp_string (pp
, " seq_cst");
3147 newline_and_indent (pp
, spc
+ 2);
3148 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3152 case OMP_ATOMIC_CAPTURE_OLD
:
3153 case OMP_ATOMIC_CAPTURE_NEW
:
3154 pp_string (pp
, "#pragma omp atomic capture");
3155 if (OMP_ATOMIC_SEQ_CST (node
))
3156 pp_string (pp
, " seq_cst");
3157 newline_and_indent (pp
, spc
+ 2);
3158 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3162 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
3166 pp_string (pp
, "#pragma omp single");
3167 dump_omp_clauses (pp
, OMP_SINGLE_CLAUSES (node
), spc
, flags
);
3171 dump_omp_clause (pp
, node
, spc
, flags
);
3175 case TRANSACTION_EXPR
:
3176 if (TRANSACTION_EXPR_OUTER (node
))
3177 pp_string (pp
, "__transaction_atomic [[outer]]");
3178 else if (TRANSACTION_EXPR_RELAXED (node
))
3179 pp_string (pp
, "__transaction_relaxed");
3181 pp_string (pp
, "__transaction_atomic");
3182 if (!(flags
& TDF_SLIM
) && TRANSACTION_EXPR_BODY (node
))
3184 newline_and_indent (pp
, spc
);
3186 newline_and_indent (pp
, spc
+ 2);
3187 dump_generic_node (pp
, TRANSACTION_EXPR_BODY (node
),
3188 spc
+ 2, flags
, false);
3189 newline_and_indent (pp
, spc
);
3190 pp_right_brace (pp
);
3195 case VEC_SERIES_EXPR
:
3196 case VEC_WIDEN_MULT_HI_EXPR
:
3197 case VEC_WIDEN_MULT_LO_EXPR
:
3198 case VEC_WIDEN_MULT_EVEN_EXPR
:
3199 case VEC_WIDEN_MULT_ODD_EXPR
:
3200 case VEC_WIDEN_LSHIFT_HI_EXPR
:
3201 case VEC_WIDEN_LSHIFT_LO_EXPR
:
3203 for (str
= get_tree_code_name (code
); *str
; str
++)
3204 pp_character (pp
, TOUPPER (*str
));
3205 pp_string (pp
, " < ");
3206 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3207 pp_string (pp
, ", ");
3208 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
3209 pp_string (pp
, " > ");
3212 case VEC_DUPLICATE_EXPR
:
3214 for (str
= get_tree_code_name (code
); *str
; str
++)
3215 pp_character (pp
, TOUPPER (*str
));
3216 pp_string (pp
, " < ");
3217 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3218 pp_string (pp
, " > ");
3221 case VEC_UNPACK_HI_EXPR
:
3222 pp_string (pp
, " VEC_UNPACK_HI_EXPR < ");
3223 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3224 pp_string (pp
, " > ");
3227 case VEC_UNPACK_LO_EXPR
:
3228 pp_string (pp
, " VEC_UNPACK_LO_EXPR < ");
3229 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3230 pp_string (pp
, " > ");
3233 case VEC_UNPACK_FLOAT_HI_EXPR
:
3234 pp_string (pp
, " VEC_UNPACK_FLOAT_HI_EXPR < ");
3235 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3236 pp_string (pp
, " > ");
3239 case VEC_UNPACK_FLOAT_LO_EXPR
:
3240 pp_string (pp
, " VEC_UNPACK_FLOAT_LO_EXPR < ");
3241 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3242 pp_string (pp
, " > ");
3245 case VEC_PACK_TRUNC_EXPR
:
3246 pp_string (pp
, " VEC_PACK_TRUNC_EXPR < ");
3247 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3248 pp_string (pp
, ", ");
3249 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
3250 pp_string (pp
, " > ");
3253 case VEC_PACK_SAT_EXPR
:
3254 pp_string (pp
, " VEC_PACK_SAT_EXPR < ");
3255 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3256 pp_string (pp
, ", ");
3257 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
3258 pp_string (pp
, " > ");
3261 case VEC_PACK_FIX_TRUNC_EXPR
:
3262 pp_string (pp
, " VEC_PACK_FIX_TRUNC_EXPR < ");
3263 dump_generic_node (pp
, TREE_OPERAND (node
, 0), spc
, flags
, false);
3264 pp_string (pp
, ", ");
3265 dump_generic_node (pp
, TREE_OPERAND (node
, 1), spc
, flags
, false);
3266 pp_string (pp
, " > ");
3270 dump_block_node (pp
, node
, spc
, flags
);
3273 case DEBUG_BEGIN_STMT
:
3274 pp_string (pp
, "# DEBUG BEGIN STMT");
3281 if (is_stmt
&& is_expr
)
3287 /* Print the declaration of a variable. */
3290 print_declaration (pretty_printer
*pp
, tree t
, int spc
, dump_flags_t flags
)
3294 if (TREE_CODE(t
) == NAMELIST_DECL
)
3296 pp_string(pp
, "namelist ");
3297 dump_decl_name (pp
, t
, flags
);
3302 if (TREE_CODE (t
) == TYPE_DECL
)
3303 pp_string (pp
, "typedef ");
3305 if (CODE_CONTAINS_STRUCT (TREE_CODE (t
), TS_DECL_WRTL
) && DECL_REGISTER (t
))
3306 pp_string (pp
, "register ");
3308 if (TREE_PUBLIC (t
) && DECL_EXTERNAL (t
))
3309 pp_string (pp
, "extern ");
3310 else if (TREE_STATIC (t
))
3311 pp_string (pp
, "static ");
3313 /* Print the type and name. */
3314 if (TREE_TYPE (t
) && TREE_CODE (TREE_TYPE (t
)) == ARRAY_TYPE
)
3318 /* Print array's type. */
3319 tmp
= TREE_TYPE (t
);
3320 while (TREE_CODE (TREE_TYPE (tmp
)) == ARRAY_TYPE
)
3321 tmp
= TREE_TYPE (tmp
);
3322 dump_generic_node (pp
, TREE_TYPE (tmp
), spc
, flags
, false);
3324 /* Print variable's name. */
3326 dump_generic_node (pp
, t
, spc
, flags
, false);
3328 /* Print the dimensions. */
3329 tmp
= TREE_TYPE (t
);
3330 while (TREE_CODE (tmp
) == ARRAY_TYPE
)
3332 dump_array_domain (pp
, TYPE_DOMAIN (tmp
), spc
, flags
);
3333 tmp
= TREE_TYPE (tmp
);
3336 else if (TREE_CODE (t
) == FUNCTION_DECL
)
3338 dump_generic_node (pp
, TREE_TYPE (TREE_TYPE (t
)), spc
, flags
, false);
3340 dump_decl_name (pp
, t
, flags
);
3341 dump_function_declaration (pp
, TREE_TYPE (t
), spc
, flags
);
3345 /* Print type declaration. */
3346 dump_generic_node (pp
, TREE_TYPE (t
), spc
, flags
, false);
3348 /* Print variable's name. */
3350 dump_generic_node (pp
, t
, spc
, flags
, false);
3353 if (VAR_P (t
) && DECL_HARD_REGISTER (t
))
3355 pp_string (pp
, " __asm__ ");
3357 dump_generic_node (pp
, DECL_ASSEMBLER_NAME (t
), spc
, flags
, false);
3358 pp_right_paren (pp
);
3361 /* The initial value of a function serves to determine whether the function
3362 is declared or defined. So the following does not apply to function
3364 if (TREE_CODE (t
) != FUNCTION_DECL
)
3366 /* Print the initial value. */
3367 if (DECL_INITIAL (t
))
3372 if (!(flags
& TDF_SLIM
))
3373 dump_generic_node (pp
, DECL_INITIAL (t
), spc
, flags
, false);
3375 pp_string (pp
, "<<< omitted >>>");
3379 if (VAR_P (t
) && DECL_HAS_VALUE_EXPR_P (t
))
3381 pp_string (pp
, " [value-expr: ");
3382 dump_generic_node (pp
, DECL_VALUE_EXPR (t
), spc
, flags
, false);
3383 pp_right_bracket (pp
);
3390 /* Prints a structure: name, fields, and methods.
3391 FIXME: Still incomplete. */
3394 print_struct_decl (pretty_printer
*pp
, const_tree node
, int spc
,
3397 /* Print the name of the structure. */
3398 if (TYPE_NAME (node
))
3401 if (TREE_CODE (node
) == RECORD_TYPE
)
3402 pp_string (pp
, "struct ");
3403 else if ((TREE_CODE (node
) == UNION_TYPE
3404 || TREE_CODE (node
) == QUAL_UNION_TYPE
))
3405 pp_string (pp
, "union ");
3407 dump_generic_node (pp
, TYPE_NAME (node
), spc
, 0, false);
3410 /* Print the contents of the structure. */
3416 /* Print the fields of the structure. */
3419 tmp
= TYPE_FIELDS (node
);
3422 /* Avoid to print recursively the structure. */
3423 /* FIXME : Not implemented correctly...,
3424 what about the case when we have a cycle in the contain graph? ...
3425 Maybe this could be solved by looking at the scope in which the
3426 structure was declared. */
3427 if (TREE_TYPE (tmp
) != node
3428 && (TREE_CODE (TREE_TYPE (tmp
)) != POINTER_TYPE
3429 || TREE_TYPE (TREE_TYPE (tmp
)) != node
))
3431 print_declaration (pp
, tmp
, spc
+2, flags
);
3434 tmp
= DECL_CHAIN (tmp
);
3438 pp_right_brace (pp
);
3441 /* Return the priority of the operator CODE.
3443 From lowest to highest precedence with either left-to-right (L-R)
3444 or right-to-left (R-L) associativity]:
3447 2 [R-L] = += -= *= /= %= &= ^= |= <<= >>=
3459 14 [R-L] ! ~ ++ -- + - * & (type) sizeof
3460 15 [L-R] fn() [] -> .
3462 unary +, - and * have higher precedence than the corresponding binary
3466 op_code_prio (enum tree_code code
)
3483 case TRUTH_ORIF_EXPR
:
3486 case TRUTH_AND_EXPR
:
3487 case TRUTH_ANDIF_EXPR
:
3494 case TRUTH_XOR_EXPR
:
3511 case UNORDERED_EXPR
:
3522 case VEC_WIDEN_LSHIFT_HI_EXPR
:
3523 case VEC_WIDEN_LSHIFT_LO_EXPR
:
3524 case WIDEN_LSHIFT_EXPR
:
3527 case WIDEN_SUM_EXPR
:
3529 case POINTER_PLUS_EXPR
:
3530 case POINTER_DIFF_EXPR
:
3534 case VEC_WIDEN_MULT_HI_EXPR
:
3535 case VEC_WIDEN_MULT_LO_EXPR
:
3536 case WIDEN_MULT_EXPR
:
3538 case WIDEN_MULT_PLUS_EXPR
:
3539 case WIDEN_MULT_MINUS_EXPR
:
3541 case MULT_HIGHPART_EXPR
:
3542 case TRUNC_DIV_EXPR
:
3544 case FLOOR_DIV_EXPR
:
3545 case ROUND_DIV_EXPR
:
3547 case EXACT_DIV_EXPR
:
3548 case TRUNC_MOD_EXPR
:
3550 case FLOOR_MOD_EXPR
:
3551 case ROUND_MOD_EXPR
:
3555 case TRUTH_NOT_EXPR
:
3557 case POSTINCREMENT_EXPR
:
3558 case POSTDECREMENT_EXPR
:
3559 case PREINCREMENT_EXPR
:
3560 case PREDECREMENT_EXPR
:
3566 case FIX_TRUNC_EXPR
:
3572 case ARRAY_RANGE_REF
:
3576 /* Special expressions. */
3582 case VEC_UNPACK_HI_EXPR
:
3583 case VEC_UNPACK_LO_EXPR
:
3584 case VEC_UNPACK_FLOAT_HI_EXPR
:
3585 case VEC_UNPACK_FLOAT_LO_EXPR
:
3586 case VEC_PACK_TRUNC_EXPR
:
3587 case VEC_PACK_SAT_EXPR
:
3591 /* Return an arbitrarily high precedence to avoid surrounding single
3592 VAR_DECLs in ()s. */
3597 /* Return the priority of the operator OP. */
3600 op_prio (const_tree op
)
3602 enum tree_code code
;
3607 code
= TREE_CODE (op
);
3608 if (code
== SAVE_EXPR
|| code
== NON_LVALUE_EXPR
)
3609 return op_prio (TREE_OPERAND (op
, 0));
3611 return op_code_prio (code
);
3614 /* Return the symbol associated with operator CODE. */
3617 op_symbol_code (enum tree_code code
)
3625 case TRUTH_ORIF_EXPR
:
3628 case TRUTH_AND_EXPR
:
3629 case TRUTH_ANDIF_EXPR
:
3635 case TRUTH_XOR_EXPR
:
3645 case UNORDERED_EXPR
:
3691 case WIDEN_LSHIFT_EXPR
:
3694 case POINTER_PLUS_EXPR
:
3700 case WIDEN_SUM_EXPR
:
3703 case WIDEN_MULT_EXPR
:
3706 case MULT_HIGHPART_EXPR
:
3711 case POINTER_DIFF_EXPR
:
3717 case TRUTH_NOT_EXPR
:
3724 case TRUNC_DIV_EXPR
:
3731 case FLOOR_DIV_EXPR
:
3734 case ROUND_DIV_EXPR
:
3737 case EXACT_DIV_EXPR
:
3740 case TRUNC_MOD_EXPR
:
3746 case FLOOR_MOD_EXPR
:
3749 case ROUND_MOD_EXPR
:
3752 case PREDECREMENT_EXPR
:
3755 case PREINCREMENT_EXPR
:
3758 case POSTDECREMENT_EXPR
:
3761 case POSTINCREMENT_EXPR
:
3771 return "<<< ??? >>>";
3775 /* Return the symbol associated with operator OP. */
3778 op_symbol (const_tree op
)
3780 return op_symbol_code (TREE_CODE (op
));
3783 /* Prints the name of a call. NODE is the CALL_EXPR_FN of a CALL_EXPR or
3784 the gimple_call_fn of a GIMPLE_CALL. */
3787 print_call_name (pretty_printer
*pp
, tree node
, dump_flags_t flags
)
3791 if (TREE_CODE (op0
) == NON_LVALUE_EXPR
)
3792 op0
= TREE_OPERAND (op0
, 0);
3795 switch (TREE_CODE (op0
))
3800 dump_function_name (pp
, op0
, flags
);
3806 op0
= TREE_OPERAND (op0
, 0);
3811 dump_generic_node (pp
, TREE_OPERAND (op0
, 0), 0, flags
, false);
3812 pp_string (pp
, ") ? ");
3813 dump_generic_node (pp
, TREE_OPERAND (op0
, 1), 0, flags
, false);
3814 pp_string (pp
, " : ");
3815 dump_generic_node (pp
, TREE_OPERAND (op0
, 2), 0, flags
, false);
3819 if (TREE_CODE (TREE_OPERAND (op0
, 0)) == VAR_DECL
)
3820 dump_function_name (pp
, TREE_OPERAND (op0
, 0), flags
);
3822 dump_generic_node (pp
, op0
, 0, flags
, false);
3826 if (integer_zerop (TREE_OPERAND (op0
, 1)))
3828 op0
= TREE_OPERAND (op0
, 0);
3835 dump_generic_node (pp
, op0
, 0, flags
, false);
3843 /* Parses the string STR and replaces new-lines by '\n', tabs by '\t', ... */
3846 pretty_print_string (pretty_printer
*pp
, const char *str
)
3856 pp_string (pp
, "\\b");
3860 pp_string (pp
, "\\f");
3864 pp_string (pp
, "\\n");
3868 pp_string (pp
, "\\r");
3872 pp_string (pp
, "\\t");
3876 pp_string (pp
, "\\v");
3880 pp_string (pp
, "\\\\");
3884 pp_string (pp
, "\\\"");
3888 pp_string (pp
, "\\'");
3891 /* No need to handle \0; the loop terminates on \0. */
3894 pp_string (pp
, "\\1");
3898 pp_string (pp
, "\\2");
3902 pp_string (pp
, "\\3");
3906 pp_string (pp
, "\\4");
3910 pp_string (pp
, "\\5");
3914 pp_string (pp
, "\\6");
3918 pp_string (pp
, "\\7");
3922 if (!ISPRINT (str
[0]))
3925 sprintf (buf
, "\\x%x", (unsigned char)str
[0]);
3926 pp_string (pp
, buf
);
3929 pp_character (pp
, str
[0]);
3937 maybe_init_pretty_print (FILE *file
)
3941 tree_pp
= new pretty_printer ();
3942 pp_needs_newline (tree_pp
) = true;
3943 pp_translate_identifiers (tree_pp
) = false;
3946 tree_pp
->buffer
->stream
= file
;
3950 newline_and_indent (pretty_printer
*pp
, int spc
)
3956 /* Handle the %K format for TEXT. Separate from default_tree_printer
3957 so it can also be used in front ends.
3958 Argument is a statement from which EXPR_LOCATION and TREE_BLOCK will
3962 percent_K_format (text_info
*text
, tree t
)
3964 text
->set_location (0, EXPR_LOCATION (t
), true);
3965 gcc_assert (pp_ti_abstract_origin (text
) != NULL
);
3966 tree block
= TREE_BLOCK (t
);
3967 *pp_ti_abstract_origin (text
) = NULL
;
3971 /* ??? LTO drops all BLOCK_ABSTRACT_ORIGINs apart from those
3972 representing the outermost block of an inlined function.
3973 So walk the BLOCK tree until we hit such a scope. */
3975 && TREE_CODE (block
) == BLOCK
)
3977 if (inlined_function_outer_scope_p (block
))
3979 *pp_ti_abstract_origin (text
) = block
;
3982 block
= BLOCK_SUPERCONTEXT (block
);
3988 && TREE_CODE (block
) == BLOCK
3989 && BLOCK_ABSTRACT_ORIGIN (block
))
3991 tree ao
= BLOCK_ABSTRACT_ORIGIN (block
);
3993 while (TREE_CODE (ao
) == BLOCK
3994 && BLOCK_ABSTRACT_ORIGIN (ao
)
3995 && BLOCK_ABSTRACT_ORIGIN (ao
) != ao
)
3996 ao
= BLOCK_ABSTRACT_ORIGIN (ao
);
3998 if (TREE_CODE (ao
) == FUNCTION_DECL
)
4000 *pp_ti_abstract_origin (text
) = block
;
4003 block
= BLOCK_SUPERCONTEXT (block
);
4007 /* Print the identifier ID to PRETTY-PRINTER. */
4010 pp_tree_identifier (pretty_printer
*pp
, tree id
)
4012 if (pp_translate_identifiers (pp
))
4014 const char *text
= identifier_to_locale (IDENTIFIER_POINTER (id
));
4015 pp_append_text (pp
, text
, text
+ strlen (text
));
4018 pp_append_text (pp
, IDENTIFIER_POINTER (id
),
4019 IDENTIFIER_POINTER (id
) + IDENTIFIER_LENGTH (id
));
4022 /* A helper function that is used to dump function information before the
4026 dump_function_header (FILE *dump_file
, tree fdecl
, dump_flags_t flags
)
4028 const char *dname
, *aname
;
4029 struct cgraph_node
*node
= cgraph_node::get (fdecl
);
4030 struct function
*fun
= DECL_STRUCT_FUNCTION (fdecl
);
4032 dname
= lang_hooks
.decl_printable_name (fdecl
, 1);
4034 if (DECL_ASSEMBLER_NAME_SET_P (fdecl
))
4035 aname
= (IDENTIFIER_POINTER
4036 (DECL_ASSEMBLER_NAME (fdecl
)));
4038 aname
= "<unset-asm-name>";
4040 fprintf (dump_file
, "\n;; Function %s (%s, funcdef_no=%d",
4041 dname
, aname
, fun
->funcdef_no
);
4042 if (!(flags
& TDF_NOUID
))
4043 fprintf (dump_file
, ", decl_uid=%d", DECL_UID (fdecl
));
4046 fprintf (dump_file
, ", cgraph_uid=%d", node
->uid
);
4047 fprintf (dump_file
, ", symbol_order=%d)%s\n\n", node
->order
,
4048 node
->frequency
== NODE_FREQUENCY_HOT
4050 : node
->frequency
== NODE_FREQUENCY_UNLIKELY_EXECUTED
4051 ? " (unlikely executed)"
4052 : node
->frequency
== NODE_FREQUENCY_EXECUTED_ONCE
4053 ? " (executed once)"
4057 fprintf (dump_file
, ")\n\n");
4060 /* Dump double_int D to pretty_printer PP. UNS is true
4061 if D is unsigned and false otherwise. */
4063 pp_double_int (pretty_printer
*pp
, double_int d
, bool uns
)
4066 pp_wide_integer (pp
, d
.low
);
4067 else if (d
.fits_uhwi ())
4068 pp_unsigned_wide_integer (pp
, d
.low
);
4071 unsigned HOST_WIDE_INT low
= d
.low
;
4072 HOST_WIDE_INT high
= d
.high
;
4073 if (!uns
&& d
.is_negative ())
4076 high
= ~high
+ !low
;
4079 /* Would "%x%0*x" or "%x%*0x" get zero-padding on all
4081 sprintf (pp_buffer (pp
)->digit_buffer
,
4082 HOST_WIDE_INT_PRINT_DOUBLE_HEX
,
4083 (unsigned HOST_WIDE_INT
) high
, low
);
4084 pp_string (pp
, pp_buffer (pp
)->digit_buffer
);