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