1998-11-23 17:41:12 +01:00
|
|
|
/* Output routines for graphical representation.
|
2013-01-10 21:38:27 +01:00
|
|
|
Copyright (C) 1998-2013 Free Software Foundation, Inc.
|
1998-11-23 17:41:12 +01:00
|
|
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
2012-11-26 17:47:58 +01:00
|
|
|
Rewritten for DOT output by Steven Bosscher, 2012.
|
1998-11-23 17:41:12 +01:00
|
|
|
|
Makefile.in, [...]: replace "GNU CC" with "GCC".
* Makefile.in, alias.c, basic-block.h, bb-reorder.c, bitmap.c,
bitmap.h, builtin-types.def, builtins.c, builtins.def,
c-aux-info.c, c-common.c, c-common.def, c-common.h,
c-convert.c, c-decl.c, c-dump.c, c-dump.h, c-errors.c,
c-format.c, c-lang.c, c-lex.c, c-lex.h, c-parse.in,
c-pragma.c, c-pragma.h, c-semantics.c, c-tree.h, c-typeck.c,
caller-save.c, calls.c, collect2.c, collect2.h, combine.c,
conditions.h, config.gcc, configure.frag, configure.in,
conflict.c, convert.c, convert.h, cppspec.c, crtstuff.c,
cse.c, cselib.c, cselib.h, dbxout.c, dbxout.h, defaults.h,
dependence.c, df.c, df.h, diagnostic.c, diagnostic.h,
doloop.c, dominance.c, dwarf.h, dwarf2.h, dwarf2asm.c,
dwarf2asm.h, dwarf2out.c, dwarf2out.h, dwarfout.c,
emit-rtl.c, errors.c, errors.h, except.c, except.h,
exgettext, explow.c, expmed.c, expr.c, expr.h, final.c,
fixproto, flags.h, flow.c, fold-const.c, fp-test.c,
function.c, function.h, gbl-ctors.h, gcc.c, gcc.h, gcc.hlp,
gccspec.c, gcov-io.h, gcse.c, genattr.c, genattrtab.c,
gencheck.c, gencodes.c, genconfig.c, genemit.c,
genextract.c, genflags.c, gengenrtl.c, genmultilib,
genopinit.c, genoutput.c, genpeep.c, genrecog.c,
gensupport.c, gensupport.h, ggc-callbacks.c, ggc-common.c,
ggc-none.c, ggc-page.c, ggc-simple.c, ggc.h, global.c,
graph.c, graph.h, gthr-aix.h, gthr-dce.h, gthr-posix.h,
gthr-rtems.h, gthr-single.h, gthr-solaris.h, gthr-vxworks.h,
gthr-win32.h, gthr.h, haifa-sched.c, halfpic.c, halfpic.h,
hard-reg-set.h, hwint.h, ifcvt.c, input.h, insn-addr.h,
integrate.c, integrate.h, jump.c, lcm.c, libgcc2.c,
libgcc2.h, lists.c, local-alloc.c, loop.c, loop.h,
machmode.def, machmode.h, main.c, mbchar.c, mbchar.h,
mips-tdump.c, mips-tfile.c, mklibgcc.in, mkmap-flat.awk,
mkmap-symver.awk, optabs.c, output.h, params.c, params.def,
params.h, predict.c, predict.def, predict.h, prefix.c,
prefix.h, print-rtl.c, print-tree.c, profile.c, protoize.c,
read-rtl.c, real.c, real.h, recog.c, recog.h, reg-stack.c,
regclass.c, regmove.c, regrename.c, regs.h, reload.c,
reload.h, reload1.c, reorg.c, resource.c, resource.h, rtl.c,
rtl.def, rtl.h, rtlanal.c, sbitmap.c, sbitmap.h,
sched-deps.c, sched-ebb.c, sched-int.h, sched-rgn.c,
sched-vis.c, sdbout.c, sdbout.h, sibcall.c, simplify-rtx.c,
ssa-ccp.c, ssa-dce.c, ssa.c, ssa.h, stmt.c, stor-layout.c,
stringpool.c, system.h, timevar.c, timevar.def, timevar.h,
tlink.c, toplev.c, toplev.h, tree.c, tree.def, tree.h,
tsystem.h, unroll.c, unwind-dw2-fde.c, unwind-dw2-fde.h,
unwind-dw2.c, unwind-pe.h, unwind-sjlj.c, unwind.h,
unwind.inc, varasm.c, varray.c, varray.h, xcoffout.c,
xcoffout.h: replace "GNU CC" with "GCC".
From-SVN: r45105
2001-08-22 16:35:51 +02:00
|
|
|
This file is part of GCC.
|
1998-11-23 17:41:12 +01:00
|
|
|
|
Makefile.in, [...]: replace "GNU CC" with "GCC".
* Makefile.in, alias.c, basic-block.h, bb-reorder.c, bitmap.c,
bitmap.h, builtin-types.def, builtins.c, builtins.def,
c-aux-info.c, c-common.c, c-common.def, c-common.h,
c-convert.c, c-decl.c, c-dump.c, c-dump.h, c-errors.c,
c-format.c, c-lang.c, c-lex.c, c-lex.h, c-parse.in,
c-pragma.c, c-pragma.h, c-semantics.c, c-tree.h, c-typeck.c,
caller-save.c, calls.c, collect2.c, collect2.h, combine.c,
conditions.h, config.gcc, configure.frag, configure.in,
conflict.c, convert.c, convert.h, cppspec.c, crtstuff.c,
cse.c, cselib.c, cselib.h, dbxout.c, dbxout.h, defaults.h,
dependence.c, df.c, df.h, diagnostic.c, diagnostic.h,
doloop.c, dominance.c, dwarf.h, dwarf2.h, dwarf2asm.c,
dwarf2asm.h, dwarf2out.c, dwarf2out.h, dwarfout.c,
emit-rtl.c, errors.c, errors.h, except.c, except.h,
exgettext, explow.c, expmed.c, expr.c, expr.h, final.c,
fixproto, flags.h, flow.c, fold-const.c, fp-test.c,
function.c, function.h, gbl-ctors.h, gcc.c, gcc.h, gcc.hlp,
gccspec.c, gcov-io.h, gcse.c, genattr.c, genattrtab.c,
gencheck.c, gencodes.c, genconfig.c, genemit.c,
genextract.c, genflags.c, gengenrtl.c, genmultilib,
genopinit.c, genoutput.c, genpeep.c, genrecog.c,
gensupport.c, gensupport.h, ggc-callbacks.c, ggc-common.c,
ggc-none.c, ggc-page.c, ggc-simple.c, ggc.h, global.c,
graph.c, graph.h, gthr-aix.h, gthr-dce.h, gthr-posix.h,
gthr-rtems.h, gthr-single.h, gthr-solaris.h, gthr-vxworks.h,
gthr-win32.h, gthr.h, haifa-sched.c, halfpic.c, halfpic.h,
hard-reg-set.h, hwint.h, ifcvt.c, input.h, insn-addr.h,
integrate.c, integrate.h, jump.c, lcm.c, libgcc2.c,
libgcc2.h, lists.c, local-alloc.c, loop.c, loop.h,
machmode.def, machmode.h, main.c, mbchar.c, mbchar.h,
mips-tdump.c, mips-tfile.c, mklibgcc.in, mkmap-flat.awk,
mkmap-symver.awk, optabs.c, output.h, params.c, params.def,
params.h, predict.c, predict.def, predict.h, prefix.c,
prefix.h, print-rtl.c, print-tree.c, profile.c, protoize.c,
read-rtl.c, real.c, real.h, recog.c, recog.h, reg-stack.c,
regclass.c, regmove.c, regrename.c, regs.h, reload.c,
reload.h, reload1.c, reorg.c, resource.c, resource.h, rtl.c,
rtl.def, rtl.h, rtlanal.c, sbitmap.c, sbitmap.h,
sched-deps.c, sched-ebb.c, sched-int.h, sched-rgn.c,
sched-vis.c, sdbout.c, sdbout.h, sibcall.c, simplify-rtx.c,
ssa-ccp.c, ssa-dce.c, ssa.c, ssa.h, stmt.c, stor-layout.c,
stringpool.c, system.h, timevar.c, timevar.def, timevar.h,
tlink.c, toplev.c, toplev.h, tree.c, tree.def, tree.h,
tsystem.h, unroll.c, unwind-dw2-fde.c, unwind-dw2-fde.h,
unwind-dw2.c, unwind-pe.h, unwind-sjlj.c, unwind.h,
unwind.inc, varasm.c, varray.c, varray.h, xcoffout.c,
xcoffout.h: replace "GNU CC" with "GCC".
From-SVN: r45105
2001-08-22 16:35:51 +02:00
|
|
|
GCC is free software; you can redistribute it and/or modify it under
|
|
|
|
the terms of the GNU General Public License as published by the Free
|
2007-07-26 10:37:01 +02:00
|
|
|
Software Foundation; either version 3, or (at your option) any later
|
Makefile.in, [...]: replace "GNU CC" with "GCC".
* Makefile.in, alias.c, basic-block.h, bb-reorder.c, bitmap.c,
bitmap.h, builtin-types.def, builtins.c, builtins.def,
c-aux-info.c, c-common.c, c-common.def, c-common.h,
c-convert.c, c-decl.c, c-dump.c, c-dump.h, c-errors.c,
c-format.c, c-lang.c, c-lex.c, c-lex.h, c-parse.in,
c-pragma.c, c-pragma.h, c-semantics.c, c-tree.h, c-typeck.c,
caller-save.c, calls.c, collect2.c, collect2.h, combine.c,
conditions.h, config.gcc, configure.frag, configure.in,
conflict.c, convert.c, convert.h, cppspec.c, crtstuff.c,
cse.c, cselib.c, cselib.h, dbxout.c, dbxout.h, defaults.h,
dependence.c, df.c, df.h, diagnostic.c, diagnostic.h,
doloop.c, dominance.c, dwarf.h, dwarf2.h, dwarf2asm.c,
dwarf2asm.h, dwarf2out.c, dwarf2out.h, dwarfout.c,
emit-rtl.c, errors.c, errors.h, except.c, except.h,
exgettext, explow.c, expmed.c, expr.c, expr.h, final.c,
fixproto, flags.h, flow.c, fold-const.c, fp-test.c,
function.c, function.h, gbl-ctors.h, gcc.c, gcc.h, gcc.hlp,
gccspec.c, gcov-io.h, gcse.c, genattr.c, genattrtab.c,
gencheck.c, gencodes.c, genconfig.c, genemit.c,
genextract.c, genflags.c, gengenrtl.c, genmultilib,
genopinit.c, genoutput.c, genpeep.c, genrecog.c,
gensupport.c, gensupport.h, ggc-callbacks.c, ggc-common.c,
ggc-none.c, ggc-page.c, ggc-simple.c, ggc.h, global.c,
graph.c, graph.h, gthr-aix.h, gthr-dce.h, gthr-posix.h,
gthr-rtems.h, gthr-single.h, gthr-solaris.h, gthr-vxworks.h,
gthr-win32.h, gthr.h, haifa-sched.c, halfpic.c, halfpic.h,
hard-reg-set.h, hwint.h, ifcvt.c, input.h, insn-addr.h,
integrate.c, integrate.h, jump.c, lcm.c, libgcc2.c,
libgcc2.h, lists.c, local-alloc.c, loop.c, loop.h,
machmode.def, machmode.h, main.c, mbchar.c, mbchar.h,
mips-tdump.c, mips-tfile.c, mklibgcc.in, mkmap-flat.awk,
mkmap-symver.awk, optabs.c, output.h, params.c, params.def,
params.h, predict.c, predict.def, predict.h, prefix.c,
prefix.h, print-rtl.c, print-tree.c, profile.c, protoize.c,
read-rtl.c, real.c, real.h, recog.c, recog.h, reg-stack.c,
regclass.c, regmove.c, regrename.c, regs.h, reload.c,
reload.h, reload1.c, reorg.c, resource.c, resource.h, rtl.c,
rtl.def, rtl.h, rtlanal.c, sbitmap.c, sbitmap.h,
sched-deps.c, sched-ebb.c, sched-int.h, sched-rgn.c,
sched-vis.c, sdbout.c, sdbout.h, sibcall.c, simplify-rtx.c,
ssa-ccp.c, ssa-dce.c, ssa.c, ssa.h, stmt.c, stor-layout.c,
stringpool.c, system.h, timevar.c, timevar.def, timevar.h,
tlink.c, toplev.c, toplev.h, tree.c, tree.def, tree.h,
tsystem.h, unroll.c, unwind-dw2-fde.c, unwind-dw2-fde.h,
unwind-dw2.c, unwind-pe.h, unwind-sjlj.c, unwind.h,
unwind.inc, varasm.c, varray.c, varray.h, xcoffout.c,
xcoffout.h: replace "GNU CC" with "GCC".
From-SVN: r45105
2001-08-22 16:35:51 +02:00
|
|
|
version.
|
1998-11-23 17:41:12 +01:00
|
|
|
|
Makefile.in, [...]: replace "GNU CC" with "GCC".
* Makefile.in, alias.c, basic-block.h, bb-reorder.c, bitmap.c,
bitmap.h, builtin-types.def, builtins.c, builtins.def,
c-aux-info.c, c-common.c, c-common.def, c-common.h,
c-convert.c, c-decl.c, c-dump.c, c-dump.h, c-errors.c,
c-format.c, c-lang.c, c-lex.c, c-lex.h, c-parse.in,
c-pragma.c, c-pragma.h, c-semantics.c, c-tree.h, c-typeck.c,
caller-save.c, calls.c, collect2.c, collect2.h, combine.c,
conditions.h, config.gcc, configure.frag, configure.in,
conflict.c, convert.c, convert.h, cppspec.c, crtstuff.c,
cse.c, cselib.c, cselib.h, dbxout.c, dbxout.h, defaults.h,
dependence.c, df.c, df.h, diagnostic.c, diagnostic.h,
doloop.c, dominance.c, dwarf.h, dwarf2.h, dwarf2asm.c,
dwarf2asm.h, dwarf2out.c, dwarf2out.h, dwarfout.c,
emit-rtl.c, errors.c, errors.h, except.c, except.h,
exgettext, explow.c, expmed.c, expr.c, expr.h, final.c,
fixproto, flags.h, flow.c, fold-const.c, fp-test.c,
function.c, function.h, gbl-ctors.h, gcc.c, gcc.h, gcc.hlp,
gccspec.c, gcov-io.h, gcse.c, genattr.c, genattrtab.c,
gencheck.c, gencodes.c, genconfig.c, genemit.c,
genextract.c, genflags.c, gengenrtl.c, genmultilib,
genopinit.c, genoutput.c, genpeep.c, genrecog.c,
gensupport.c, gensupport.h, ggc-callbacks.c, ggc-common.c,
ggc-none.c, ggc-page.c, ggc-simple.c, ggc.h, global.c,
graph.c, graph.h, gthr-aix.h, gthr-dce.h, gthr-posix.h,
gthr-rtems.h, gthr-single.h, gthr-solaris.h, gthr-vxworks.h,
gthr-win32.h, gthr.h, haifa-sched.c, halfpic.c, halfpic.h,
hard-reg-set.h, hwint.h, ifcvt.c, input.h, insn-addr.h,
integrate.c, integrate.h, jump.c, lcm.c, libgcc2.c,
libgcc2.h, lists.c, local-alloc.c, loop.c, loop.h,
machmode.def, machmode.h, main.c, mbchar.c, mbchar.h,
mips-tdump.c, mips-tfile.c, mklibgcc.in, mkmap-flat.awk,
mkmap-symver.awk, optabs.c, output.h, params.c, params.def,
params.h, predict.c, predict.def, predict.h, prefix.c,
prefix.h, print-rtl.c, print-tree.c, profile.c, protoize.c,
read-rtl.c, real.c, real.h, recog.c, recog.h, reg-stack.c,
regclass.c, regmove.c, regrename.c, regs.h, reload.c,
reload.h, reload1.c, reorg.c, resource.c, resource.h, rtl.c,
rtl.def, rtl.h, rtlanal.c, sbitmap.c, sbitmap.h,
sched-deps.c, sched-ebb.c, sched-int.h, sched-rgn.c,
sched-vis.c, sdbout.c, sdbout.h, sibcall.c, simplify-rtx.c,
ssa-ccp.c, ssa-dce.c, ssa.c, ssa.h, stmt.c, stor-layout.c,
stringpool.c, system.h, timevar.c, timevar.def, timevar.h,
tlink.c, toplev.c, toplev.h, tree.c, tree.def, tree.h,
tsystem.h, unroll.c, unwind-dw2-fde.c, unwind-dw2-fde.h,
unwind-dw2.c, unwind-pe.h, unwind-sjlj.c, unwind.h,
unwind.inc, varasm.c, varray.c, varray.h, xcoffout.c,
xcoffout.h: replace "GNU CC" with "GCC".
From-SVN: r45105
2001-08-22 16:35:51 +02:00
|
|
|
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
|
|
for more details.
|
1998-11-23 17:41:12 +01:00
|
|
|
|
diagnostic.h (set_internal_error_function): Renamed.
* diagnostic.h (set_internal_error_function): Renamed.
* toplev.h (internal_error): Renamed from fatal.
(pfatal_with_name): Deleted.
(fatal_io_error): Now has printf-style arguments.
* diagnostic.c (pfatal_with_name): Deleted.
(fatal_io_error): Rework to have args in printf-style.
(set_internal_error_function): Renamed from set_fatal_function.
(internal_error): Renamed from fatal.
(error_recursion, fancy_abort): Call internal_error instead of fatal.
* dwarf2out.c (get_cfa_from_loc_descr): Likewise.
* emit-rtl.c (gen_realpart, gen_imagpart): Likewise.
* expr.c (check_max_integer_computation_mode, expand_expr): Likewise.
* flow.c (verify_flow_info): Likewise.
* config/arm/arm.c (thumb_unexpanded_epilogue): Likewise.
* config/mips/mips.c (save_restore_insns): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
(dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/expr.c (java_lang_expand_expr): Likewise.
* java/jcf-parse.c (get_constant): Likewise.
* java/mangle.c (java_mangle_decl): Likewise.
* java/parse.y (make_nested_class_name, java_complete_lhs): Likewise.
(operator_string): Likewise.
* except.c (duplicate_eh_handlers): Call abort instead of fatal.
* flow.c (verify_flow_info): Likewise.
* ch/convert.c (convert): Likewise.
* ch/except.c (pop_handler, chill_check_no_handlers): Likewise.
* ch/expr.c (chill_expand_expr): Likewise.
* ch/parse.c (peek_token_, pushback_token, require): Likewise.
* config/arm/arm.c (thumb_load_double_from_address): Likewise.
* config/avr/avr.c (pttreg_to_str, unique_section): Likewise.
(avr_normalize_condition): Likewise.
* config/c4x/c4x.c (c4x_emit_libcall, c4x_valid_operands): Likewise.
* config/dsp16xx/dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise.
(limit_reload_class, double_reg_to_memory): Likewise.
(print_operand_address, emit_1600_code_shift): Likewise.
(gen_tst_reg, gen_compare_reg): Likewise.
* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
* cp/decl.c (pushdecl): Likewise.
* java/check-init.c (check_init): Likewise.
* java/class.c (build_class_ref): Likewise.
* java/constants.c (write_constant_pool): Likewise.
* java/decl.c (start_java_method): Likewise.
* java/expr.c (push_type, java_stack_pop, java_stack_swap): Likewise.
(java_stack_dup, encode_newarray_type): Likewise.
(build_java_array_length_access): Likewise.
(build_java_check_indexed_type, expand_java_pushc): Likewise.
(build_java_soft_divmod, build_invokeinterface): Likewise.
* java/java-tree.h (INNER_CLASS_P): Likewise.
* java/jcf-parse.c (parse_signature, get_name_constant): Likewise.
(give_name_to_class, get_class_constant): Likewise.
* java/jcf-write.c (CHECK_PUT, CHECK_OP, get_access_flags): Likewise.
(find_constant_index, generate_bytecode_conditional): Likewise.
(generate_bytecode_insns, perform_relocations): Likewise.
* java/lex.c (java_unget_unicode, java_lex): Likewise.
* java/mangle.c (mangle_type, mangle_record_type): Likewise.
(mangle_pointer_type, mangle_array_type, init_mangling): Likewise.
(finish_mangling): Likewise.
* java/parse.h (MARK_FINAL_PARMS): Likewise.
* java/parse.y (pop_current_osb, unreachable_stmt_error): Likewise.
(obtain_incomplete_type, java_complete_class): Likewise.
(java_check_regular_methods, java_complete_expand_method): Likewise.
(cut_identifier_in_qualified, check_deprecation): Likewise.
(patch_invoke, find_applicable_accessible_methods_list): Likewise.
(java_complete_lhs, lookup_name_in_blocks): Likewise.
(check_final_variable_indirect_assignment, build_unaryop): Likewise.
* java/typeck.c (set_local_type, parse_signature_type): Likewise.
(parse_signature_string, build_java_signature): Likewise;
(set_java_signature): Likewise.
* java/verify.c (type_stack_dup, CHECK_PC_IN_RANGE): Likewise.
* c-parse.in (methoddef): Call fatal_error instead of fatal.
* objc/objc-act.c (build_ivar_chain): Likewise.
* cp/except.c (decl_is_java_type): Likewise.
* cp/init.c (build_java_class_ref): Likewise.
* cp/init.c (build_new_1): Likewise.
* f/com.c (ffecom_init_0): Likewise.
* java/class.c (add_method, build_static_field_ref): Likewise.
* java/expr.c (build_known_method_ref, expand_invoke): Likewise.
* java/jcf-parse.c (get_constant, jcf_parse): Likewise.
* java/lex.c (java_new_new_lexer): Likewise.
* java/jv-scan.c (main): Likewise.
(fatal_error): Renamed from fatal.
* dwarfout.c (dwarfout_init): Call fatal_io_error instead of
pfatal_with_name.
* graph.c (clean_graph_dump_file): Likewise.
* profile.c (init_branch_prob): Likewise.
* ch/grant.c (write_grant_file): Likewise.
* ch/lex.c (init_parse, same_file, yywrap): Likewise.
* f/com.c (init_parse): Likewise.
* java/jcf-parse.c (yyparse): Likewise.
* objc/objc-act.c (objc_init): Likewise.
* java/jcf-parse.c (jcf_parse_source): Call fatal_io_error, not fatal.
(yyparse): Likewise.
* java/jcf-write.c (make_class_file_name, write_classfile): Likewise.
* java/lex.c (java_get_line_col): Likewise.
* hash.c (hash_allocate): Don't check for failure returns from
obstack functions that can't fail.
(hash_table_init_n, hash_table_init): Likewise; also now return void.
* hash.h (hash_table_init_n, hash_table_init): Now return void.
* cp/decl.c (build_typename_type): hash_table_init now returns void.
* ch/lang.c (GNU_xref_begin, GNU_xref_end): Deleted.
* ch/lex.c (convert_bitstring): Delete check for alloca failure.
* config/dsp16xx/dsp16xx.c (dsp16xx_invalid_register_for_compare):
Deleted.
* config/dsp16xx/dsp16xx.md (unnamed cmphi): Call abort instead of it.
* f/com.c (ffecom_decode_include_option_): Make errors non-fatal.
* f/lex.c (ffelex_cfelex_, ffelex_get_directive_line_): Likewise.
(ffelex_hash_): Likewise.
* config/arm/arm.c (arm_override_options): Likewise.
* config/avr/avr.c (avr_override_options): Likewise.
* config/c4x/c4x.c (c4x_expand_prologue): Likewise.
* config/dsp16xx/dsp16xx.c (function_prologue): Likewise.
* config/h8300/h8300.c (h8300_init_once): Likewise.
* config/mips/mips.c (override_options): Likewise.
* config/i386/i386.c (override_options): Likewise, rework.
* config/m68k/m68k.c (override_options): Likewise.
* cp/decl.c (init_decl_processing): Likewise.
* java/jcf-parse.c (load_class): Likewise.
* config/dsp16xx/dsp16xx.c (print_operand): Call output_operand_lossage
instead of fatal.
* config/mips/mips.c (print_operand): Likewise.
* java/lex.c (byteswap_init, need_byteswap): Only #ifdef HAVE_ICONV.
* objc/objc_act.c (objc_check_decl): Remove unneeded fatal call.
(get_object_reference): Likewise.
From-SVN: r39443
2001-02-04 23:44:12 +01:00
|
|
|
You should have received a copy of the GNU General Public License
|
2007-07-26 10:37:01 +02:00
|
|
|
along with GCC; see the file COPYING3. If not see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
1998-11-23 17:41:12 +01:00
|
|
|
|
system.h: Include "safe-ctype.h" instead of <safe-ctype.h>.
* system.h: Include "safe-ctype.h" instead of <safe-ctype.h>.
Include <signal.h>, <sys/mman.h>, <sys/resource.h> and
<sys/times.h>.
(O_BINARY, SIGCHLD, MAP_FAILED, MAP_ANONYMOUS, kill):
Conditionally define.
(GET_ENVIRONMENT): Poison.
* configure.ac: Don't test for mincore.
* configure: Regenerate.
* config.in: Regenerate.
* collect2-aix.c: Don't include <sys/mman.h>.
* collect2.c: Don't include <signal.h>.
(SIGCHLD): Don't define.
(prefix_from_env): Use getenv instead of GET_ENVIRONMENT.
* config/alpha/alpha.c: Include "splay-tree.h" instead of
<splay-tree.h>.
* config/arm/arm.c (arm_target_help): Use getenv instead of
GET_ENVIRONMENT.
* config/avr/driver-avr.c: Don't include <stdlib.h>.
* config/frv/frv.c: Don't include <ctype.h>.
* config/host-darwin.c: Don't include <sys/mman.h>.
* config/host-hpux.c: Don't include <sys/mman.h> or <unistd.h>.
(MAP_FAILED): Don't define.
* config/host-linux.c: Don't include <sys/mman.h> or <limits.h>.
* config/host-solaris.c: Don't include <sys/mman.h>.
* config/i386/cygming.h: Don't include <stdio.h>.
* config/i386/driver-i386.c: Don't include <stdlib.h>.
* config/i386/host-cygwin.c: Don't include <sys/mman.h>.
* config/iq2000/iq2000.c: Don't include <signal.h>.
* config/m32c/m32c-pragma.c: Don't include <stdio.h>.
* config/m68hc11/m68hc11.c: Don't include <stdio.h>.
* config/mep/mep-pragma.c: Don't include <stdio.h>.
* config/microblaze/microblaze.c: Don't include <signal.h>.
* config/mips/mips.c: Don't include <signal.h>.
* config/rs6000/host-darwin.c: Don't include <signal.h>.
* cppdefault.c (cpp_relocated): Use getenv instead of
GET_ENVIRONMENT.
* defaults.h (GET_ENVIRONMENT): Don't define.
* et-forest.h: Don't include <ansidecl.h> or <stddef.h>.
* gcc.c: Don't include <signal.h>, <sys/mman.h> or <sys/types.h>.
(SIGCHLD, MAP_FAILED, kill): Don't define.
(process_command): Use getenv instead of GET_ENVIRONMENT.
* genhooks.c: Don't include <string.h>.
* ggc-common.c: Don't include <sys/resource.h>, <sys/mman.h> or
<sys/types.h>.
(MAP_FAILED): Don't define.
* ggc-page.c Don't include <sys/mman.h>.
(MAP_ANONYMOUS, MAP_FAILED): Don't define.
* ggc-zone.c: Don't include <sys/mman.h>.
(MAP_ANONYMOUS, MAP_FAILED): Don't define.
* graph.c: Include "config.h" instead of <config.h>.
* incpath.c (add_env_var_paths): Use getenv instead of
GET_ENVIRONMENT.
* lto-wrapper.c: Don't include <errno.h>, <signal.h> or
"libiberty.h".
(SIGCHLD, kill): Don't define.
* mips-tfile.c: Don't include <signal.h>.
* opts.c: Don't include <signal.h> or <sys/resource.h>.
(print_specific_help): Use getenv instead of GET_ENVIRONMENT.
* passes.c: Don't include <signal.h>, <sys/resource.h> or
<sys/times.h>.
* sparseset.h: Don't include <assert.h>.
* timevar.c: Don't include <sys/times.h> or <sys/resource.h>.
* tlink.c: Don't include "libiberty.h".
* toplev.c: Don't include <signal.h> or <sys/times.h>.
* tree-mudflap.c: Include "demangle.h" instead of <demangle.h>.
* tree-switch-conversion.c: Don't include <signal.h>.
* vmsdbgout.c: Don't include <errno.h> or <string.h>.
c-family:
* c-opts.c (check_deps_environment_vars): Use getenv instead of
GET_ENVIRONMENT.
* c-pch.c (O_BINARY): Don't define here.
* c-pragma.h: Include "cpplib.h" instead of <cpplib.h>.
fortran:
* gfortran.h (alloca): Don't include definitions.
(NULL): Don't define.
java:
* boehm.c: Include "config.h" instead of <config.h>.
* builtins.c: Don't include <stdarg.h>.
* class.c: Don't include "stdio.h".
(O_BINARY): Don't define here.
* jcf-depend.c: Don't include <assert.h>.
(jcf_dependency_set_dep_file, jcf_dependency_init,
jcf_dependency_write): Use gcc_assert.
* jcf-io.c (O_BINARY): Don't define here.
* jcf-path.c: Don't include "tm.h".
(jcf_path_init): Use getenv instead of GET_ENVIRONMENT.
* resource.c: Don't include "stdio.h".
(O_BINARY): Don't define here.
* verify-impl.c: Don't include <stdio.h>.
lto:
* lto-endian.h: Delete.
* lto-object.c: Don't include "libiberty.h".
(O_BINARY): Don't define.
* lto.c: Don't include "libiberty.h" or <sys/mman.h>.
(O_BINARY): Don't define.
From-SVN: r167241
2010-11-29 15:09:41 +01:00
|
|
|
#include "config.h"
|
1998-11-23 17:41:12 +01:00
|
|
|
#include "system.h"
|
2002-12-16 19:23:00 +01:00
|
|
|
#include "coretypes.h"
|
2012-11-26 17:47:58 +01:00
|
|
|
#include "diagnostic-core.h" /* for fatal_error */
|
2012-12-12 14:21:41 +01:00
|
|
|
#include "sbitmap.h"
|
1998-11-23 17:41:12 +01:00
|
|
|
#include "basic-block.h"
|
2012-12-12 14:21:41 +01:00
|
|
|
#include "cfgloop.h"
|
1999-10-02 22:13:24 +02:00
|
|
|
#include "graph.h"
|
2012-12-03 14:16:55 +01:00
|
|
|
#include "dumpfile.h"
|
2012-11-30 10:46:02 +01:00
|
|
|
#include "pretty-print.h"
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
/* DOT files with the .dot extension are recognized as document templates
|
|
|
|
by a well-known piece of word processing software out of Redmond, WA.
|
|
|
|
Therefore some recommend using the .gv extension instead. Obstinately
|
2012-12-12 14:21:41 +01:00
|
|
|
ignore that recommendation... */
|
2012-11-26 17:47:58 +01:00
|
|
|
static const char *const graph_ext = ".dot";
|
2010-10-14 03:48:43 +02:00
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
/* Open a file with MODE for dumping our graph to.
|
|
|
|
Return the file pointer. */
|
|
|
|
static FILE *
|
|
|
|
open_graph_file (const char *base, const char *mode)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
size_t namelen = strlen (base);
|
|
|
|
size_t extlen = strlen (graph_ext) + 1;
|
|
|
|
char *buf = XALLOCAVEC (char, namelen + extlen);
|
|
|
|
FILE *fp;
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
memcpy (buf, base, namelen);
|
|
|
|
memcpy (buf + namelen, graph_ext, extlen);
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
fp = fopen (buf, mode);
|
|
|
|
if (fp == NULL)
|
|
|
|
fatal_error ("can%'t open %s: %m", buf);
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
return fp;
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
|
|
|
|
2012-11-30 10:46:02 +01:00
|
|
|
/* Return a pretty-print buffer for output to file FP. */
|
|
|
|
|
|
|
|
static pretty_printer *
|
|
|
|
init_graph_slim_pretty_print (FILE *fp)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-30 10:46:02 +01:00
|
|
|
static bool initialized = false;
|
|
|
|
static pretty_printer graph_slim_pp;
|
2012-11-26 17:47:58 +01:00
|
|
|
|
2012-11-30 10:46:02 +01:00
|
|
|
if (! initialized)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_construct (&graph_slim_pp, /*prefix=*/NULL, /*linewidth=*/0);
|
|
|
|
initialized = true;
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
2012-11-30 10:46:02 +01:00
|
|
|
else
|
|
|
|
gcc_assert (! pp_last_position_in_text (&graph_slim_pp));
|
|
|
|
|
|
|
|
graph_slim_pp.buffer->stream = fp;
|
|
|
|
return &graph_slim_pp;
|
2012-11-26 17:47:58 +01:00
|
|
|
}
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-12-04 19:38:26 +01:00
|
|
|
/* Draw a basic block BB belonging to the function with FUNCDEF_NO
|
2012-11-26 17:47:58 +01:00
|
|
|
as its unique number. */
|
|
|
|
static void
|
2012-12-04 19:38:26 +01:00
|
|
|
draw_cfg_node (pretty_printer *pp, int funcdef_no, basic_block bb)
|
2012-11-26 17:47:58 +01:00
|
|
|
{
|
|
|
|
const char *shape;
|
|
|
|
const char *fillcolor;
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
if (bb->index == ENTRY_BLOCK || bb->index == EXIT_BLOCK)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
shape = "Mdiamond";
|
|
|
|
fillcolor = "white";
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
shape = "record";
|
|
|
|
fillcolor =
|
|
|
|
BB_PARTITION (bb) == BB_HOT_PARTITION ? "lightpink"
|
|
|
|
: BB_PARTITION (bb) == BB_COLD_PARTITION ? "lightblue"
|
|
|
|
: "lightgrey";
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
|
|
|
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_printf (pp,
|
|
|
|
"\tfn_%d_basic_block_%d "
|
|
|
|
"[shape=%s,style=filled,fillcolor=%s,label=\"",
|
2012-12-04 19:38:26 +01:00
|
|
|
funcdef_no, bb->index, shape, fillcolor);
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
if (bb->index == ENTRY_BLOCK)
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_string (pp, "ENTRY");
|
2012-11-26 17:47:58 +01:00
|
|
|
else if (bb->index == EXIT_BLOCK)
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_string (pp, "EXIT");
|
2012-11-26 17:47:58 +01:00
|
|
|
else
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_character (pp, '{');
|
|
|
|
pp_write_text_to_stream (pp);
|
2012-12-04 19:38:26 +01:00
|
|
|
dump_bb_for_graph (pp, bb);
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_character (pp, '}');
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
2012-11-26 17:47:58 +01:00
|
|
|
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_string (pp, "\"];\n\n");
|
|
|
|
pp_flush (pp);
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
/* Draw all successor edges of a basic block BB belonging to the function
|
2012-12-04 19:38:26 +01:00
|
|
|
with FUNCDEF_NO as its unique number. */
|
1998-11-23 17:41:12 +01:00
|
|
|
static void
|
2012-12-04 19:38:26 +01:00
|
|
|
draw_cfg_node_succ_edges (pretty_printer *pp, int funcdef_no, basic_block bb)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
edge e;
|
|
|
|
edge_iterator ei;
|
|
|
|
FOR_EACH_EDGE (e, ei, bb->succs)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
const char *style = "\"solid,bold\"";
|
|
|
|
const char *color = "black";
|
|
|
|
int weight = 10;
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
if (e->flags & EDGE_FAKE)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
style = "dotted";
|
|
|
|
color = "green";
|
|
|
|
weight = 0;
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
2012-11-26 17:47:58 +01:00
|
|
|
else if (e->flags & EDGE_DFS_BACK)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
style = "\"dotted,bold\"";
|
|
|
|
color = "blue";
|
|
|
|
weight = 10;
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
2012-11-26 17:47:58 +01:00
|
|
|
else if (e->flags & EDGE_FALLTHRU)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
color = "blue";
|
|
|
|
weight = 100;
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
if (e->flags & EDGE_ABNORMAL)
|
|
|
|
color = "red";
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_printf (pp,
|
|
|
|
"\tfn_%d_basic_block_%d:s -> fn_%d_basic_block_%d:n "
|
|
|
|
"[style=%s,color=%s,weight=%d,constraint=%s];\n",
|
2012-12-04 19:38:26 +01:00
|
|
|
funcdef_no, e->src->index,
|
|
|
|
funcdef_no, e->dest->index,
|
2012-11-30 10:46:02 +01:00
|
|
|
style, color, weight,
|
|
|
|
(e->flags & (EDGE_FAKE | EDGE_DFS_BACK)) ? "false" : "true");
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_flush (pp);
|
2012-11-26 17:47:58 +01:00
|
|
|
}
|
|
|
|
|
2012-12-12 14:21:41 +01:00
|
|
|
/* Draw all the basic blocks in the CFG in case loops are not available.
|
|
|
|
First compute a topological order of the blocks to get a good ranking of
|
|
|
|
the nodes. Then, if any nodes are not reachable from ENTRY, add them at
|
|
|
|
the end. */
|
2012-12-03 14:16:55 +01:00
|
|
|
|
2012-12-12 14:21:41 +01:00
|
|
|
static void
|
|
|
|
draw_cfg_nodes_no_loops (pretty_printer *pp, struct function *fun)
|
2012-11-26 17:47:58 +01:00
|
|
|
{
|
2012-12-12 14:21:41 +01:00
|
|
|
int *rpo = XNEWVEC (int, n_basic_blocks_for_function (fun));
|
2012-11-26 17:47:58 +01:00
|
|
|
int i, n;
|
2012-12-12 14:21:41 +01:00
|
|
|
sbitmap visited;
|
2012-11-26 17:47:58 +01:00
|
|
|
|
2012-12-12 14:21:41 +01:00
|
|
|
visited = sbitmap_alloc (last_basic_block);
|
|
|
|
bitmap_clear (visited);
|
2012-11-26 17:47:58 +01:00
|
|
|
|
2012-12-12 14:21:41 +01:00
|
|
|
/* FIXME: pre_and_rev_post_order_compute only works if fun == cfun. */
|
2012-11-26 17:47:58 +01:00
|
|
|
n = pre_and_rev_post_order_compute (NULL, rpo, true);
|
|
|
|
for (i = 0; i < n; i++)
|
2012-12-12 14:21:41 +01:00
|
|
|
{
|
|
|
|
basic_block bb = BASIC_BLOCK (rpo[i]);
|
|
|
|
draw_cfg_node (pp, fun->funcdef_no, bb);
|
|
|
|
bitmap_set_bit (visited, bb->index);
|
|
|
|
}
|
|
|
|
free (rpo);
|
2012-11-26 17:47:58 +01:00
|
|
|
|
2012-12-12 14:21:41 +01:00
|
|
|
if (n != n_basic_blocks_for_function (fun))
|
|
|
|
{
|
|
|
|
/* Some blocks are unreachable. We still want to dump them. */
|
|
|
|
basic_block bb;
|
|
|
|
FOR_ALL_BB_FN (bb, fun)
|
|
|
|
if (! bitmap_bit_p (visited, bb->index))
|
|
|
|
draw_cfg_node (pp, fun->funcdef_no, bb);
|
|
|
|
}
|
|
|
|
|
|
|
|
sbitmap_free (visited);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Draw all the basic blocks in LOOP. Print the blocks in breath-first
|
|
|
|
order to get a good ranking of the nodes. This function is recursive:
|
|
|
|
It first prints inner loops, then the body of LOOP itself. */
|
2012-11-26 17:47:58 +01:00
|
|
|
|
2012-12-12 14:21:41 +01:00
|
|
|
static void
|
|
|
|
draw_cfg_nodes_for_loop (pretty_printer *pp, int funcdef_no,
|
|
|
|
struct loop *loop)
|
|
|
|
{
|
|
|
|
basic_block *body;
|
|
|
|
unsigned int i;
|
|
|
|
const char *fillcolors[3] = { "grey88", "grey77", "grey66" };
|
|
|
|
|
2013-03-20 10:03:06 +01:00
|
|
|
if (loop->header != NULL
|
|
|
|
&& loop->latch != EXIT_BLOCK_PTR)
|
2012-12-12 14:21:41 +01:00
|
|
|
pp_printf (pp,
|
|
|
|
"\tsubgraph cluster_%d_%d {\n"
|
|
|
|
"\tstyle=\"filled\";\n"
|
|
|
|
"\tcolor=\"darkgreen\";\n"
|
|
|
|
"\tfillcolor=\"%s\";\n"
|
|
|
|
"\tlabel=\"loop %d\";\n"
|
|
|
|
"\tlabeljust=l;\n"
|
|
|
|
"\tpenwidth=2;\n",
|
|
|
|
funcdef_no, loop->num,
|
|
|
|
fillcolors[(loop_depth (loop) - 1) % 3],
|
|
|
|
loop->num);
|
|
|
|
|
|
|
|
for (struct loop *inner = loop->inner; inner; inner = inner->next)
|
|
|
|
draw_cfg_nodes_for_loop (pp, funcdef_no, inner);
|
|
|
|
|
2013-03-20 10:03:06 +01:00
|
|
|
if (loop->header == NULL)
|
|
|
|
return;
|
|
|
|
|
2012-12-12 14:21:41 +01:00
|
|
|
if (loop->latch == EXIT_BLOCK_PTR)
|
|
|
|
body = get_loop_body (loop);
|
|
|
|
else
|
|
|
|
body = get_loop_body_in_bfs_order (loop);
|
|
|
|
|
|
|
|
for (i = 0; i < loop->num_nodes; i++)
|
|
|
|
{
|
|
|
|
basic_block bb = body[i];
|
|
|
|
if (bb->loop_father == loop)
|
|
|
|
draw_cfg_node (pp, funcdef_no, bb);
|
|
|
|
}
|
|
|
|
|
|
|
|
free (body);
|
|
|
|
|
|
|
|
if (loop->latch != EXIT_BLOCK_PTR)
|
|
|
|
pp_printf (pp, "\t}\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Draw all the basic blocks in the CFG in case the loop tree is available.
|
|
|
|
All loop bodys are printed in clusters. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
draw_cfg_nodes (pretty_printer *pp, struct function *fun)
|
|
|
|
{
|
|
|
|
/* ??? This x_current_loops should be enapsulated. */
|
|
|
|
if (fun->x_current_loops)
|
|
|
|
draw_cfg_nodes_for_loop (pp, fun->funcdef_no,
|
|
|
|
fun->x_current_loops->tree_root);
|
|
|
|
else
|
|
|
|
draw_cfg_nodes_no_loops (pp, fun);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Draw all edges in the CFG. Retreating edges are drawin as not
|
|
|
|
constraining, this makes the layout of the graph better.
|
|
|
|
(??? Calling mark_dfs_back may change the compiler's behavior when
|
|
|
|
dumping, but computing back edges here for ourselves is also not
|
|
|
|
desirable.) */
|
|
|
|
|
|
|
|
static void
|
|
|
|
draw_cfg_edges (pretty_printer *pp, struct function *fun)
|
|
|
|
{
|
|
|
|
basic_block bb;
|
2012-11-26 17:47:58 +01:00
|
|
|
mark_dfs_back_edges ();
|
|
|
|
FOR_ALL_BB (bb)
|
2012-12-12 14:21:41 +01:00
|
|
|
draw_cfg_node_succ_edges (pp, fun->funcdef_no, bb);
|
|
|
|
|
|
|
|
/* Add an invisible edge from ENTRY to EXIT, to improve the graph layout. */
|
|
|
|
pp_printf (pp,
|
|
|
|
"\tfn_%d_basic_block_%d:s -> fn_%d_basic_block_%d:n "
|
|
|
|
"[style=\"invis\",constraint=true];\n",
|
|
|
|
fun->funcdef_no, ENTRY_BLOCK,
|
|
|
|
fun->funcdef_no, EXIT_BLOCK);
|
|
|
|
pp_flush (pp);
|
|
|
|
}
|
1998-11-23 17:41:12 +01:00
|
|
|
|
2012-12-12 14:21:41 +01:00
|
|
|
/* Print a graphical representation of the CFG of function FUN.
|
|
|
|
First print all basic blocks. Draw all edges at the end to get
|
|
|
|
subgraphs right for GraphViz, which requires nodes to be defined
|
|
|
|
before edges to cluster nodes properly. */
|
|
|
|
|
|
|
|
void
|
|
|
|
print_graph_cfg (const char *base, struct function *fun)
|
|
|
|
{
|
|
|
|
const char *funcname = function_name (fun);
|
|
|
|
FILE *fp = open_graph_file (base, "a");
|
|
|
|
pretty_printer *pp = init_graph_slim_pretty_print (fp);
|
|
|
|
pp_printf (pp, "subgraph \"%s\" {\n"
|
|
|
|
"\tcolor=\"black\";\n"
|
|
|
|
"\tlabel=\"%s\";\n",
|
|
|
|
funcname, funcname);
|
|
|
|
draw_cfg_nodes (pp, fun);
|
|
|
|
draw_cfg_edges (pp, fun);
|
|
|
|
pp_printf (pp, "}\n");
|
2012-11-30 10:46:02 +01:00
|
|
|
pp_flush (pp);
|
1998-11-23 17:41:12 +01:00
|
|
|
fclose (fp);
|
|
|
|
}
|
|
|
|
|
2012-11-26 17:47:58 +01:00
|
|
|
/* Start the dump of a graph. */
|
|
|
|
static void
|
2013-02-15 10:30:52 +01:00
|
|
|
start_graph_dump (FILE *fp, const char *base)
|
2012-11-26 17:47:58 +01:00
|
|
|
{
|
2013-02-15 10:30:52 +01:00
|
|
|
pretty_printer *pp = init_graph_slim_pretty_print (fp);
|
|
|
|
pp_string (pp, "digraph \"");
|
|
|
|
pp_write_text_to_stream (pp);
|
|
|
|
pp_string (pp, base);
|
|
|
|
pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/false);
|
|
|
|
pp_string (pp, "\" {\n");
|
|
|
|
pp_string (pp, "overlap=false;\n");
|
|
|
|
pp_flush (pp);
|
2012-11-26 17:47:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* End the dump of a graph. */
|
|
|
|
static void
|
|
|
|
end_graph_dump (FILE *fp)
|
|
|
|
{
|
|
|
|
fputs ("}\n", fp);
|
|
|
|
}
|
1998-11-23 17:41:12 +01:00
|
|
|
|
|
|
|
/* Similar as clean_dump_file, but this time for graph output files. */
|
|
|
|
void
|
Unify the management of RTL and tree-level dump files.
2004-09-06 Paolo Bonzini <bonzini@gnu.org>
Unify the management of RTL and tree-level dump files.
* cfgexpand.c (tree_expand_cfg): Fix incorrect comment.
Don't print function name to the dump file, the pass manager
would do this for us. Add code from the top of
rest_of_compilation, up to the initial RTL dump.
* passes.c (rest_of_handle_jump): Call fixup_tail_calls and
close the DFI_sibling dump file.
(rest_of_compilation): Don't do that here. Remove code up to the
initial RTL dump.
(init_optimization_passes): Remove.
(pass_rest_of_compilation): Change pass name to NULL.
* toplev.c (lang_dependent_init): Do not use an empty dump file prefix.
Do not call init_optimization_passes.
* toplev.h (init_optimization_passes): Remove.
* graph.c (print_rtl_graph_with_bb, clean_graph_dump_file,
finish_graph_dump_file): Remove SUFFIX parameter.
* graph.h (print_rtl_graph_with_bb, clean_graph_dump_file,
finish_graph_dump_file): Likewise.
* tree-pass.h (struct tree_opt_pass): Add `letter' field.
* cfgexpand.c (pass_expand): Adjust.
* gimple-low.c (pass_lower_cf, pass_remove_useless_vars): Adjust.
* passes.c (pass_rest_of_compilation): Adjust.
* predict.c (pass_profile): Adjust.
* tree-alias-common.c (pass_build_pta, pass_del_pta): Adjust.
* tree-cfg.c (pass_build_cfg, pass_remove_useless_stmts,
pass_split_crit_edges, pass_warn_function_return): Adjust.
* tree-complex.c (pass_lower_vector_ssa, pass_pre_expand): Adjust.
* tree-dfa.c (pass_referenced_vars): Adjust.
* tree-eh.c (pass_lower_eh): Adjust.
* tree-if-conv.c (pass_build_ssa): Adjust.
* tree-into-ssa.c (pass_build_ssa): Adjust.
* tree-mudflap.c (pass_mudflap_1, pass_mudflap_2): Adjust.
* tree-nomudflap.c (pass_mudflap_1, pass_mudflap_2): Adjust.
* tree-nrv.c (pass_nrv): Adjust.
* tree-optimize.c (pass_gimple, pass_all_optimizations,
pass_cleanup_cfg_post_optimizing, pass_free_datastructures,
pass_init_datastructures): Adjust.
* tree-outof-ssa.c (pass_del_ssa): Adjust.
* tree-profile.c (pass_tree_profile): Adjust.
* tree-sra.c (pass_sra): Adjust.
* tree-ssa-alias.c (pass_may_alias): Adjust.
* tree-ssa-ccp.c (pass_ccp, pass_fold_builtins): Adjust.
* tree-ssa-copyrename.c (pass_rename_ssa_copies): Adjust.
* tree-ssa-dce.c (pass_dce, pass_cd_dce): Adjust.
* tree-ssa-dom.c (pass_dominator): Adjust.
* tree-ssa-dse.c (pass_dse): Adjust.
* tree-ssa-forwprop.c (pass_forwprop): Adjust.
* tree-ssa-if-conv.c (pass_if_conversion): Adjust.
* tree-ssa-loop-ch.c (pass_ch): Adjust.
* tree-ssa-loop.c (pass_loop, pass_loop_init, pass_lim,
pass_loop_done, pass_complete_unroll, pass_iv_canon,
pass_iv_optimize, pass_vectorize): Adjust.
* tree-ssa-phiopt.c (pass_phiopt): Adjust.
* tree-ssa-pre.c (pass_pre, pass_fre): Adjust.
* tree-ssa.c (pass_redundant_phi, pass_early_warn_uninitialized,
pass_late_warn_uninnitialized): Adjust.
* tree-tailcall.c (pass_tail_recursion, pass_tail_calls): Adjust.
* Makefile.in (tree-dump.o): Add new dependencies.
* cgraph.c (cgraph_remove_node): TDF_all -> TDF_tree_all.
* cgraphunit.c (cgraph_preserve_function_body_p, cgraph_optimize):
Likewise.
* toplev.c (dump_file_name): New.
* tree-dump.c (dump_enable_all): Add LETTER parameter.
(struct dump_file_info): Add NUM and LETTER fields.
(dump_files): Adjust and add RTL dump files.
(dump_register): Add NUM and LETTER fields.
(get_dump_file_name, dump_initialized_p, enable_rtl_dump_file): New.
(dump_begin): Use get_dump_file_name.
(dump_switch_p_1): Adjust call to dump_enable_all.
* tree-dump.h (dump_register): Adjust prototype.
* tree-optimize.c (register_one_dump_file): Take dump file index.
Support flags for RTL dumps.
(register_dump_files): Fill in NUM field of struct dump_file_info.
Track properties both when the gate is executed and when it is not.
(execute_todo): Dump RTL. Add PROPERTIES parameter.
(execute_one_pass): Pass properties to execute_todo. Handle VCG
dumps of RTL.
* tree-pass.h (dump_file_name): New.
* tree.h (TDF_TREE, TDF_RTL, get_dump_file_name, dump_initialized_p):
New.
* Makefile.in (passes.o): Add new dependencies.
* passes.c (struct dump_file_info, enum dump_file_index,
dump_file_tbl, init_optimization_passes): Remove.
(open_dump_file, close_dump_file): Use tree-dumping infrastructure.
(rest_of_handle_new_regalloc, rest_of_handle_old_regalloc): Use
dump_enabled_p.
(finish_optimization_passes): Update finish_graph_dump_file loop.
(enable_rtl_dump_file): Remove.
* tree-dump.c (dump_files): Adjust and add RTL dump files.
(enable_rtl_dump_file): Add here.
* tree.h (enum tree_dump_index): Add RTL dump file indices.
* doc/invoke.texi (Debugging options): Document new RTL debugging
options. Update.
From-SVN: r87113
2004-09-06 12:08:17 +02:00
|
|
|
clean_graph_dump_file (const char *base)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
FILE *fp = open_graph_file (base, "w");
|
2013-02-15 10:30:52 +01:00
|
|
|
start_graph_dump (fp, base);
|
1998-11-23 17:41:12 +01:00
|
|
|
fclose (fp);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Do final work on the graph output file. */
|
|
|
|
void
|
Unify the management of RTL and tree-level dump files.
2004-09-06 Paolo Bonzini <bonzini@gnu.org>
Unify the management of RTL and tree-level dump files.
* cfgexpand.c (tree_expand_cfg): Fix incorrect comment.
Don't print function name to the dump file, the pass manager
would do this for us. Add code from the top of
rest_of_compilation, up to the initial RTL dump.
* passes.c (rest_of_handle_jump): Call fixup_tail_calls and
close the DFI_sibling dump file.
(rest_of_compilation): Don't do that here. Remove code up to the
initial RTL dump.
(init_optimization_passes): Remove.
(pass_rest_of_compilation): Change pass name to NULL.
* toplev.c (lang_dependent_init): Do not use an empty dump file prefix.
Do not call init_optimization_passes.
* toplev.h (init_optimization_passes): Remove.
* graph.c (print_rtl_graph_with_bb, clean_graph_dump_file,
finish_graph_dump_file): Remove SUFFIX parameter.
* graph.h (print_rtl_graph_with_bb, clean_graph_dump_file,
finish_graph_dump_file): Likewise.
* tree-pass.h (struct tree_opt_pass): Add `letter' field.
* cfgexpand.c (pass_expand): Adjust.
* gimple-low.c (pass_lower_cf, pass_remove_useless_vars): Adjust.
* passes.c (pass_rest_of_compilation): Adjust.
* predict.c (pass_profile): Adjust.
* tree-alias-common.c (pass_build_pta, pass_del_pta): Adjust.
* tree-cfg.c (pass_build_cfg, pass_remove_useless_stmts,
pass_split_crit_edges, pass_warn_function_return): Adjust.
* tree-complex.c (pass_lower_vector_ssa, pass_pre_expand): Adjust.
* tree-dfa.c (pass_referenced_vars): Adjust.
* tree-eh.c (pass_lower_eh): Adjust.
* tree-if-conv.c (pass_build_ssa): Adjust.
* tree-into-ssa.c (pass_build_ssa): Adjust.
* tree-mudflap.c (pass_mudflap_1, pass_mudflap_2): Adjust.
* tree-nomudflap.c (pass_mudflap_1, pass_mudflap_2): Adjust.
* tree-nrv.c (pass_nrv): Adjust.
* tree-optimize.c (pass_gimple, pass_all_optimizations,
pass_cleanup_cfg_post_optimizing, pass_free_datastructures,
pass_init_datastructures): Adjust.
* tree-outof-ssa.c (pass_del_ssa): Adjust.
* tree-profile.c (pass_tree_profile): Adjust.
* tree-sra.c (pass_sra): Adjust.
* tree-ssa-alias.c (pass_may_alias): Adjust.
* tree-ssa-ccp.c (pass_ccp, pass_fold_builtins): Adjust.
* tree-ssa-copyrename.c (pass_rename_ssa_copies): Adjust.
* tree-ssa-dce.c (pass_dce, pass_cd_dce): Adjust.
* tree-ssa-dom.c (pass_dominator): Adjust.
* tree-ssa-dse.c (pass_dse): Adjust.
* tree-ssa-forwprop.c (pass_forwprop): Adjust.
* tree-ssa-if-conv.c (pass_if_conversion): Adjust.
* tree-ssa-loop-ch.c (pass_ch): Adjust.
* tree-ssa-loop.c (pass_loop, pass_loop_init, pass_lim,
pass_loop_done, pass_complete_unroll, pass_iv_canon,
pass_iv_optimize, pass_vectorize): Adjust.
* tree-ssa-phiopt.c (pass_phiopt): Adjust.
* tree-ssa-pre.c (pass_pre, pass_fre): Adjust.
* tree-ssa.c (pass_redundant_phi, pass_early_warn_uninitialized,
pass_late_warn_uninnitialized): Adjust.
* tree-tailcall.c (pass_tail_recursion, pass_tail_calls): Adjust.
* Makefile.in (tree-dump.o): Add new dependencies.
* cgraph.c (cgraph_remove_node): TDF_all -> TDF_tree_all.
* cgraphunit.c (cgraph_preserve_function_body_p, cgraph_optimize):
Likewise.
* toplev.c (dump_file_name): New.
* tree-dump.c (dump_enable_all): Add LETTER parameter.
(struct dump_file_info): Add NUM and LETTER fields.
(dump_files): Adjust and add RTL dump files.
(dump_register): Add NUM and LETTER fields.
(get_dump_file_name, dump_initialized_p, enable_rtl_dump_file): New.
(dump_begin): Use get_dump_file_name.
(dump_switch_p_1): Adjust call to dump_enable_all.
* tree-dump.h (dump_register): Adjust prototype.
* tree-optimize.c (register_one_dump_file): Take dump file index.
Support flags for RTL dumps.
(register_dump_files): Fill in NUM field of struct dump_file_info.
Track properties both when the gate is executed and when it is not.
(execute_todo): Dump RTL. Add PROPERTIES parameter.
(execute_one_pass): Pass properties to execute_todo. Handle VCG
dumps of RTL.
* tree-pass.h (dump_file_name): New.
* tree.h (TDF_TREE, TDF_RTL, get_dump_file_name, dump_initialized_p):
New.
* Makefile.in (passes.o): Add new dependencies.
* passes.c (struct dump_file_info, enum dump_file_index,
dump_file_tbl, init_optimization_passes): Remove.
(open_dump_file, close_dump_file): Use tree-dumping infrastructure.
(rest_of_handle_new_regalloc, rest_of_handle_old_regalloc): Use
dump_enabled_p.
(finish_optimization_passes): Update finish_graph_dump_file loop.
(enable_rtl_dump_file): Remove.
* tree-dump.c (dump_files): Adjust and add RTL dump files.
(enable_rtl_dump_file): Add here.
* tree.h (enum tree_dump_index): Add RTL dump file indices.
* doc/invoke.texi (Debugging options): Document new RTL debugging
options. Update.
From-SVN: r87113
2004-09-06 12:08:17 +02:00
|
|
|
finish_graph_dump_file (const char *base)
|
1998-11-23 17:41:12 +01:00
|
|
|
{
|
2012-11-26 17:47:58 +01:00
|
|
|
FILE *fp = open_graph_file (base, "a");
|
|
|
|
end_graph_dump (fp);
|
|
|
|
fclose (fp);
|
1998-11-23 17:41:12 +01:00
|
|
|
}
|