Mercurial > hg > CbC > CbC_gcc
diff gcc/tree-pretty-print.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line diff
--- a/gcc/tree-pretty-print.c Thu Oct 25 07:37:49 2018 +0900 +++ b/gcc/tree-pretty-print.c Thu Feb 13 11:34:05 2020 +0900 @@ -1,5 +1,5 @@ /* Pretty formatting of GENERIC trees in C syntax. - Copyright (C) 2001-2018 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Adapted from c-pretty-print.c by Diego Novillo <dnovillo@redhat.com> This file is part of GCC. @@ -34,6 +34,14 @@ #include "internal-fn.h" #include "gomp-constants.h" #include "gimple.h" +#include "fold-const.h" + +/* Disable warnings about quoting issues in the pp_xxx calls below + that (intentionally) don't follow GCC diagnostic conventions. */ +#if __GNUC__ >= 10 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wformat-diag" +#endif /* Local functions, macros and variables. */ static const char *op_symbol (const_tree); @@ -392,6 +400,31 @@ } +/* Dump OpenMP iterators ITER. */ + +static void +dump_omp_iterators (pretty_printer *pp, tree iter, int spc, dump_flags_t flags) +{ + pp_string (pp, "iterator("); + for (tree it = iter; it; it = TREE_CHAIN (it)) + { + if (it != iter) + pp_string (pp, ", "); + dump_generic_node (pp, TREE_TYPE (TREE_VEC_ELT (it, 0)), spc, flags, + false); + pp_space (pp); + dump_generic_node (pp, TREE_VEC_ELT (it, 0), spc, flags, false); + pp_equal (pp); + dump_generic_node (pp, TREE_VEC_ELT (it, 1), spc, flags, false); + pp_colon (pp); + dump_generic_node (pp, TREE_VEC_ELT (it, 2), spc, flags, false); + pp_colon (pp); + dump_generic_node (pp, TREE_VEC_ELT (it, 3), spc, flags, false); + } + pp_right_paren (pp); +} + + /* Dump OpenMP clause CLAUSE. PP, CLAUSE, SPC and FLAGS are as in dump_generic_node. */ @@ -399,7 +432,7 @@ dump_omp_clause (pretty_printer *pp, tree clause, int spc, dump_flags_t flags) { const char *name; - + const char *modifier = NULL; switch (OMP_CLAUSE_CODE (clause)) { case OMP_CLAUSE_PRIVATE: @@ -413,6 +446,8 @@ goto print_remap; case OMP_CLAUSE_LASTPRIVATE: name = "lastprivate"; + if (OMP_CLAUSE_LASTPRIVATE_CONDITIONAL (clause)) + modifier = "conditional:"; goto print_remap; case OMP_CLAUSE_COPYIN: name = "copyin"; @@ -425,29 +460,66 @@ goto print_remap; case OMP_CLAUSE_USE_DEVICE_PTR: name = "use_device_ptr"; + if (OMP_CLAUSE_USE_DEVICE_PTR_IF_PRESENT (clause)) + modifier = "if_present:"; + goto print_remap; + case OMP_CLAUSE_USE_DEVICE_ADDR: + name = "use_device_addr"; goto print_remap; case OMP_CLAUSE_IS_DEVICE_PTR: name = "is_device_ptr"; goto print_remap; + case OMP_CLAUSE_INCLUSIVE: + name = "inclusive"; + goto print_remap; + case OMP_CLAUSE_EXCLUSIVE: + name = "exclusive"; + goto print_remap; case OMP_CLAUSE__LOOPTEMP_: name = "_looptemp_"; goto print_remap; + case OMP_CLAUSE__REDUCTEMP_: + name = "_reductemp_"; + goto print_remap; + case OMP_CLAUSE__CONDTEMP_: + name = "_condtemp_"; + goto print_remap; + case OMP_CLAUSE__SCANTEMP_: + name = "_scantemp_"; + goto print_remap; case OMP_CLAUSE_TO_DECLARE: name = "to"; goto print_remap; case OMP_CLAUSE_LINK: name = "link"; goto print_remap; + case OMP_CLAUSE_NONTEMPORAL: + name = "nontemporal"; + goto print_remap; print_remap: pp_string (pp, name); pp_left_paren (pp); + if (modifier) + pp_string (pp, modifier); dump_generic_node (pp, OMP_CLAUSE_DECL (clause), spc, flags, false); pp_right_paren (pp); break; + case OMP_CLAUSE_TASK_REDUCTION: + case OMP_CLAUSE_IN_REDUCTION: + pp_string (pp, OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_IN_REDUCTION + ? "in_" : "task_"); + /* FALLTHRU */ case OMP_CLAUSE_REDUCTION: pp_string (pp, "reduction("); + if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_REDUCTION) + { + if (OMP_CLAUSE_REDUCTION_TASK (clause)) + pp_string (pp, "task,"); + else if (OMP_CLAUSE_REDUCTION_INSCAN (clause)) + pp_string (pp, "inscan,"); + } if (OMP_CLAUSE_REDUCTION_CODE (clause) != ERROR_MARK) { pp_string (pp, @@ -464,7 +536,9 @@ switch (OMP_CLAUSE_IF_MODIFIER (clause)) { case ERROR_MARK: break; + case VOID_CST: pp_string (pp, "cancel:"); break; case OMP_PARALLEL: pp_string (pp, "parallel:"); break; + case OMP_SIMD: pp_string (pp, "simd:"); break; case OMP_TASK: pp_string (pp, "task:"); break; case OMP_TASKLOOP: pp_string (pp, "taskloop:"); break; case OMP_TARGET_DATA: pp_string (pp, "target data:"); break; @@ -643,18 +717,27 @@ pp_string (pp, "depend("); switch (OMP_CLAUSE_DEPEND_KIND (clause)) { + case OMP_CLAUSE_DEPEND_DEPOBJ: + name = "depobj"; + break; case OMP_CLAUSE_DEPEND_IN: - pp_string (pp, "in"); + name = "in"; break; case OMP_CLAUSE_DEPEND_OUT: - pp_string (pp, "out"); + name = "out"; break; case OMP_CLAUSE_DEPEND_INOUT: - pp_string (pp, "inout"); + name = "inout"; + break; + case OMP_CLAUSE_DEPEND_MUTEXINOUTSET: + name = "mutexinoutset"; break; case OMP_CLAUSE_DEPEND_SOURCE: pp_string (pp, "source)"); return; + case OMP_CLAUSE_DEPEND_LAST: + name = "__internal__"; + break; case OMP_CLAUSE_DEPEND_SINK: pp_string (pp, "sink:"); for (tree t = OMP_CLAUSE_DECL (clause); t; t = TREE_CHAIN (t)) @@ -680,10 +763,21 @@ default: gcc_unreachable (); } - pp_colon (pp); - dump_generic_node (pp, OMP_CLAUSE_DECL (clause), - spc, flags, false); - pp_right_paren (pp); + { + tree t = OMP_CLAUSE_DECL (clause); + if (TREE_CODE (t) == TREE_LIST + && TREE_PURPOSE (t) + && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC) + { + dump_omp_iterators (pp, TREE_PURPOSE (t), spc, flags); + pp_colon (pp); + t = TREE_VALUE (t); + } + pp_string (pp, name); + pp_colon (pp); + dump_generic_node (pp, t, spc, flags, false); + pp_right_paren (pp); + } break; case OMP_CLAUSE_MAP: @@ -694,6 +788,9 @@ case GOMP_MAP_POINTER: pp_string (pp, "alloc"); break; + case GOMP_MAP_IF_PRESENT: + pp_string (pp, "no_alloc"); + break; case GOMP_MAP_TO: case GOMP_MAP_TO_PSET: pp_string (pp, "to"); @@ -755,6 +852,18 @@ case GOMP_MAP_LINK: pp_string (pp, "link"); break; + case GOMP_MAP_ATTACH: + pp_string (pp, "attach"); + break; + case GOMP_MAP_DETACH: + pp_string (pp, "detach"); + break; + case GOMP_MAP_FORCE_DETACH: + pp_string (pp, "force_detach"); + break; + case GOMP_MAP_ATTACH_DETACH: + pp_string (pp, "attach_detach"); + break; default: gcc_unreachable (); } @@ -776,6 +885,12 @@ case GOMP_MAP_TO_PSET: pp_string (pp, " [pointer set, len: "); break; + case GOMP_MAP_ATTACH: + case GOMP_MAP_DETACH: + case GOMP_MAP_FORCE_DETACH: + case GOMP_MAP_ATTACH_DETACH: + pp_string (pp, " [bias: "); + break; default: pp_string (pp, " [len: "); break; @@ -857,6 +972,25 @@ pp_right_paren (pp); break; + case OMP_CLAUSE_DEVICE_TYPE: + pp_string (pp, "device_type("); + switch (OMP_CLAUSE_DEVICE_TYPE_KIND (clause)) + { + case OMP_CLAUSE_DEVICE_TYPE_HOST: + pp_string (pp, "host"); + break; + case OMP_CLAUSE_DEVICE_TYPE_NOHOST: + pp_string (pp, "nohost"); + break; + case OMP_CLAUSE_DEVICE_TYPE_ANY: + pp_string (pp, "any"); + break; + default: + gcc_unreachable (); + } + pp_right_paren (pp); + break; + case OMP_CLAUSE_SAFELEN: pp_string (pp, "safelen("); dump_generic_node (pp, OMP_CLAUSE_SAFELEN_EXPR (clause), @@ -900,7 +1034,76 @@ break; case OMP_CLAUSE_DEFAULTMAP: - pp_string (pp, "defaultmap(tofrom:scalar)"); + pp_string (pp, "defaultmap("); + switch (OMP_CLAUSE_DEFAULTMAP_BEHAVIOR (clause)) + { + case OMP_CLAUSE_DEFAULTMAP_ALLOC: + pp_string (pp, "alloc"); + break; + case OMP_CLAUSE_DEFAULTMAP_TO: + pp_string (pp, "to"); + break; + case OMP_CLAUSE_DEFAULTMAP_FROM: + pp_string (pp, "from"); + break; + case OMP_CLAUSE_DEFAULTMAP_TOFROM: + pp_string (pp, "tofrom"); + break; + case OMP_CLAUSE_DEFAULTMAP_FIRSTPRIVATE: + pp_string (pp, "firstprivate"); + break; + case OMP_CLAUSE_DEFAULTMAP_NONE: + pp_string (pp, "none"); + break; + case OMP_CLAUSE_DEFAULTMAP_DEFAULT: + pp_string (pp, "default"); + break; + default: + gcc_unreachable (); + } + switch (OMP_CLAUSE_DEFAULTMAP_CATEGORY (clause)) + { + case OMP_CLAUSE_DEFAULTMAP_CATEGORY_UNSPECIFIED: + break; + case OMP_CLAUSE_DEFAULTMAP_CATEGORY_SCALAR: + pp_string (pp, ":scalar"); + break; + case OMP_CLAUSE_DEFAULTMAP_CATEGORY_AGGREGATE: + pp_string (pp, ":aggregate"); + break; + case OMP_CLAUSE_DEFAULTMAP_CATEGORY_ALLOCATABLE: + pp_string (pp, ":allocatable"); + break; + case OMP_CLAUSE_DEFAULTMAP_CATEGORY_POINTER: + pp_string (pp, ":pointer"); + break; + default: + gcc_unreachable (); + } + pp_right_paren (pp); + break; + + case OMP_CLAUSE_ORDER: + pp_string (pp, "order(concurrent)"); + break; + + case OMP_CLAUSE_BIND: + pp_string (pp, "bind("); + switch (OMP_CLAUSE_BIND_KIND (clause)) + { + case OMP_CLAUSE_BIND_TEAMS: + pp_string (pp, "teams"); + break; + case OMP_CLAUSE_BIND_PARALLEL: + pp_string (pp, "parallel"); + break; + case OMP_CLAUSE_BIND_THREAD: + pp_string (pp, "thread"); + break; + default: + gcc_unreachable (); + } + pp_right_paren (pp); break; case OMP_CLAUSE__SIMDUID_: @@ -1063,9 +1266,7 @@ break; default: - /* Should never happen. */ - dump_generic_node (pp, clause, spc, flags, false); - break; + gcc_unreachable (); } } @@ -1218,6 +1419,157 @@ } } +/* Dump #pragma omp atomic memory order clause. */ + +void +dump_omp_atomic_memory_order (pretty_printer *pp, enum omp_memory_order mo) +{ + switch (mo) + { + case OMP_MEMORY_ORDER_RELAXED: + pp_string (pp, " relaxed"); + break; + case OMP_MEMORY_ORDER_SEQ_CST: + pp_string (pp, " seq_cst"); + break; + case OMP_MEMORY_ORDER_ACQ_REL: + pp_string (pp, " acq_rel"); + break; + case OMP_MEMORY_ORDER_ACQUIRE: + pp_string (pp, " acquire"); + break; + case OMP_MEMORY_ORDER_RELEASE: + pp_string (pp, " release"); + break; + case OMP_MEMORY_ORDER_UNSPECIFIED: + break; + default: + gcc_unreachable (); + } +} + +/* Helper to dump a MEM_REF node. */ + +static void +dump_mem_ref (pretty_printer *pp, tree node, int spc, dump_flags_t flags) +{ + if (flags & TDF_GIMPLE) + { + pp_string (pp, "__MEM <"); + dump_generic_node (pp, TREE_TYPE (node), + spc, flags | TDF_SLIM, false); + if (TYPE_ALIGN (TREE_TYPE (node)) + != TYPE_ALIGN (TYPE_MAIN_VARIANT (TREE_TYPE (node)))) + { + pp_string (pp, ", "); + pp_decimal_int (pp, TYPE_ALIGN (TREE_TYPE (node))); + } + pp_greater (pp); + pp_string (pp, " ("); + if (TREE_TYPE (TREE_OPERAND (node, 0)) + != TREE_TYPE (TREE_OPERAND (node, 1))) + { + pp_left_paren (pp); + dump_generic_node (pp, TREE_TYPE (TREE_OPERAND (node, 1)), + spc, flags | TDF_SLIM, false); + pp_right_paren (pp); + } + dump_generic_node (pp, TREE_OPERAND (node, 0), + spc, flags | TDF_SLIM, false); + if (! integer_zerop (TREE_OPERAND (node, 1))) + { + pp_string (pp, " + "); + dump_generic_node (pp, TREE_OPERAND (node, 1), + spc, flags | TDF_SLIM, false); + } + pp_right_paren (pp); + } + else if (integer_zerop (TREE_OPERAND (node, 1)) + /* Dump the types of INTEGER_CSTs explicitly, for we can't + infer them and MEM_ATTR caching will share MEM_REFs + with differently-typed op0s. */ + && TREE_CODE (TREE_OPERAND (node, 0)) != INTEGER_CST + /* Released SSA_NAMES have no TREE_TYPE. */ + && TREE_TYPE (TREE_OPERAND (node, 0)) != NULL_TREE + /* Same pointer types, but ignoring POINTER_TYPE vs. + REFERENCE_TYPE. */ + && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 0))) + == TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1)))) + && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 0))) + == TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 1)))) + && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 0))) + == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 1)))) + /* Same value types ignoring qualifiers. */ + && (TYPE_MAIN_VARIANT (TREE_TYPE (node)) + == TYPE_MAIN_VARIANT + (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1))))) + && (!(flags & TDF_ALIAS) + || MR_DEPENDENCE_CLIQUE (node) == 0)) + { + if (TREE_CODE (TREE_OPERAND (node, 0)) != ADDR_EXPR) + { + /* Enclose pointers to arrays in parentheses. */ + tree op0 = TREE_OPERAND (node, 0); + tree op0type = TREE_TYPE (op0); + if (POINTER_TYPE_P (op0type) + && TREE_CODE (TREE_TYPE (op0type)) == ARRAY_TYPE) + pp_left_paren (pp); + pp_star (pp); + dump_generic_node (pp, op0, spc, flags, false); + if (POINTER_TYPE_P (op0type) + && TREE_CODE (TREE_TYPE (op0type)) == ARRAY_TYPE) + pp_right_paren (pp); + } + else + dump_generic_node (pp, + TREE_OPERAND (TREE_OPERAND (node, 0), 0), + spc, flags, false); + } + else + { + pp_string (pp, "MEM"); + + tree nodetype = TREE_TYPE (node); + tree op0 = TREE_OPERAND (node, 0); + tree op1 = TREE_OPERAND (node, 1); + tree op1type = TYPE_MAIN_VARIANT (TREE_TYPE (op1)); + + tree op0size = TYPE_SIZE (nodetype); + tree op1size = TYPE_SIZE (TREE_TYPE (op1type)); + + if (!op0size || !op1size + || !operand_equal_p (op0size, op1size, 0)) + { + pp_string (pp, " <"); + /* If the size of the type of the operand is not the same + as the size of the MEM_REF expression include the type + of the latter similar to the TDF_GIMPLE output to make + it clear how many bytes of memory are being accessed. */ + dump_generic_node (pp, nodetype, spc, flags | TDF_SLIM, false); + pp_string (pp, "> "); + } + + pp_string (pp, "[("); + dump_generic_node (pp, op1type, spc, flags | TDF_SLIM, false); + pp_right_paren (pp); + dump_generic_node (pp, op0, spc, flags, false); + if (!integer_zerop (op1)) + if (!integer_zerop (TREE_OPERAND (node, 1))) + { + pp_string (pp, " + "); + dump_generic_node (pp, op1, spc, flags, false); + } + if ((flags & TDF_ALIAS) + && MR_DEPENDENCE_CLIQUE (node) != 0) + { + pp_string (pp, " clique "); + pp_unsigned_wide_integer (pp, MR_DEPENDENCE_CLIQUE (node)); + pp_string (pp, " base "); + pp_unsigned_wide_integer (pp, MR_DEPENDENCE_BASE (node)); + } + pp_right_bracket (pp); + } + } /* Dump the node NODE on the pretty_printer PP, SPC spaces of indent. FLAGS specifies details to show in the dump (see TDF_* in @@ -1477,101 +1829,8 @@ break; case MEM_REF: - { - if (flags & TDF_GIMPLE) - { - pp_string (pp, "__MEM <"); - dump_generic_node (pp, TREE_TYPE (node), - spc, flags | TDF_SLIM, false); - if (TYPE_ALIGN (TREE_TYPE (node)) - != TYPE_ALIGN (TYPE_MAIN_VARIANT (TREE_TYPE (node)))) - { - pp_string (pp, ", "); - pp_decimal_int (pp, TYPE_ALIGN (TREE_TYPE (node))); - } - pp_greater (pp); - pp_string (pp, " ("); - if (TREE_TYPE (TREE_OPERAND (node, 0)) - != TREE_TYPE (TREE_OPERAND (node, 1))) - { - pp_left_paren (pp); - dump_generic_node (pp, TREE_TYPE (TREE_OPERAND (node, 1)), - spc, flags | TDF_SLIM, false); - pp_right_paren (pp); - } - dump_generic_node (pp, TREE_OPERAND (node, 0), - spc, flags | TDF_SLIM, false); - if (! integer_zerop (TREE_OPERAND (node, 1))) - { - pp_string (pp, " + "); - dump_generic_node (pp, TREE_OPERAND (node, 1), - spc, flags | TDF_SLIM, false); - } - pp_right_paren (pp); - } - else if (integer_zerop (TREE_OPERAND (node, 1)) - /* Dump the types of INTEGER_CSTs explicitly, for we can't - infer them and MEM_ATTR caching will share MEM_REFs - with differently-typed op0s. */ - && TREE_CODE (TREE_OPERAND (node, 0)) != INTEGER_CST - /* Released SSA_NAMES have no TREE_TYPE. */ - && TREE_TYPE (TREE_OPERAND (node, 0)) != NULL_TREE - /* Same pointer types, but ignoring POINTER_TYPE vs. - REFERENCE_TYPE. */ - && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 0))) - == TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1)))) - && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 0))) - == TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 1)))) - && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 0))) - == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 1)))) - /* Same value types ignoring qualifiers. */ - && (TYPE_MAIN_VARIANT (TREE_TYPE (node)) - == TYPE_MAIN_VARIANT - (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1))))) - && (!(flags & TDF_ALIAS) - || MR_DEPENDENCE_CLIQUE (node) == 0)) - { - if (TREE_CODE (TREE_OPERAND (node, 0)) != ADDR_EXPR) - { - pp_star (pp); - dump_generic_node (pp, TREE_OPERAND (node, 0), - spc, flags, false); - } - else - dump_generic_node (pp, - TREE_OPERAND (TREE_OPERAND (node, 0), 0), - spc, flags, false); - } - else - { - tree ptype; - - pp_string (pp, "MEM["); - pp_left_paren (pp); - ptype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (node, 1))); - dump_generic_node (pp, ptype, - spc, flags | TDF_SLIM, false); - pp_right_paren (pp); - dump_generic_node (pp, TREE_OPERAND (node, 0), - spc, flags, false); - if (!integer_zerop (TREE_OPERAND (node, 1))) - { - pp_string (pp, " + "); - dump_generic_node (pp, TREE_OPERAND (node, 1), - spc, flags, false); - } - if ((flags & TDF_ALIAS) - && MR_DEPENDENCE_CLIQUE (node) != 0) - { - pp_string (pp, " clique "); - pp_unsigned_wide_integer (pp, MR_DEPENDENCE_CLIQUE (node)); - pp_string (pp, " base "); - pp_unsigned_wide_integer (pp, MR_DEPENDENCE_BASE (node)); - } - pp_right_bracket (pp); - } - break; - } + dump_mem_ref (pp, node, spc, flags); + break; case TARGET_MEM_REF: { @@ -1687,7 +1946,8 @@ && (POINTER_TYPE_P (TREE_TYPE (node)) || (TYPE_PRECISION (TREE_TYPE (node)) < TYPE_PRECISION (integer_type_node)) - || exact_log2 (TYPE_PRECISION (TREE_TYPE (node))) == -1)) + || exact_log2 (TYPE_PRECISION (TREE_TYPE (node))) == -1 + || tree_int_cst_sgn (node) < 0)) { pp_string (pp, "_Literal ("); dump_generic_node (pp, TREE_TYPE (node), spc, flags, false); @@ -1818,6 +2078,12 @@ case VECTOR_CST: { unsigned i; + if (flags & TDF_GIMPLE) + { + pp_string (pp, "_Literal ("); + dump_generic_node (pp, TREE_TYPE (node), spc, flags, false); + pp_string (pp, ") "); + } pp_string (pp, "{ "); unsigned HOST_WIDE_INT nunits; if (!VECTOR_CST_NELTS (node).is_constant (&nunits)) @@ -1967,13 +2233,39 @@ break; case BIT_FIELD_REF: - pp_string (pp, "BIT_FIELD_REF <"); - dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); - pp_string (pp, ", "); - dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false); - pp_string (pp, ", "); - dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false); - pp_greater (pp); + if (flags & TDF_GIMPLE) + { + pp_string (pp, "__BIT_FIELD_REF <"); + dump_generic_node (pp, TREE_TYPE (node), + spc, flags | TDF_SLIM, false); + if (TYPE_ALIGN (TREE_TYPE (node)) + != TYPE_ALIGN (TYPE_MAIN_VARIANT (TREE_TYPE (node)))) + { + pp_string (pp, ", "); + pp_decimal_int (pp, TYPE_ALIGN (TREE_TYPE (node))); + } + pp_greater (pp); + pp_string (pp, " ("); + dump_generic_node (pp, TREE_OPERAND (node, 0), spc, + flags | TDF_SLIM, false); + pp_string (pp, ", "); + dump_generic_node (pp, TREE_OPERAND (node, 1), spc, + flags | TDF_SLIM, false); + pp_string (pp, ", "); + dump_generic_node (pp, TREE_OPERAND (node, 2), spc, + flags | TDF_SLIM, false); + pp_right_paren (pp); + } + else + { + pp_string (pp, "BIT_FIELD_REF <"); + dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); + pp_string (pp, ", "); + dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false); + pp_string (pp, ", "); + dump_generic_node (pp, TREE_OPERAND (node, 2), spc, flags, false); + pp_greater (pp); + } break; case BIT_INSERT_EXPR: @@ -2029,6 +2321,12 @@ bool is_struct_init = false; bool is_array_init = false; widest_int curidx; + if (flags & TDF_GIMPLE) + { + pp_string (pp, "_Literal ("); + dump_generic_node (pp, TREE_TYPE (node), spc, flags, false); + pp_string (pp, ") "); + } pp_left_brace (pp); if (TREE_CLOBBER_P (node)) pp_string (pp, "CLOBBER"); @@ -2509,7 +2807,10 @@ break; case VIEW_CONVERT_EXPR: - pp_string (pp, "VIEW_CONVERT_EXPR<"); + if (flags & TDF_GIMPLE) + pp_string (pp, "__VIEW_CONVERT <"); + else + pp_string (pp, "VIEW_CONVERT_EXPR<"); dump_generic_node (pp, TREE_TYPE (node), spc, flags, false); pp_string (pp, ">("); dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); @@ -2592,12 +2893,34 @@ newline_and_indent (pp, spc+2); pp_right_brace (pp); newline_and_indent (pp, spc); - pp_string (pp, - (TREE_CODE (node) == TRY_CATCH_EXPR) ? "catch" : "finally"); + if (TREE_CODE (node) == TRY_CATCH_EXPR) + { + node = TREE_OPERAND (node, 1); + pp_string (pp, "catch"); + } + else + { + gcc_assert (TREE_CODE (node) == TRY_FINALLY_EXPR); + node = TREE_OPERAND (node, 1); + pp_string (pp, "finally"); + if (TREE_CODE (node) == EH_ELSE_EXPR) + { + newline_and_indent (pp, spc+2); + pp_left_brace (pp); + newline_and_indent (pp, spc+4); + dump_generic_node (pp, TREE_OPERAND (node, 0), spc+4, + flags, true); + newline_and_indent (pp, spc+2); + pp_right_brace (pp); + newline_and_indent (pp, spc); + node = TREE_OPERAND (node, 1); + pp_string (pp, "else"); + } + } newline_and_indent (pp, spc+2); pp_left_brace (pp); newline_and_indent (pp, spc+4); - dump_generic_node (pp, TREE_OPERAND (node, 1), spc+4, flags, true); + dump_generic_node (pp, node, spc+4, flags, true); newline_and_indent (pp, spc+2); pp_right_brace (pp); is_expr = false; @@ -2933,6 +3256,10 @@ pp_string (pp, "#pragma acc kernels"); goto dump_omp_clauses_body; + case OACC_SERIAL: + pp_string (pp, "#pragma acc serial"); + goto dump_omp_clauses_body; + case OACC_DATA: pp_string (pp, "#pragma acc data"); dump_omp_clauses (pp, OACC_DATA_CLAUSES (node), spc, flags); @@ -2991,7 +3318,8 @@ break; case OMP_TASK: - pp_string (pp, "#pragma omp task"); + pp_string (pp, OMP_TASK_BODY (node) ? "#pragma omp task" + : "#pragma omp taskwait"); dump_omp_clauses (pp, OMP_TASK_CLAUSES (node), spc, flags); goto dump_omp_body; @@ -3011,6 +3339,10 @@ pp_string (pp, "#pragma omp taskloop"); goto dump_omp_loop; + case OMP_LOOP: + pp_string (pp, "#pragma omp loop"); + goto dump_omp_loop; + case OACC_LOOP: pp_string (pp, "#pragma acc loop"); goto dump_omp_loop; @@ -3116,12 +3448,21 @@ pp_string (pp, "#pragma omp section"); goto dump_omp_body; + case OMP_SCAN: + if (OMP_SCAN_CLAUSES (node)) + { + pp_string (pp, "#pragma omp scan"); + dump_omp_clauses (pp, OMP_SCAN_CLAUSES (node), spc, flags); + } + goto dump_omp_body; + case OMP_MASTER: pp_string (pp, "#pragma omp master"); goto dump_omp_body; case OMP_TASKGROUP: pp_string (pp, "#pragma omp taskgroup"); + dump_omp_clauses (pp, OMP_TASKGROUP_CLAUSES (node), spc, flags); goto dump_omp_body; case OMP_ORDERED: @@ -3144,8 +3485,7 @@ case OMP_ATOMIC: pp_string (pp, "#pragma omp atomic"); - if (OMP_ATOMIC_SEQ_CST (node)) - pp_string (pp, " seq_cst"); + dump_omp_atomic_memory_order (pp, OMP_ATOMIC_MEMORY_ORDER (node)); newline_and_indent (pp, spc + 2); dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); pp_space (pp); @@ -3156,8 +3496,7 @@ case OMP_ATOMIC_READ: pp_string (pp, "#pragma omp atomic read"); - if (OMP_ATOMIC_SEQ_CST (node)) - pp_string (pp, " seq_cst"); + dump_omp_atomic_memory_order (pp, OMP_ATOMIC_MEMORY_ORDER (node)); newline_and_indent (pp, spc + 2); dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); pp_space (pp); @@ -3166,8 +3505,7 @@ case OMP_ATOMIC_CAPTURE_OLD: case OMP_ATOMIC_CAPTURE_NEW: pp_string (pp, "#pragma omp atomic capture"); - if (OMP_ATOMIC_SEQ_CST (node)) - pp_string (pp, " seq_cst"); + dump_omp_atomic_memory_order (pp, OMP_ATOMIC_MEMORY_ORDER (node)); newline_and_indent (pp, spc + 2); dump_generic_node (pp, TREE_OPERAND (node, 0), spc, flags, false); pp_space (pp); @@ -4067,3 +4405,7 @@ pp_string (pp, pp_buffer (pp)->digit_buffer); } } + +#if __GNUC__ >= 10 +# pragma GCC diagnostic pop +#endif