X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fgimple-pretty-print.c;h=3d3134beaa60863a9dc8872ebc6c5d23721501e9;hb=35474fc1ae8dd9b853fb96eeca9e4e52ebb9e9a2;hp=733a449cacef7fe062ffe7fbca483c8383fa3d9d;hpb=e70f5f27de32c0c447645812e4cb4c99501d3d15;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c index 733a449cace..3d3134beaa6 100644 --- a/gcc/gimple-pretty-print.c +++ b/gcc/gimple-pretty-print.c @@ -508,7 +508,7 @@ dump_gimple_call (pretty_printer *buffer, gimple gs, int spc, int flags) pp_space (buffer); } - dump_generic_node (buffer, gimple_call_fn (gs), spc, flags, false); + print_call_name (buffer, gimple_call_fn (gs), flags); pp_string (buffer, " ("); dump_gimple_call_args (buffer, gs, flags); pp_character (buffer, ')'); @@ -626,6 +626,8 @@ dump_gimple_label (pretty_printer *buffer, gimple gs, int spc, int flags) } if (DECL_NONLOCAL (label)) pp_string (buffer, " [non-local]"); + if ((flags & TDF_EH) && EH_LANDING_PAD_NR (label)) + pp_printf (buffer, " [LP %d]", EH_LANDING_PAD_NR (label)); } /* Dump a GIMPLE_GOTO tuple on the pretty_printer BUFFER, SPC @@ -766,6 +768,21 @@ dump_gimple_eh_filter (pretty_printer *buffer, gimple gs, int spc, int flags) } +/* Dump a GIMPLE_EH_MUST_NOT_THROW tuple. */ + +static void +dump_gimple_eh_must_not_throw (pretty_printer *buffer, gimple gs, + int spc, int flags) +{ + if (flags & TDF_RAW) + dump_gimple_fmt (buffer, spc, flags, "%G <%T>", gs, + gimple_eh_must_not_throw_fndecl (gs)); + else + dump_gimple_fmt (buffer, spc, flags, "<<>>", + gimple_eh_must_not_throw_fndecl (gs)); +} + + /* Dump a GIMPLE_RESX tuple on the pretty_printer BUFFER, SPC spaces of indent. FLAGS specifies details to show in the dump (see TDF_* in tree-pass.h). */ @@ -775,11 +792,49 @@ dump_gimple_resx (pretty_printer *buffer, gimple gs, int spc, int flags) { if (flags & TDF_RAW) dump_gimple_fmt (buffer, spc, flags, "%G <%d>", gs, - gimple_resx_region (gs)); + gimple_resx_region (gs)); else dump_gimple_fmt (buffer, spc, flags, "resx %d", gimple_resx_region (gs)); } +/* Dump a GIMPLE_EH_DISPATCH tuple on the pretty_printer BUFFER. */ + +static void +dump_gimple_eh_dispatch (pretty_printer *buffer, gimple gs, int spc, int flags) +{ + if (flags & TDF_RAW) + dump_gimple_fmt (buffer, spc, flags, "%G <%d>", gs, + gimple_eh_dispatch_region (gs)); + else + dump_gimple_fmt (buffer, spc, flags, "eh_dispatch %d", + gimple_eh_dispatch_region (gs)); +} + +/* Dump a GIMPLE_DEBUG tuple on the pretty_printer BUFFER, SPC spaces + of indent. FLAGS specifies details to show in the dump (see TDF_* + in tree-pass.h). */ + +static void +dump_gimple_debug (pretty_printer *buffer, gimple gs, int spc, int flags) +{ + switch (gs->gsbase.subcode) + { + case GIMPLE_DEBUG_BIND: + if (flags & TDF_RAW) + dump_gimple_fmt (buffer, spc, flags, "%G BIND <%T, %T>", gs, + gimple_debug_bind_get_var (gs), + gimple_debug_bind_get_value (gs)); + else + dump_gimple_fmt (buffer, spc, flags, "# DEBUG %T => %T", + gimple_debug_bind_get_var (gs), + gimple_debug_bind_get_value (gs)); + break; + + default: + gcc_unreachable (); + } +} + /* Dump a GIMPLE_OMP_FOR tuple on the pretty_printer BUFFER. */ static void dump_gimple_omp_for (pretty_printer *buffer, gimple gs, int spc, int flags) @@ -1046,115 +1101,150 @@ dump_gimple_omp_return (pretty_printer *buffer, gimple gs, int spc, int flags) static void dump_gimple_asm (pretty_printer *buffer, gimple gs, int spc, int flags) { - unsigned int i; + unsigned int i, n, f, fields; if (flags & TDF_RAW) - dump_gimple_fmt (buffer, spc, flags, "%G <%+STRING <%n%s%n>", gs, - gimple_asm_string (gs)); - else - { - pp_string (buffer, "__asm__"); - if (gimple_asm_volatile_p (gs)) - pp_string (buffer, " __volatile__"); - pp_string (buffer, "(\""); - pp_string (buffer, gimple_asm_string (gs)); - pp_string (buffer, "\""); - } - - if (gimple_asm_ninputs (gs) - || gimple_asm_noutputs (gs) - || gimple_asm_nclobbers (gs)) { - if (gimple_asm_noutputs (gs)) - { - if (flags & TDF_RAW) - { - newline_and_indent (buffer, spc + 2); - pp_string (buffer, "OUTPUT: "); - } - else - pp_string (buffer, " : "); - } + dump_gimple_fmt (buffer, spc, flags, "%G <%+STRING <%n%s%n>", gs, + gimple_asm_string (gs)); - for (i = 0; i < gimple_asm_noutputs (gs); i++) - { - dump_generic_node (buffer, gimple_asm_output_op (gs, i), spc, flags, - false); - if ( i < gimple_asm_noutputs (gs) -1) - pp_string (buffer, ", "); - } + n = gimple_asm_noutputs (gs); + if (n) + { + newline_and_indent (buffer, spc + 2); + pp_string (buffer, "OUTPUT: "); + for (i = 0; i < n; i++) + { + dump_generic_node (buffer, gimple_asm_output_op (gs, i), + spc, flags, false); + if (i < n - 1) + pp_string (buffer, ", "); + } + } - if (gimple_asm_ninputs (gs)) - { - if (flags & TDF_RAW) - { - newline_and_indent (buffer, spc + 2); - pp_string (buffer, "INPUT: "); - } - else - pp_string (buffer, " : "); - } + n = gimple_asm_ninputs (gs); + if (n) + { + newline_and_indent (buffer, spc + 2); + pp_string (buffer, "INPUT: "); + for (i = 0; i < n; i++) + { + dump_generic_node (buffer, gimple_asm_input_op (gs, i), + spc, flags, false); + if (i < n - 1) + pp_string (buffer, ", "); + } + } - for (i = 0; i < gimple_asm_ninputs (gs); i++) - { - dump_generic_node (buffer, gimple_asm_input_op (gs, i), spc, flags, - false); - if (i < gimple_asm_ninputs (gs) -1) - pp_string (buffer, " : "); - } + n = gimple_asm_nclobbers (gs); + if (n) + { + newline_and_indent (buffer, spc + 2); + pp_string (buffer, "CLOBBER: "); + for (i = 0; i < n; i++) + { + dump_generic_node (buffer, gimple_asm_clobber_op (gs, i), + spc, flags, false); + if (i < n - 1) + pp_string (buffer, ", "); + } + } - if (gimple_asm_nclobbers (gs)) - { - if (flags & TDF_RAW) - { - newline_and_indent (buffer, spc + 2); - pp_string (buffer, "CLOBBER: "); - } - else - pp_string (buffer, " : "); - } + n = gimple_asm_nlabels (gs); + if (n) + { + newline_and_indent (buffer, spc + 2); + pp_string (buffer, "LABEL: "); + for (i = 0; i < n; i++) + { + dump_generic_node (buffer, gimple_asm_label_op (gs, i), + spc, flags, false); + if (i < n - 1) + pp_string (buffer, ", "); + } + } - for (i = 0; i < gimple_asm_nclobbers (gs); i++) - { - dump_generic_node (buffer, gimple_asm_clobber_op (gs, i), spc, flags, - false); - if ( i < gimple_asm_nclobbers (gs) -1) - pp_string (buffer, ", "); - } - } - if (flags & TDF_RAW) - { newline_and_indent (buffer, spc); pp_character (buffer, '>'); } else - pp_string (buffer, ");"); -} + { + pp_string (buffer, "__asm__"); + if (gimple_asm_volatile_p (gs)) + pp_string (buffer, " __volatile__"); + if (gimple_asm_nlabels (gs)) + pp_string (buffer, " goto"); + pp_string (buffer, "(\""); + pp_string (buffer, gimple_asm_string (gs)); + pp_string (buffer, "\""); + if (gimple_asm_nlabels (gs)) + fields = 4; + else if (gimple_asm_nclobbers (gs)) + fields = 3; + else if (gimple_asm_ninputs (gs)) + fields = 2; + else if (gimple_asm_noutputs (gs)) + fields = 1; + else + fields = 0; -/* Dump the set of decls SYMS. BUFFER, SPC and FLAGS are as in - dump_generic_node. */ + for (f = 0; f < fields; ++f) + { + pp_string (buffer, " : "); -static void -dump_symbols (pretty_printer *buffer, bitmap syms, int flags) -{ - unsigned i; - bitmap_iterator bi; + switch (f) + { + case 0: + n = gimple_asm_noutputs (gs); + for (i = 0; i < n; i++) + { + dump_generic_node (buffer, gimple_asm_output_op (gs, i), + spc, flags, false); + if (i < n - 1) + pp_string (buffer, ", "); + } + break; - if (syms == NULL) - pp_string (buffer, "NIL"); - else - { - pp_string (buffer, " { "); + case 1: + n = gimple_asm_ninputs (gs); + for (i = 0; i < n; i++) + { + dump_generic_node (buffer, gimple_asm_input_op (gs, i), + spc, flags, false); + if (i < n - 1) + pp_string (buffer, ", "); + } + break; - EXECUTE_IF_SET_IN_BITMAP (syms, 0, i, bi) - { - tree sym = referenced_var_lookup (i); - dump_generic_node (buffer, sym, 0, flags, false); - pp_character (buffer, ' '); + case 2: + n = gimple_asm_nclobbers (gs); + for (i = 0; i < n; i++) + { + dump_generic_node (buffer, gimple_asm_clobber_op (gs, i), + spc, flags, false); + if (i < n - 1) + pp_string (buffer, ", "); + } + break; + + case 3: + n = gimple_asm_nlabels (gs); + for (i = 0; i < n; i++) + { + dump_generic_node (buffer, gimple_asm_label_op (gs, i), + spc, flags, false); + if (i < n - 1) + pp_string (buffer, ", "); + } + break; + + default: + gcc_unreachable (); + } } - pp_character (buffer, '}'); + pp_string (buffer, ");"); } } @@ -1177,6 +1267,22 @@ dump_gimple_phi (pretty_printer *buffer, gimple phi, int spc, int flags) } for (i = 0; i < gimple_phi_num_args (phi); i++) { + if ((flags & TDF_LINENO) && gimple_phi_arg_has_location (phi, i)) + { + expanded_location xloc; + + xloc = expand_location (gimple_phi_arg_location (phi, i)); + pp_character (buffer, '['); + if (xloc.file) + { + pp_string (buffer, xloc.file); + pp_string (buffer, " : "); + } + pp_decimal_int (buffer, xloc.line); + pp_string (buffer, ":"); + pp_decimal_int (buffer, xloc.column); + pp_string (buffer, "] "); + } dump_generic_node (buffer, gimple_phi_arg_def (phi, i), spc, flags, false); pp_character (buffer, '('); @@ -1351,27 +1457,6 @@ dump_gimple_omp_atomic_store (pretty_printer *buffer, gimple gs, int spc, } } -/* Dump a GIMPLE_CHANGE_DYNAMIC_TYPE statement GS. BUFFER, SPC and - FLAGS are as in dump_gimple_stmt. */ - -static void -dump_gimple_cdt (pretty_printer *buffer, gimple gs, int spc, int flags) -{ - if (flags & TDF_RAW) - dump_gimple_fmt (buffer, spc, flags, "%G <%T, %T>", gs, - gimple_cdt_new_type (gs), gimple_cdt_location (gs)); - else - { - pp_string (buffer, "<<>>"); - } -} - /* Dump all the memory operands for statement GS. BUFFER, SPC and FLAGS are as in dump_gimple_stmt. */ @@ -1379,81 +1464,27 @@ dump_gimple_cdt (pretty_printer *buffer, gimple gs, int spc, int flags) static void dump_gimple_mem_ops (pretty_printer *buffer, gimple gs, int spc, int flags) { - struct voptype_d *vdefs; - struct voptype_d *vuses; - int i, n; + tree vdef = gimple_vdef (gs); + tree vuse = gimple_vuse (gs); if (!ssa_operands_active () || !gimple_references_memory_p (gs)) return; - /* Even if the statement doesn't have virtual operators yet, it may - contain symbol information (this happens before aliases have been - computed). */ - if ((flags & TDF_MEMSYMS) - && gimple_vuse_ops (gs) == NULL - && gimple_vdef_ops (gs) == NULL) - { - if (gimple_loaded_syms (gs)) - { - pp_string (buffer, "# LOADS: "); - dump_symbols (buffer, gimple_loaded_syms (gs), flags); - newline_and_indent (buffer, spc); - } - - if (gimple_stored_syms (gs)) - { - pp_string (buffer, "# STORES: "); - dump_symbols (buffer, gimple_stored_syms (gs), flags); - newline_and_indent (buffer, spc); - } - - return; - } - - vuses = gimple_vuse_ops (gs); - while (vuses) + if (vdef != NULL_TREE) { - pp_string (buffer, "# VUSE <"); - - n = VUSE_NUM (vuses); - for (i = 0; i < n; i++) - { - dump_generic_node (buffer, VUSE_OP (vuses, i), spc + 2, flags, false); - if (i < n - 1) - pp_string (buffer, ", "); - } - + pp_string (buffer, "# "); + dump_generic_node (buffer, vdef, spc + 2, flags, false); + pp_string (buffer, " = VDEF <"); + dump_generic_node (buffer, vuse, spc + 2, flags, false); pp_character (buffer, '>'); - - if (flags & TDF_MEMSYMS) - dump_symbols (buffer, gimple_loaded_syms (gs), flags); - newline_and_indent (buffer, spc); - vuses = vuses->next; } - - vdefs = gimple_vdef_ops (gs); - while (vdefs) + else if (vuse != NULL_TREE) { - pp_string (buffer, "# "); - dump_generic_node (buffer, VDEF_RESULT (vdefs), spc + 2, flags, false); - pp_string (buffer, " = VDEF <"); - - n = VDEF_NUM (vdefs); - for (i = 0; i < n; i++) - { - dump_generic_node (buffer, VDEF_OP (vdefs, i), spc + 2, flags, 0); - if (i < n - 1) - pp_string (buffer, ", "); - } - + pp_string (buffer, "# VUSE <"); + dump_generic_node (buffer, vuse, spc + 2, flags, false); pp_character (buffer, '>'); - - if ((flags & TDF_MEMSYMS) && vdefs->next == NULL) - dump_symbols (buffer, gimple_stored_syms (gs), flags); - newline_and_indent (buffer, spc); - vdefs = vdefs->next; } } @@ -1481,9 +1512,20 @@ dump_gimple_stmt (pretty_printer *buffer, gimple gs, int spc, int flags) pp_string (buffer, " : "); } pp_decimal_int (buffer, xloc.line); + pp_string (buffer, ":"); + pp_decimal_int (buffer, xloc.column); pp_string (buffer, "] "); } + if (flags & TDF_EH) + { + int lp_nr = lookup_stmt_eh_lp (gs); + if (lp_nr > 0) + pp_printf (buffer, "[LP %d] ", lp_nr); + else if (lp_nr < 0) + pp_printf (buffer, "[MNT %d] ", -lp_nr); + } + if ((flags & (TDF_VOPS|TDF_MEMSYMS)) && gimple_has_mem_ops (gs)) dump_gimple_mem_ops (buffer, gs, spc, flags); @@ -1589,10 +1631,6 @@ dump_gimple_stmt (pretty_printer *buffer, gimple gs, int spc, int flags) dump_gimple_omp_critical (buffer, gs, spc, flags); break; - case GIMPLE_CHANGE_DYNAMIC_TYPE: - dump_gimple_cdt (buffer, gs, spc, flags); - break; - case GIMPLE_CATCH: dump_gimple_catch (buffer, gs, spc, flags); break; @@ -1601,10 +1639,22 @@ dump_gimple_stmt (pretty_printer *buffer, gimple gs, int spc, int flags) dump_gimple_eh_filter (buffer, gs, spc, flags); break; + case GIMPLE_EH_MUST_NOT_THROW: + dump_gimple_eh_must_not_throw (buffer, gs, spc, flags); + break; + case GIMPLE_RESX: dump_gimple_resx (buffer, gs, spc, flags); break; + case GIMPLE_EH_DISPATCH: + dump_gimple_eh_dispatch (buffer, gs, spc, flags); + break; + + case GIMPLE_DEBUG: + dump_gimple_debug (buffer, gs, spc, flags); + break; + case GIMPLE_PREDICT: pp_string (buffer, "// predicted "); if (gimple_predict_outcome (gs)) @@ -1658,12 +1708,19 @@ dump_bb_header (pretty_printer *buffer, basic_block bb, int indent, int flags) gimple_stmt_iterator gsi; for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) - if (get_lineno (gsi_stmt (gsi)) != -1) + if (!is_gimple_debug (gsi_stmt (gsi)) + && get_lineno (gsi_stmt (gsi)) != UNKNOWN_LOCATION) { pp_string (buffer, ", starting at line "); pp_decimal_int (buffer, get_lineno (gsi_stmt (gsi))); break; } + + if (bb->discriminator) + { + pp_string (buffer, ", discriminator "); + pp_decimal_int (buffer, bb->discriminator); + } } newline_and_indent (buffer, indent); @@ -1830,6 +1887,8 @@ dump_implicit_edges (pretty_printer *buffer, basic_block bb, int indent, pp_string (buffer, " : "); } pp_decimal_int (buffer, goto_xloc.line); + pp_string (buffer, " : "); + pp_decimal_int (buffer, goto_xloc.column); pp_string (buffer, "] "); }