Mercurial > hg > CbC > CbC_gcc
comparison gcc/tree-pretty-print.c @ 132:d34655255c78
update gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 10:21:07 +0900 |
parents | 84e7813d76e9 |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
130:e108057fa461 | 132:d34655255c78 |
---|---|
1 /* Pretty formatting of GENERIC trees in C syntax. | 1 /* Pretty formatting of GENERIC trees in C syntax. |
2 Copyright (C) 2001-2017 Free Software Foundation, Inc. | 2 Copyright (C) 2001-2018 Free Software Foundation, Inc. |
3 Adapted from c-pretty-print.c by Diego Novillo <dnovillo@redhat.com> | 3 Adapted from c-pretty-print.c by Diego Novillo <dnovillo@redhat.com> |
4 | 4 |
5 This file is part of GCC. | 5 This file is part of GCC. |
6 | 6 |
7 GCC is free software; you can redistribute it and/or modify it under | 7 GCC is free software; you can redistribute it and/or modify it under |
35 #include "gomp-constants.h" | 35 #include "gomp-constants.h" |
36 #include "gimple.h" | 36 #include "gimple.h" |
37 | 37 |
38 /* Local functions, macros and variables. */ | 38 /* Local functions, macros and variables. */ |
39 static const char *op_symbol (const_tree); | 39 static const char *op_symbol (const_tree); |
40 static void pretty_print_string (pretty_printer *, const char*); | 40 static void pretty_print_string (pretty_printer *, const char*, unsigned); |
41 static void newline_and_indent (pretty_printer *, int); | 41 static void newline_and_indent (pretty_printer *, int); |
42 static void maybe_init_pretty_print (FILE *); | 42 static void maybe_init_pretty_print (FILE *); |
43 static void print_struct_decl (pretty_printer *, const_tree, int, dump_flags_t); | 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); | 44 static void do_niy (pretty_printer *, const_tree, dump_flags_t); |
45 | 45 |
158 print_generic_expr (FILE *file, tree t, dump_flags_t flags) | 158 print_generic_expr (FILE *file, tree t, dump_flags_t flags) |
159 { | 159 { |
160 maybe_init_pretty_print (file); | 160 maybe_init_pretty_print (file); |
161 dump_generic_node (tree_pp, t, 0, flags, false); | 161 dump_generic_node (tree_pp, t, 0, flags, false); |
162 pp_flush (tree_pp); | 162 pp_flush (tree_pp); |
163 } | |
164 | |
165 /* Print a single expression T to string, and return it. */ | |
166 | |
167 char * | |
168 print_generic_expr_to_str (tree t) | |
169 { | |
170 pretty_printer pp; | |
171 dump_generic_node (&pp, t, 0, TDF_VOPS|TDF_MEMSYMS, false); | |
172 return xstrdup (pp_formatted_text (&pp)); | |
163 } | 173 } |
164 | 174 |
165 /* Dump NAME, an IDENTIFIER_POINTER, sanitized so that D<num> sequences | 175 /* 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 | 176 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 | 177 preceded by $ and at the end or followed by $. See make_fancy_name |
245 in FLAGS. */ | 255 in FLAGS. */ |
246 | 256 |
247 static void | 257 static void |
248 dump_decl_name (pretty_printer *pp, tree node, dump_flags_t flags) | 258 dump_decl_name (pretty_printer *pp, tree node, dump_flags_t flags) |
249 { | 259 { |
250 if (DECL_NAME (node)) | 260 tree name = DECL_NAME (node); |
261 if (name) | |
251 { | 262 { |
252 if ((flags & TDF_ASMNAME) | 263 if ((flags & TDF_ASMNAME) |
253 && HAS_DECL_ASSEMBLER_NAME_P (node) | 264 && HAS_DECL_ASSEMBLER_NAME_P (node) |
254 && DECL_ASSEMBLER_NAME_SET_P (node)) | 265 && DECL_ASSEMBLER_NAME_SET_P (node)) |
255 pp_tree_identifier (pp, DECL_ASSEMBLER_NAME_RAW (node)); | 266 pp_tree_identifier (pp, DECL_ASSEMBLER_NAME_RAW (node)); |
267 /* For -fcompare-debug don't dump DECL_NAMELESS names at all, | |
268 -g might have created more fancy names and their indexes | |
269 could get out of sync. Usually those should be DECL_IGNORED_P | |
270 too, SRA can create even non-DECL_IGNORED_P DECL_NAMELESS fancy | |
271 names, let's hope those never get out of sync after doing the | |
272 dump_fancy_name sanitization. */ | |
273 else if ((flags & TDF_COMPARE_DEBUG) | |
274 && DECL_NAMELESS (node) | |
275 && DECL_IGNORED_P (node)) | |
276 name = NULL_TREE; | |
256 /* For DECL_NAMELESS names look for embedded uids in the | 277 /* For DECL_NAMELESS names look for embedded uids in the |
257 names and sanitize them for TDF_NOUID. */ | 278 names and sanitize them for TDF_NOUID. */ |
258 else if ((flags & TDF_NOUID) && DECL_NAMELESS (node)) | 279 else if ((flags & TDF_NOUID) && DECL_NAMELESS (node)) |
259 dump_fancy_name (pp, DECL_NAME (node)); | 280 dump_fancy_name (pp, name); |
260 else | 281 else |
261 pp_tree_identifier (pp, DECL_NAME (node)); | 282 pp_tree_identifier (pp, name); |
262 } | 283 } |
263 char uid_sep = (flags & TDF_GIMPLE) ? '_' : '.'; | 284 char uid_sep = (flags & TDF_GIMPLE) ? '_' : '.'; |
264 if ((flags & TDF_UID) || DECL_NAME (node) == NULL_TREE) | 285 if ((flags & TDF_UID) || name == NULL_TREE) |
265 { | 286 { |
266 if (TREE_CODE (node) == LABEL_DECL && LABEL_DECL_UID (node) != -1) | 287 if (TREE_CODE (node) == LABEL_DECL && LABEL_DECL_UID (node) != -1) |
267 pp_printf (pp, "L%c%d", uid_sep, (int) LABEL_DECL_UID (node)); | 288 pp_printf (pp, "L%c%d", uid_sep, (int) LABEL_DECL_UID (node)); |
268 else if (TREE_CODE (node) == DEBUG_EXPR_DECL) | 289 else if (TREE_CODE (node) == DEBUG_EXPR_DECL) |
269 { | 290 { |
464 dump_generic_node (pp, OMP_CLAUSE_NUM_THREADS_EXPR (clause), | 485 dump_generic_node (pp, OMP_CLAUSE_NUM_THREADS_EXPR (clause), |
465 spc, flags, false); | 486 spc, flags, false); |
466 pp_right_paren (pp); | 487 pp_right_paren (pp); |
467 break; | 488 break; |
468 | 489 |
469 case OMP_CLAUSE__CILK_FOR_COUNT_: | |
470 pp_string (pp, "_Cilk_for_count_("); | |
471 dump_generic_node (pp, OMP_CLAUSE_OPERAND (clause, 0), | |
472 spc, flags, false); | |
473 pp_right_paren (pp); | |
474 break; | |
475 | |
476 case OMP_CLAUSE_NOWAIT: | 490 case OMP_CLAUSE_NOWAIT: |
477 pp_string (pp, "nowait"); | 491 pp_string (pp, "nowait"); |
478 break; | 492 break; |
479 case OMP_CLAUSE_ORDERED: | 493 case OMP_CLAUSE_ORDERED: |
480 pp_string (pp, "ordered"); | 494 pp_string (pp, "ordered"); |
547 case OMP_CLAUSE_SCHEDULE_RUNTIME: | 561 case OMP_CLAUSE_SCHEDULE_RUNTIME: |
548 pp_string (pp, "runtime"); | 562 pp_string (pp, "runtime"); |
549 break; | 563 break; |
550 case OMP_CLAUSE_SCHEDULE_AUTO: | 564 case OMP_CLAUSE_SCHEDULE_AUTO: |
551 pp_string (pp, "auto"); | 565 pp_string (pp, "auto"); |
552 break; | |
553 case OMP_CLAUSE_SCHEDULE_CILKFOR: | |
554 pp_string (pp, "cilk-for grain"); | |
555 break; | 566 break; |
556 default: | 567 default: |
557 gcc_unreachable (); | 568 gcc_unreachable (); |
558 } | 569 } |
559 if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause)) | 570 if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause)) |
1042 pp_comma (pp); | 1053 pp_comma (pp); |
1043 dump_generic_node (pp, OMP_CLAUSE__GRIDDIM__GROUP (clause), spc, flags, | 1054 dump_generic_node (pp, OMP_CLAUSE__GRIDDIM__GROUP (clause), spc, flags, |
1044 false); | 1055 false); |
1045 pp_right_paren (pp); | 1056 pp_right_paren (pp); |
1046 break; | 1057 break; |
1058 case OMP_CLAUSE_IF_PRESENT: | |
1059 pp_string (pp, "if_present"); | |
1060 break; | |
1061 case OMP_CLAUSE_FINALIZE: | |
1062 pp_string (pp, "finalize"); | |
1063 break; | |
1047 | 1064 |
1048 default: | 1065 default: |
1049 /* Should never happen. */ | 1066 /* Should never happen. */ |
1050 dump_generic_node (pp, clause, spc, flags, false); | 1067 dump_generic_node (pp, clause, spc, flags, false); |
1051 break; | 1068 break; |
1104 | 1121 |
1105 pp_printf (pp, "BLOCK #%d ", BLOCK_NUMBER (block)); | 1122 pp_printf (pp, "BLOCK #%d ", BLOCK_NUMBER (block)); |
1106 | 1123 |
1107 if (flags & TDF_ADDRESS) | 1124 if (flags & TDF_ADDRESS) |
1108 pp_printf (pp, "[%p] ", (void *) block); | 1125 pp_printf (pp, "[%p] ", (void *) block); |
1109 | |
1110 if (BLOCK_ABSTRACT (block)) | |
1111 pp_string (pp, "[abstract] "); | |
1112 | 1126 |
1113 if (TREE_ASM_WRITTEN (block)) | 1127 if (TREE_ASM_WRITTEN (block)) |
1114 pp_string (pp, "[written] "); | 1128 pp_string (pp, "[written] "); |
1115 | 1129 |
1116 if (flags & TDF_SLIM) | 1130 if (flags & TDF_SLIM) |
1282 } | 1296 } |
1283 } | 1297 } |
1284 break; | 1298 break; |
1285 | 1299 |
1286 case VOID_TYPE: | 1300 case VOID_TYPE: |
1287 case POINTER_BOUNDS_TYPE: | |
1288 case INTEGER_TYPE: | 1301 case INTEGER_TYPE: |
1289 case REAL_TYPE: | 1302 case REAL_TYPE: |
1290 case FIXED_POINT_TYPE: | 1303 case FIXED_POINT_TYPE: |
1291 case COMPLEX_TYPE: | 1304 case COMPLEX_TYPE: |
1292 case VECTOR_TYPE: | 1305 case VECTOR_TYPE: |
1420 | 1433 |
1421 dump_generic_node (pp, TREE_TYPE (fnode), spc, flags, false); | 1434 dump_generic_node (pp, TREE_TYPE (fnode), spc, flags, false); |
1422 pp_space (pp); | 1435 pp_space (pp); |
1423 pp_left_paren (pp); | 1436 pp_left_paren (pp); |
1424 pp_string (pp, str); | 1437 pp_string (pp, str); |
1425 if (TYPE_NAME (node) && DECL_NAME (TYPE_NAME (node))) | 1438 if (TYPE_IDENTIFIER (node)) |
1426 dump_decl_name (pp, TYPE_NAME (node), flags); | 1439 dump_generic_node (pp, TYPE_NAME (node), spc, flags, false); |
1427 else if (flags & TDF_NOUID) | 1440 else if (flags & TDF_NOUID) |
1428 pp_printf (pp, "<Txxxx>"); | 1441 pp_printf (pp, "<Txxxx>"); |
1429 else | 1442 else |
1430 pp_printf (pp, "<T%x>", TYPE_UID (node)); | 1443 pp_printf (pp, "<T%x>", TYPE_UID (node)); |
1431 | 1444 |
1742 } | 1755 } |
1743 if (TREE_OVERFLOW (node)) | 1756 if (TREE_OVERFLOW (node)) |
1744 pp_string (pp, "(OVF)"); | 1757 pp_string (pp, "(OVF)"); |
1745 break; | 1758 break; |
1746 | 1759 |
1760 case POLY_INT_CST: | |
1761 pp_string (pp, "POLY_INT_CST ["); | |
1762 dump_generic_node (pp, POLY_INT_CST_COEFF (node, 0), spc, flags, false); | |
1763 for (unsigned int i = 1; i < NUM_POLY_INT_COEFFS; ++i) | |
1764 { | |
1765 pp_string (pp, ", "); | |
1766 dump_generic_node (pp, POLY_INT_CST_COEFF (node, i), | |
1767 spc, flags, false); | |
1768 } | |
1769 pp_string (pp, "]"); | |
1770 break; | |
1771 | |
1747 case REAL_CST: | 1772 case REAL_CST: |
1748 /* Code copied from print_node. */ | 1773 /* Code copied from print_node. */ |
1749 { | 1774 { |
1750 REAL_VALUE_TYPE d; | 1775 REAL_VALUE_TYPE d; |
1751 if (TREE_OVERFLOW (node)) | 1776 if (TREE_OVERFLOW (node)) |
1780 dump_generic_node (pp, TREE_IMAGPART (node), spc, flags, false); | 1805 dump_generic_node (pp, TREE_IMAGPART (node), spc, flags, false); |
1781 pp_right_paren (pp); | 1806 pp_right_paren (pp); |
1782 break; | 1807 break; |
1783 | 1808 |
1784 case STRING_CST: | 1809 case STRING_CST: |
1785 pp_string (pp, "\""); | 1810 { |
1786 pretty_print_string (pp, TREE_STRING_POINTER (node)); | 1811 pp_string (pp, "\""); |
1787 pp_string (pp, "\""); | 1812 if (unsigned nbytes = TREE_STRING_LENGTH (node)) |
1788 break; | 1813 pretty_print_string (pp, TREE_STRING_POINTER (node), nbytes); |
1814 pp_string (pp, "\""); | |
1815 break; | |
1816 } | |
1789 | 1817 |
1790 case VECTOR_CST: | 1818 case VECTOR_CST: |
1791 { | 1819 { |
1792 unsigned i; | 1820 unsigned i; |
1793 pp_string (pp, "{ "); | 1821 pp_string (pp, "{ "); |
1794 for (i = 0; i < VECTOR_CST_NELTS (node); ++i) | 1822 unsigned HOST_WIDE_INT nunits; |
1823 if (!VECTOR_CST_NELTS (node).is_constant (&nunits)) | |
1824 nunits = vector_cst_encoded_nelts (node); | |
1825 for (i = 0; i < nunits; ++i) | |
1795 { | 1826 { |
1796 if (i != 0) | 1827 if (i != 0) |
1797 pp_string (pp, ", "); | 1828 pp_string (pp, ", "); |
1798 dump_generic_node (pp, VECTOR_CST_ELT (node, i), | 1829 dump_generic_node (pp, VECTOR_CST_ELT (node, i), |
1799 spc, flags, false); | 1830 spc, flags, false); |
1800 } | 1831 } |
1832 if (!VECTOR_CST_NELTS (node).is_constant ()) | |
1833 pp_string (pp, ", ..."); | |
1801 pp_string (pp, " }"); | 1834 pp_string (pp, " }"); |
1802 } | 1835 } |
1803 break; | 1836 break; |
1804 | 1837 |
1805 case FUNCTION_TYPE: | 1838 case FUNCTION_TYPE: |
1807 dump_generic_node (pp, TREE_TYPE (node), spc, flags, false); | 1840 dump_generic_node (pp, TREE_TYPE (node), spc, flags, false); |
1808 pp_space (pp); | 1841 pp_space (pp); |
1809 if (TREE_CODE (node) == METHOD_TYPE) | 1842 if (TREE_CODE (node) == METHOD_TYPE) |
1810 { | 1843 { |
1811 if (TYPE_METHOD_BASETYPE (node)) | 1844 if (TYPE_METHOD_BASETYPE (node)) |
1812 dump_decl_name (pp, TYPE_NAME (TYPE_METHOD_BASETYPE (node)), | 1845 dump_generic_node (pp, TYPE_NAME (TYPE_METHOD_BASETYPE (node)), |
1813 flags); | 1846 spc, flags, false); |
1814 else | 1847 else |
1815 pp_string (pp, "<null method basetype>"); | 1848 pp_string (pp, "<null method basetype>"); |
1816 pp_colon_colon (pp); | 1849 pp_colon_colon (pp); |
1817 } | 1850 } |
1818 if (TYPE_NAME (node) && DECL_NAME (TYPE_NAME (node))) | 1851 if (TYPE_IDENTIFIER (node)) |
1852 dump_generic_node (pp, TYPE_NAME (node), spc, flags, false); | |
1853 else if (TYPE_NAME (node) && DECL_NAME (TYPE_NAME (node))) | |
1819 dump_decl_name (pp, TYPE_NAME (node), flags); | 1854 dump_decl_name (pp, TYPE_NAME (node), flags); |
1820 else if (flags & TDF_NOUID) | 1855 else if (flags & TDF_NOUID) |
1821 pp_printf (pp, "<Txxxx>"); | 1856 pp_printf (pp, "<Txxxx>"); |
1822 else | 1857 else |
1823 pp_printf (pp, "<T%x>", TYPE_UID (node)); | 1858 pp_printf (pp, "<T%x>", TYPE_UID (node)); |
2240 | 2275 |
2241 case CALL_EXPR: | 2276 case CALL_EXPR: |
2242 if (CALL_EXPR_FN (node) != NULL_TREE) | 2277 if (CALL_EXPR_FN (node) != NULL_TREE) |
2243 print_call_name (pp, CALL_EXPR_FN (node), flags); | 2278 print_call_name (pp, CALL_EXPR_FN (node), flags); |
2244 else | 2279 else |
2245 pp_string (pp, internal_fn_name (CALL_EXPR_IFN (node))); | 2280 { |
2281 pp_dot (pp); | |
2282 pp_string (pp, internal_fn_name (CALL_EXPR_IFN (node))); | |
2283 } | |
2246 | 2284 |
2247 /* Print parameters. */ | 2285 /* Print parameters. */ |
2248 pp_space (pp); | 2286 pp_space (pp); |
2249 pp_left_paren (pp); | 2287 pp_left_paren (pp); |
2250 { | 2288 { |
2306 case WIDEN_MULT_EXPR: | 2344 case WIDEN_MULT_EXPR: |
2307 case MULT_EXPR: | 2345 case MULT_EXPR: |
2308 case MULT_HIGHPART_EXPR: | 2346 case MULT_HIGHPART_EXPR: |
2309 case PLUS_EXPR: | 2347 case PLUS_EXPR: |
2310 case POINTER_PLUS_EXPR: | 2348 case POINTER_PLUS_EXPR: |
2349 case POINTER_DIFF_EXPR: | |
2311 case MINUS_EXPR: | 2350 case MINUS_EXPR: |
2312 case TRUNC_DIV_EXPR: | 2351 case TRUNC_DIV_EXPR: |
2313 case CEIL_DIV_EXPR: | 2352 case CEIL_DIV_EXPR: |
2314 case FLOOR_DIV_EXPR: | 2353 case FLOOR_DIV_EXPR: |
2315 case ROUND_DIV_EXPR: | 2354 case ROUND_DIV_EXPR: |
2437 pp_string (pp, "ABS_EXPR <"); | 2476 pp_string (pp, "ABS_EXPR <"); |
2438 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | 2477 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); |
2439 pp_greater (pp); | 2478 pp_greater (pp); |
2440 break; | 2479 break; |
2441 | 2480 |
2481 case ABSU_EXPR: | |
2482 pp_string (pp, "ABSU_EXPR <"); | |
2483 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
2484 pp_greater (pp); | |
2485 break; | |
2486 | |
2442 case RANGE_EXPR: | 2487 case RANGE_EXPR: |
2443 NIY; | 2488 NIY; |
2444 break; | 2489 break; |
2445 | 2490 |
2446 case ADDR_SPACE_CONVERT_EXPR: | 2491 case ADDR_SPACE_CONVERT_EXPR: |
2630 switch ((enum annot_expr_kind) TREE_INT_CST_LOW (TREE_OPERAND (node, 1))) | 2675 switch ((enum annot_expr_kind) TREE_INT_CST_LOW (TREE_OPERAND (node, 1))) |
2631 { | 2676 { |
2632 case annot_expr_ivdep_kind: | 2677 case annot_expr_ivdep_kind: |
2633 pp_string (pp, ", ivdep"); | 2678 pp_string (pp, ", ivdep"); |
2634 break; | 2679 break; |
2680 case annot_expr_unroll_kind: | |
2681 pp_printf (pp, ", unroll %d", | |
2682 (int) TREE_INT_CST_LOW (TREE_OPERAND (node, 2))); | |
2683 break; | |
2635 case annot_expr_no_vector_kind: | 2684 case annot_expr_no_vector_kind: |
2636 pp_string (pp, ", no-vector"); | 2685 pp_string (pp, ", no-vector"); |
2637 break; | 2686 break; |
2638 case annot_expr_vector_kind: | 2687 case annot_expr_vector_kind: |
2639 pp_string (pp, ", vector"); | 2688 pp_string (pp, ", vector"); |
2689 break; | |
2690 case annot_expr_parallel_kind: | |
2691 pp_string (pp, ", parallel"); | |
2640 break; | 2692 break; |
2641 default: | 2693 default: |
2642 gcc_unreachable (); | 2694 gcc_unreachable (); |
2643 } | 2695 } |
2644 pp_greater (pp); | 2696 pp_greater (pp); |
2675 if (SWITCH_BODY (node)) | 2727 if (SWITCH_BODY (node)) |
2676 { | 2728 { |
2677 newline_and_indent (pp, spc+4); | 2729 newline_and_indent (pp, spc+4); |
2678 dump_generic_node (pp, SWITCH_BODY (node), spc+4, flags, | 2730 dump_generic_node (pp, SWITCH_BODY (node), spc+4, flags, |
2679 true); | 2731 true); |
2680 } | |
2681 else | |
2682 { | |
2683 tree vec = SWITCH_LABELS (node); | |
2684 size_t i, n = TREE_VEC_LENGTH (vec); | |
2685 for (i = 0; i < n; ++i) | |
2686 { | |
2687 tree elt = TREE_VEC_ELT (vec, i); | |
2688 newline_and_indent (pp, spc+4); | |
2689 if (elt) | |
2690 { | |
2691 dump_generic_node (pp, elt, spc+4, flags, false); | |
2692 pp_string (pp, " goto "); | |
2693 dump_generic_node (pp, CASE_LABEL (elt), spc+4, | |
2694 flags, true); | |
2695 pp_semicolon (pp); | |
2696 } | |
2697 else | |
2698 pp_string (pp, "case ???: goto ???;"); | |
2699 } | |
2700 } | 2732 } |
2701 newline_and_indent (pp, spc+2); | 2733 newline_and_indent (pp, spc+2); |
2702 pp_right_brace (pp); | 2734 pp_right_brace (pp); |
2703 } | 2735 } |
2704 is_expr = false; | 2736 is_expr = false; |
2758 | 2790 |
2759 case OBJ_TYPE_REF: | 2791 case OBJ_TYPE_REF: |
2760 pp_string (pp, "OBJ_TYPE_REF("); | 2792 pp_string (pp, "OBJ_TYPE_REF("); |
2761 dump_generic_node (pp, OBJ_TYPE_REF_EXPR (node), spc, flags, false); | 2793 dump_generic_node (pp, OBJ_TYPE_REF_EXPR (node), spc, flags, false); |
2762 pp_semicolon (pp); | 2794 pp_semicolon (pp); |
2763 if (!(flags & TDF_SLIM) && virtual_method_call_p (node)) | 2795 /* We omit the class type for -fcompare-debug because we may |
2796 drop TYPE_BINFO early depending on debug info, and then | |
2797 virtual_method_call_p would return false, whereas when | |
2798 TYPE_BINFO is preserved it may still return true and then | |
2799 we'd print the class type. Compare tree and rtl dumps for | |
2800 libstdc++-prettyprinters/shared_ptr.cc with and without -g, | |
2801 for example, at occurrences of OBJ_TYPE_REF. */ | |
2802 if (!(flags & (TDF_SLIM | TDF_COMPARE_DEBUG)) | |
2803 && virtual_method_call_p (node)) | |
2764 { | 2804 { |
2765 pp_string (pp, "("); | 2805 pp_string (pp, "("); |
2766 dump_generic_node (pp, obj_type_ref_class (node), spc, flags, false); | 2806 dump_generic_node (pp, obj_type_ref_class (node), spc, flags, false); |
2767 pp_string (pp, ")"); | 2807 pp_string (pp, ")"); |
2768 } | 2808 } |
2883 pp_string (pp, ", "); | 2923 pp_string (pp, ", "); |
2884 dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false); | 2924 dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false); |
2885 pp_string (pp, " > "); | 2925 pp_string (pp, " > "); |
2886 break; | 2926 break; |
2887 | 2927 |
2888 case FMA_EXPR: | |
2889 pp_string (pp, " FMA_EXPR < "); | |
2890 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
2891 pp_string (pp, ", "); | |
2892 dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false); | |
2893 pp_string (pp, ", "); | |
2894 dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false); | |
2895 pp_string (pp, " > "); | |
2896 break; | |
2897 | |
2898 case OACC_PARALLEL: | 2928 case OACC_PARALLEL: |
2899 pp_string (pp, "#pragma acc parallel"); | 2929 pp_string (pp, "#pragma acc parallel"); |
2900 goto dump_omp_clauses_body; | 2930 goto dump_omp_clauses_body; |
2901 | 2931 |
2902 case OACC_KERNELS: | 2932 case OACC_KERNELS: |
2971 | 3001 |
2972 case OMP_SIMD: | 3002 case OMP_SIMD: |
2973 pp_string (pp, "#pragma omp simd"); | 3003 pp_string (pp, "#pragma omp simd"); |
2974 goto dump_omp_loop; | 3004 goto dump_omp_loop; |
2975 | 3005 |
2976 case CILK_SIMD: | |
2977 pp_string (pp, "#pragma simd"); | |
2978 goto dump_omp_loop; | |
2979 | |
2980 case CILK_FOR: | |
2981 /* This label points one line after dumping the clauses. | |
2982 For _Cilk_for the clauses are dumped after the _Cilk_for (...) | |
2983 parameters are printed out. */ | |
2984 goto dump_omp_loop_cilk_for; | |
2985 | |
2986 case OMP_DISTRIBUTE: | 3006 case OMP_DISTRIBUTE: |
2987 pp_string (pp, "#pragma omp distribute"); | 3007 pp_string (pp, "#pragma omp distribute"); |
2988 goto dump_omp_loop; | 3008 goto dump_omp_loop; |
2989 | 3009 |
2990 case OMP_TASKLOOP: | 3010 case OMP_TASKLOOP: |
3028 is_expr = false; | 3048 is_expr = false; |
3029 break; | 3049 break; |
3030 | 3050 |
3031 dump_omp_loop: | 3051 dump_omp_loop: |
3032 dump_omp_clauses (pp, OMP_FOR_CLAUSES (node), spc, flags); | 3052 dump_omp_clauses (pp, OMP_FOR_CLAUSES (node), spc, flags); |
3033 | |
3034 dump_omp_loop_cilk_for: | |
3035 if (!(flags & TDF_SLIM)) | 3053 if (!(flags & TDF_SLIM)) |
3036 { | 3054 { |
3037 int i; | 3055 int i; |
3038 | 3056 |
3039 if (OMP_FOR_PRE_BODY (node)) | 3057 if (OMP_FOR_PRE_BODY (node)) |
3040 { | 3058 { |
3041 if (TREE_CODE (node) == CILK_FOR) | 3059 newline_and_indent (pp, spc + 2); |
3042 pp_string (pp, " "); | |
3043 else | |
3044 newline_and_indent (pp, spc + 2); | |
3045 pp_left_brace (pp); | 3060 pp_left_brace (pp); |
3046 spc += 4; | 3061 spc += 4; |
3047 newline_and_indent (pp, spc); | 3062 newline_and_indent (pp, spc); |
3048 dump_generic_node (pp, OMP_FOR_PRE_BODY (node), | 3063 dump_generic_node (pp, OMP_FOR_PRE_BODY (node), |
3049 spc, flags, false); | 3064 spc, flags, false); |
3052 { | 3067 { |
3053 spc -= 2; | 3068 spc -= 2; |
3054 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (node)); i++) | 3069 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (node)); i++) |
3055 { | 3070 { |
3056 spc += 2; | 3071 spc += 2; |
3057 if (TREE_CODE (node) != CILK_FOR || OMP_FOR_PRE_BODY (node)) | 3072 newline_and_indent (pp, spc); |
3058 newline_and_indent (pp, spc); | 3073 pp_string (pp, "for ("); |
3059 if (TREE_CODE (node) == CILK_FOR) | |
3060 pp_string (pp, "_Cilk_for ("); | |
3061 else | |
3062 pp_string (pp, "for ("); | |
3063 dump_generic_node (pp, | 3074 dump_generic_node (pp, |
3064 TREE_VEC_ELT (OMP_FOR_INIT (node), i), | 3075 TREE_VEC_ELT (OMP_FOR_INIT (node), i), |
3065 spc, flags, false); | 3076 spc, flags, false); |
3066 pp_string (pp, "; "); | 3077 pp_string (pp, "; "); |
3067 dump_generic_node (pp, | 3078 dump_generic_node (pp, |
3071 dump_generic_node (pp, | 3082 dump_generic_node (pp, |
3072 TREE_VEC_ELT (OMP_FOR_INCR (node), i), | 3083 TREE_VEC_ELT (OMP_FOR_INCR (node), i), |
3073 spc, flags, false); | 3084 spc, flags, false); |
3074 pp_right_paren (pp); | 3085 pp_right_paren (pp); |
3075 } | 3086 } |
3076 if (TREE_CODE (node) == CILK_FOR) | |
3077 dump_omp_clauses (pp, OMP_FOR_CLAUSES (node), spc, flags); | |
3078 } | 3087 } |
3079 if (OMP_FOR_BODY (node)) | 3088 if (OMP_FOR_BODY (node)) |
3080 { | 3089 { |
3081 newline_and_indent (pp, spc + 2); | 3090 newline_and_indent (pp, spc + 2); |
3082 pp_left_brace (pp); | 3091 pp_left_brace (pp); |
3195 pp_right_brace (pp); | 3204 pp_right_brace (pp); |
3196 } | 3205 } |
3197 is_expr = false; | 3206 is_expr = false; |
3198 break; | 3207 break; |
3199 | 3208 |
3200 case REDUC_MAX_EXPR: | 3209 case VEC_SERIES_EXPR: |
3201 pp_string (pp, " REDUC_MAX_EXPR < "); | |
3202 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
3203 pp_string (pp, " > "); | |
3204 break; | |
3205 | |
3206 case REDUC_MIN_EXPR: | |
3207 pp_string (pp, " REDUC_MIN_EXPR < "); | |
3208 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
3209 pp_string (pp, " > "); | |
3210 break; | |
3211 | |
3212 case REDUC_PLUS_EXPR: | |
3213 pp_string (pp, " REDUC_PLUS_EXPR < "); | |
3214 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
3215 pp_string (pp, " > "); | |
3216 break; | |
3217 | |
3218 case VEC_WIDEN_MULT_HI_EXPR: | 3210 case VEC_WIDEN_MULT_HI_EXPR: |
3219 case VEC_WIDEN_MULT_LO_EXPR: | 3211 case VEC_WIDEN_MULT_LO_EXPR: |
3220 case VEC_WIDEN_MULT_EVEN_EXPR: | 3212 case VEC_WIDEN_MULT_EVEN_EXPR: |
3221 case VEC_WIDEN_MULT_ODD_EXPR: | 3213 case VEC_WIDEN_MULT_ODD_EXPR: |
3222 case VEC_WIDEN_LSHIFT_HI_EXPR: | 3214 case VEC_WIDEN_LSHIFT_HI_EXPR: |
3229 pp_string (pp, ", "); | 3221 pp_string (pp, ", "); |
3230 dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false); | 3222 dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false); |
3231 pp_string (pp, " > "); | 3223 pp_string (pp, " > "); |
3232 break; | 3224 break; |
3233 | 3225 |
3226 case VEC_DUPLICATE_EXPR: | |
3227 pp_space (pp); | |
3228 for (str = get_tree_code_name (code); *str; str++) | |
3229 pp_character (pp, TOUPPER (*str)); | |
3230 pp_string (pp, " < "); | |
3231 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
3232 pp_string (pp, " > "); | |
3233 break; | |
3234 | |
3234 case VEC_UNPACK_HI_EXPR: | 3235 case VEC_UNPACK_HI_EXPR: |
3235 pp_string (pp, " VEC_UNPACK_HI_EXPR < "); | 3236 pp_string (pp, " VEC_UNPACK_HI_EXPR < "); |
3236 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | 3237 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); |
3237 pp_string (pp, " > "); | 3238 pp_string (pp, " > "); |
3238 break; | 3239 break; |
3249 pp_string (pp, " > "); | 3250 pp_string (pp, " > "); |
3250 break; | 3251 break; |
3251 | 3252 |
3252 case VEC_UNPACK_FLOAT_LO_EXPR: | 3253 case VEC_UNPACK_FLOAT_LO_EXPR: |
3253 pp_string (pp, " VEC_UNPACK_FLOAT_LO_EXPR < "); | 3254 pp_string (pp, " VEC_UNPACK_FLOAT_LO_EXPR < "); |
3255 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
3256 pp_string (pp, " > "); | |
3257 break; | |
3258 | |
3259 case VEC_UNPACK_FIX_TRUNC_HI_EXPR: | |
3260 pp_string (pp, " VEC_UNPACK_FIX_TRUNC_HI_EXPR < "); | |
3261 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
3262 pp_string (pp, " > "); | |
3263 break; | |
3264 | |
3265 case VEC_UNPACK_FIX_TRUNC_LO_EXPR: | |
3266 pp_string (pp, " VEC_UNPACK_FIX_TRUNC_LO_EXPR < "); | |
3254 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | 3267 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); |
3255 pp_string (pp, " > "); | 3268 pp_string (pp, " > "); |
3256 break; | 3269 break; |
3257 | 3270 |
3258 case VEC_PACK_TRUNC_EXPR: | 3271 case VEC_PACK_TRUNC_EXPR: |
3277 pp_string (pp, ", "); | 3290 pp_string (pp, ", "); |
3278 dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false); | 3291 dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false); |
3279 pp_string (pp, " > "); | 3292 pp_string (pp, " > "); |
3280 break; | 3293 break; |
3281 | 3294 |
3295 case VEC_PACK_FLOAT_EXPR: | |
3296 pp_string (pp, " VEC_PACK_FLOAT_EXPR < "); | |
3297 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
3298 pp_string (pp, ", "); | |
3299 dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false); | |
3300 pp_string (pp, " > "); | |
3301 break; | |
3302 | |
3282 case BLOCK: | 3303 case BLOCK: |
3283 dump_block_node (pp, node, spc, flags); | 3304 dump_block_node (pp, node, spc, flags); |
3284 break; | 3305 break; |
3285 | 3306 |
3286 case CILK_SPAWN_STMT: | 3307 case DEBUG_BEGIN_STMT: |
3287 pp_string (pp, "_Cilk_spawn "); | 3308 pp_string (pp, "# DEBUG BEGIN STMT"); |
3288 dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); | |
3289 break; | |
3290 | |
3291 case CILK_SYNC_STMT: | |
3292 pp_string (pp, "_Cilk_sync"); | |
3293 break; | 3309 break; |
3294 | 3310 |
3295 default: | 3311 default: |
3296 NIY; | 3312 NIY; |
3297 } | 3313 } |
3385 if (DECL_INITIAL (t)) | 3401 if (DECL_INITIAL (t)) |
3386 { | 3402 { |
3387 pp_space (pp); | 3403 pp_space (pp); |
3388 pp_equal (pp); | 3404 pp_equal (pp); |
3389 pp_space (pp); | 3405 pp_space (pp); |
3390 dump_generic_node (pp, DECL_INITIAL (t), spc, flags, false); | 3406 if (!(flags & TDF_SLIM)) |
3407 dump_generic_node (pp, DECL_INITIAL (t), spc, flags, false); | |
3408 else | |
3409 pp_string (pp, "<<< omitted >>>"); | |
3391 } | 3410 } |
3392 } | 3411 } |
3393 | 3412 |
3394 if (VAR_P (t) && DECL_HAS_VALUE_EXPR_P (t)) | 3413 if (VAR_P (t) && DECL_HAS_VALUE_EXPR_P (t)) |
3395 { | 3414 { |
3417 pp_string (pp, "struct "); | 3436 pp_string (pp, "struct "); |
3418 else if ((TREE_CODE (node) == UNION_TYPE | 3437 else if ((TREE_CODE (node) == UNION_TYPE |
3419 || TREE_CODE (node) == QUAL_UNION_TYPE)) | 3438 || TREE_CODE (node) == QUAL_UNION_TYPE)) |
3420 pp_string (pp, "union "); | 3439 pp_string (pp, "union "); |
3421 | 3440 |
3422 dump_generic_node (pp, TYPE_NAME (node), spc, 0, false); | 3441 dump_generic_node (pp, TYPE_NAME (node), spc, TDF_NONE, false); |
3423 } | 3442 } |
3424 | 3443 |
3425 /* Print the contents of the structure. */ | 3444 /* Print the contents of the structure. */ |
3426 pp_newline (pp); | 3445 pp_newline (pp); |
3427 INDENT (spc); | 3446 INDENT (spc); |
3540 return 11; | 3559 return 11; |
3541 | 3560 |
3542 case WIDEN_SUM_EXPR: | 3561 case WIDEN_SUM_EXPR: |
3543 case PLUS_EXPR: | 3562 case PLUS_EXPR: |
3544 case POINTER_PLUS_EXPR: | 3563 case POINTER_PLUS_EXPR: |
3564 case POINTER_DIFF_EXPR: | |
3545 case MINUS_EXPR: | 3565 case MINUS_EXPR: |
3546 return 12; | 3566 return 12; |
3547 | 3567 |
3548 case VEC_WIDEN_MULT_HI_EXPR: | 3568 case VEC_WIDEN_MULT_HI_EXPR: |
3549 case VEC_WIDEN_MULT_LO_EXPR: | 3569 case VEC_WIDEN_MULT_LO_EXPR: |
3561 case EXACT_DIV_EXPR: | 3581 case EXACT_DIV_EXPR: |
3562 case TRUNC_MOD_EXPR: | 3582 case TRUNC_MOD_EXPR: |
3563 case CEIL_MOD_EXPR: | 3583 case CEIL_MOD_EXPR: |
3564 case FLOOR_MOD_EXPR: | 3584 case FLOOR_MOD_EXPR: |
3565 case ROUND_MOD_EXPR: | 3585 case ROUND_MOD_EXPR: |
3566 case FMA_EXPR: | |
3567 return 13; | 3586 return 13; |
3568 | 3587 |
3569 case TRUTH_NOT_EXPR: | 3588 case TRUTH_NOT_EXPR: |
3570 case BIT_NOT_EXPR: | 3589 case BIT_NOT_EXPR: |
3571 case POSTINCREMENT_EXPR: | 3590 case POSTINCREMENT_EXPR: |
3591 case MIN_EXPR: | 3610 case MIN_EXPR: |
3592 case MAX_EXPR: | 3611 case MAX_EXPR: |
3593 case ABS_EXPR: | 3612 case ABS_EXPR: |
3594 case REALPART_EXPR: | 3613 case REALPART_EXPR: |
3595 case IMAGPART_EXPR: | 3614 case IMAGPART_EXPR: |
3596 case REDUC_MAX_EXPR: | |
3597 case REDUC_MIN_EXPR: | |
3598 case REDUC_PLUS_EXPR: | |
3599 case VEC_UNPACK_HI_EXPR: | 3615 case VEC_UNPACK_HI_EXPR: |
3600 case VEC_UNPACK_LO_EXPR: | 3616 case VEC_UNPACK_LO_EXPR: |
3601 case VEC_UNPACK_FLOAT_HI_EXPR: | 3617 case VEC_UNPACK_FLOAT_HI_EXPR: |
3602 case VEC_UNPACK_FLOAT_LO_EXPR: | 3618 case VEC_UNPACK_FLOAT_LO_EXPR: |
3619 case VEC_UNPACK_FIX_TRUNC_HI_EXPR: | |
3620 case VEC_UNPACK_FIX_TRUNC_LO_EXPR: | |
3603 case VEC_PACK_TRUNC_EXPR: | 3621 case VEC_PACK_TRUNC_EXPR: |
3604 case VEC_PACK_SAT_EXPR: | 3622 case VEC_PACK_SAT_EXPR: |
3605 return 16; | 3623 return 16; |
3606 | 3624 |
3607 default: | 3625 default: |
3712 return "+"; | 3730 return "+"; |
3713 | 3731 |
3714 case PLUS_EXPR: | 3732 case PLUS_EXPR: |
3715 return "+"; | 3733 return "+"; |
3716 | 3734 |
3717 case REDUC_PLUS_EXPR: | |
3718 return "r+"; | |
3719 | |
3720 case WIDEN_SUM_EXPR: | 3735 case WIDEN_SUM_EXPR: |
3721 return "w+"; | 3736 return "w+"; |
3722 | 3737 |
3723 case WIDEN_MULT_EXPR: | 3738 case WIDEN_MULT_EXPR: |
3724 return "w*"; | 3739 return "w*"; |
3726 case MULT_HIGHPART_EXPR: | 3741 case MULT_HIGHPART_EXPR: |
3727 return "h*"; | 3742 return "h*"; |
3728 | 3743 |
3729 case NEGATE_EXPR: | 3744 case NEGATE_EXPR: |
3730 case MINUS_EXPR: | 3745 case MINUS_EXPR: |
3746 case POINTER_DIFF_EXPR: | |
3731 return "-"; | 3747 return "-"; |
3732 | 3748 |
3733 case BIT_NOT_EXPR: | 3749 case BIT_NOT_EXPR: |
3734 return "~"; | 3750 return "~"; |
3735 | 3751 |
3857 default: | 3873 default: |
3858 NIY; | 3874 NIY; |
3859 } | 3875 } |
3860 } | 3876 } |
3861 | 3877 |
3862 /* Parses the string STR and replaces new-lines by '\n', tabs by '\t', ... */ | 3878 /* Print the first N characters in the array STR, replacing non-printable |
3879 characters (including embedded nuls) with unambiguous escape sequences. */ | |
3863 | 3880 |
3864 static void | 3881 static void |
3865 pretty_print_string (pretty_printer *pp, const char *str) | 3882 pretty_print_string (pretty_printer *pp, const char *str, unsigned n) |
3866 { | 3883 { |
3867 if (str == NULL) | 3884 if (str == NULL) |
3868 return; | 3885 return; |
3869 | 3886 |
3870 while (*str) | 3887 for ( ; n; --n, ++str) |
3871 { | 3888 { |
3872 switch (str[0]) | 3889 switch (str[0]) |
3873 { | 3890 { |
3874 case '\b': | 3891 case '\b': |
3875 pp_string (pp, "\\b"); | 3892 pp_string (pp, "\\b"); |
3905 | 3922 |
3906 case '\'': | 3923 case '\'': |
3907 pp_string (pp, "\\'"); | 3924 pp_string (pp, "\\'"); |
3908 break; | 3925 break; |
3909 | 3926 |
3910 /* No need to handle \0; the loop terminates on \0. */ | |
3911 | |
3912 case '\1': | |
3913 pp_string (pp, "\\1"); | |
3914 break; | |
3915 | |
3916 case '\2': | |
3917 pp_string (pp, "\\2"); | |
3918 break; | |
3919 | |
3920 case '\3': | |
3921 pp_string (pp, "\\3"); | |
3922 break; | |
3923 | |
3924 case '\4': | |
3925 pp_string (pp, "\\4"); | |
3926 break; | |
3927 | |
3928 case '\5': | |
3929 pp_string (pp, "\\5"); | |
3930 break; | |
3931 | |
3932 case '\6': | |
3933 pp_string (pp, "\\6"); | |
3934 break; | |
3935 | |
3936 case '\7': | |
3937 pp_string (pp, "\\7"); | |
3938 break; | |
3939 | |
3940 default: | 3927 default: |
3941 if (!ISPRINT (str[0])) | 3928 if (str[0] || n > 1) |
3942 { | 3929 { |
3943 char buf[5]; | 3930 if (!ISPRINT (str[0])) |
3944 sprintf (buf, "\\x%x", (unsigned char)str[0]); | 3931 { |
3945 pp_string (pp, buf); | 3932 char buf[5]; |
3933 sprintf (buf, "\\x%02x", (unsigned char)str[0]); | |
3934 pp_string (pp, buf); | |
3935 } | |
3936 else | |
3937 pp_character (pp, str[0]); | |
3938 break; | |
3946 } | 3939 } |
3947 else | 3940 } |
3948 pp_character (pp, str[0]); | |
3949 break; | |
3950 } | |
3951 str++; | |
3952 } | 3941 } |
3953 } | 3942 } |
3954 | 3943 |
3955 static void | 3944 static void |
3956 maybe_init_pretty_print (FILE *file) | 3945 maybe_init_pretty_print (FILE *file) |
3972 INDENT (spc); | 3961 INDENT (spc); |
3973 } | 3962 } |
3974 | 3963 |
3975 /* Handle the %K format for TEXT. Separate from default_tree_printer | 3964 /* Handle the %K format for TEXT. Separate from default_tree_printer |
3976 so it can also be used in front ends. | 3965 so it can also be used in front ends. |
3977 Argument is a statement from which EXPR_LOCATION and TREE_BLOCK will | 3966 The location LOC and BLOCK are expected to be extracted by the caller |
3978 be recorded. */ | 3967 from the %K argument arg via EXPR_LOCATION(arg) and TREE_BLOCK(arg). */ |
3979 | 3968 |
3980 void | 3969 void |
3981 percent_K_format (text_info *text, tree t) | 3970 percent_K_format (text_info *text, location_t loc, tree block) |
3982 { | 3971 { |
3983 text->set_location (0, EXPR_LOCATION (t), true); | 3972 text->set_location (0, loc, SHOW_RANGE_WITH_CARET); |
3984 gcc_assert (pp_ti_abstract_origin (text) != NULL); | 3973 gcc_assert (pp_ti_abstract_origin (text) != NULL); |
3985 tree block = TREE_BLOCK (t); | |
3986 *pp_ti_abstract_origin (text) = NULL; | 3974 *pp_ti_abstract_origin (text) = NULL; |
3987 | |
3988 if (in_lto_p) | |
3989 { | |
3990 /* ??? LTO drops all BLOCK_ABSTRACT_ORIGINs apart from those | |
3991 representing the outermost block of an inlined function. | |
3992 So walk the BLOCK tree until we hit such a scope. */ | |
3993 while (block | |
3994 && TREE_CODE (block) == BLOCK) | |
3995 { | |
3996 if (inlined_function_outer_scope_p (block)) | |
3997 { | |
3998 *pp_ti_abstract_origin (text) = block; | |
3999 break; | |
4000 } | |
4001 block = BLOCK_SUPERCONTEXT (block); | |
4002 } | |
4003 return; | |
4004 } | |
4005 | 3975 |
4006 while (block | 3976 while (block |
4007 && TREE_CODE (block) == BLOCK | 3977 && TREE_CODE (block) == BLOCK |
4008 && BLOCK_ABSTRACT_ORIGIN (block)) | 3978 && BLOCK_ABSTRACT_ORIGIN (block)) |
4009 { | 3979 { |
4010 tree ao = BLOCK_ABSTRACT_ORIGIN (block); | 3980 tree ao = BLOCK_ABSTRACT_ORIGIN (block); |
4011 | |
4012 while (TREE_CODE (ao) == BLOCK | |
4013 && BLOCK_ABSTRACT_ORIGIN (ao) | |
4014 && BLOCK_ABSTRACT_ORIGIN (ao) != ao) | |
4015 ao = BLOCK_ABSTRACT_ORIGIN (ao); | |
4016 | |
4017 if (TREE_CODE (ao) == FUNCTION_DECL) | 3981 if (TREE_CODE (ao) == FUNCTION_DECL) |
4018 { | 3982 { |
4019 *pp_ti_abstract_origin (text) = block; | 3983 *pp_ti_abstract_origin (text) = block; |
4020 break; | 3984 break; |
4021 } | 3985 } |
4060 dname, aname, fun->funcdef_no); | 4024 dname, aname, fun->funcdef_no); |
4061 if (!(flags & TDF_NOUID)) | 4025 if (!(flags & TDF_NOUID)) |
4062 fprintf (dump_file, ", decl_uid=%d", DECL_UID (fdecl)); | 4026 fprintf (dump_file, ", decl_uid=%d", DECL_UID (fdecl)); |
4063 if (node) | 4027 if (node) |
4064 { | 4028 { |
4065 fprintf (dump_file, ", cgraph_uid=%d", node->uid); | 4029 fprintf (dump_file, ", cgraph_uid=%d", node->get_uid ()); |
4066 fprintf (dump_file, ", symbol_order=%d)%s\n\n", node->order, | 4030 fprintf (dump_file, ", symbol_order=%d)%s\n\n", node->order, |
4067 node->frequency == NODE_FREQUENCY_HOT | 4031 node->frequency == NODE_FREQUENCY_HOT |
4068 ? " (hot)" | 4032 ? " (hot)" |
4069 : node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED | 4033 : node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED |
4070 ? " (unlikely executed)" | 4034 ? " (unlikely executed)" |