diff options
Diffstat (limited to 'gcc/gimple-pretty-print.c')
-rw-r--r-- | gcc/gimple-pretty-print.c | 78 |
1 files changed, 46 insertions, 32 deletions
diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c index 01a1ab56680..bc01bea167e 100644 --- a/gcc/gimple-pretty-print.c +++ b/gcc/gimple-pretty-print.c @@ -1600,23 +1600,20 @@ dump_gimple_asm (pretty_printer *buffer, gimple gs, int spc, int flags) } } - -/* Dump a PHI node PHI. BUFFER, SPC and FLAGS are as in pp_gimple_stmt_1. - The caller is responsible for calling pp_flush on BUFFER to finalize - pretty printer. */ +/* Dump ptr_info and range_info for NODE on pretty_printer BUFFER with + SPC spaces of indent. */ static void -dump_gimple_phi (pretty_printer *buffer, gimple phi, int spc, int flags) +dump_ssaname_info (pretty_printer *buffer, tree node, int spc) { - size_t i; - tree lhs = gimple_phi_result (phi); + if (TREE_CODE (node) != SSA_NAME) + return; - if (flags & TDF_ALIAS - && POINTER_TYPE_P (TREE_TYPE (lhs)) - && SSA_NAME_PTR_INFO (lhs)) + if (POINTER_TYPE_P (TREE_TYPE (node)) + && SSA_NAME_PTR_INFO (node)) { unsigned int align, misalign; - struct ptr_info_def *pi = SSA_NAME_PTR_INFO (lhs); + struct ptr_info_def *pi = SSA_NAME_PTR_INFO (node); pp_string (buffer, "PT = "); pp_points_to_solution (buffer, &pi->pt); newline_and_indent (buffer, spc); @@ -1628,6 +1625,41 @@ dump_gimple_phi (pretty_printer *buffer, gimple phi, int spc, int flags) pp_string (buffer, "# "); } + if (!POINTER_TYPE_P (TREE_TYPE (node)) + && SSA_NAME_RANGE_INFO (node)) + { + double_int min, max; + value_range_type range_type = get_range_info (node, &min, &max); + + if (range_type == VR_VARYING) + pp_printf (buffer, "# RANGE VR_VARYING"); + else if (range_type == VR_RANGE || range_type == VR_ANTI_RANGE) + { + pp_printf (buffer, "# RANGE "); + pp_printf (buffer, "%s[", range_type == VR_RANGE ? "" : "~"); + pp_double_int (buffer, min, TYPE_UNSIGNED (TREE_TYPE (node))); + pp_printf (buffer, ", "); + pp_double_int (buffer, max, TYPE_UNSIGNED (TREE_TYPE (node))); + pp_printf (buffer, "]"); + newline_and_indent (buffer, spc); + } + } +} + + +/* Dump a PHI node PHI. BUFFER, SPC and FLAGS are as in pp_gimple_stmt_1. + The caller is responsible for calling pp_flush on BUFFER to finalize + pretty printer. */ + +static void +dump_gimple_phi (pretty_printer *buffer, gimple phi, int spc, int flags) +{ + size_t i; + tree lhs = gimple_phi_result (phi); + + if (flags & TDF_ALIAS) + dump_ssaname_info (buffer, lhs, spc); + if (flags & TDF_RAW) dump_gimple_fmt (buffer, spc, flags, "%G <%T, ", phi, gimple_phi_result (phi)); @@ -1908,27 +1940,9 @@ pp_gimple_stmt_1 (pretty_printer *buffer, gimple gs, int spc, int flags) && gimple_has_mem_ops (gs)) dump_gimple_mem_ops (buffer, gs, spc, flags); - if ((flags & TDF_ALIAS) - && gimple_has_lhs (gs)) - { - tree lhs = gimple_get_lhs (gs); - if (TREE_CODE (lhs) == SSA_NAME - && POINTER_TYPE_P (TREE_TYPE (lhs)) - && SSA_NAME_PTR_INFO (lhs)) - { - unsigned int align, misalign; - struct ptr_info_def *pi = SSA_NAME_PTR_INFO (lhs); - pp_string (buffer, "# PT = "); - pp_points_to_solution (buffer, &pi->pt); - newline_and_indent (buffer, spc); - if (get_ptr_info_alignment (pi, &align, &misalign)) - { - pp_printf (buffer, "# ALIGN = %u, MISALIGN = %u", - align, misalign); - newline_and_indent (buffer, spc); - } - } - } + if (gimple_has_lhs (gs) + && (flags & TDF_ALIAS)) + dump_ssaname_info (buffer, gimple_get_lhs (gs), spc); switch (gimple_code (gs)) { |