X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firdump.h;h=ec111a6d1e27b69a5d7c748bb0baffbcf87b2f8a;hb=e302589b2ee3b43584b856431b581d67bc679a68;hp=1f7f459a7fb784663196dc51790f54cfb2eb3e00;hpb=547d2b8c6de9e287ae3e60b4aa4fe217521706a2;p=libfirm diff --git a/include/libfirm/irdump.h b/include/libfirm/irdump.h index 1f7f459a7..ec111a6d1 100644 --- a/include/libfirm/irdump.h +++ b/include/libfirm/irdump.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -46,75 +46,56 @@ #include "irloop.h" /** - * Names of the 32 supported colors - */ -typedef enum { - ird_color_default = -1, - ird_color_white = 0, - ird_color_blue = 1, - ird_color_red = 2, - ird_color_green = 3, - ird_color_yellow = 4, - ird_color_magenta = 5, - ird_color_cyan = 6, - ird_color_darkgray = 7, - ird_color_darkblue = 8, - ird_color_darkred = 9, - ird_color_darkgreen = 10, - ird_color_darkyellow = 11, - ird_color_darkmagenta = 12, - ird_color_darkcyan = 13, - ird_color_gold = 14, - ird_color_lightgray = 15, - ird_color_lightblue = 16, - ird_color_lightred = 17, - ird_color_lightgreen = 18, - ird_color_lightyellow = 19, - ird_color_lightmagenta = 20, - ird_color_lightcyan = 21, - ird_color_lilac = 22, - ird_color_turquoise = 23, - ird_color_aquamarine = 24, - ird_color_khaki = 25, - ird_color_purple = 26, - ird_color_yellowgreen = 27, - ird_color_pink = 28, - ird_color_orange = 29, - ird_color_orchid = 30, - ird_color_black = 31 -} dumper_colors; + * Symbolic names for the different dumping colors. + */ +typedef enum ird_color_t { + ird_color_prog_background, + ird_color_block_background, + ird_color_dead_block_background, + ird_color_block_inout, + ird_color_default_node, + ird_color_phi, + ird_color_memory, + ird_color_controlflow, + ird_color_const, + ird_color_anchor, + ird_color_proj, + ird_color_uses_memory, + ird_color_error, + ird_color_count +} ird_color_t; /** - * Edge kinds + * Edge kinds. */ typedef enum { - data_edge = 0x01, /**< a data edge between two basic blocks */ - block_edge = 0x02, /**< an edge from a node to its basic block */ - cf_edge = 0x03, /**< regularly control flow edge */ - exc_cf_edge = 0x04, /**< exceptional control flow edge */ - mem_edge = 0x05, /**< memory edge */ - dominator_edge = 0x06, /**< dominator edge */ - node2type_edge = 0x07, /**< an edge from an IR node to a type */ - - ent_type_edge = 0x11, /**< an edge from an entity to its type */ - ent_own_edge = 0x12, /**< an edge from an entity to its owner type */ - ent_overwrites_edge = 0x13, /**< an edge from an entity to the entity it overwrites */ - ent_value_edge = 0x14, /**< an edge from an entity to its value entity */ - ent_corr_edge = 0x15, /**< an edge from an entity to the member entity its initializes */ - - meth_par_edge = 0x21, /**< an edge from a method type to one of its parameter types */ - meth_res_edge = 0x22, /**< an edge from a method type to one of its result types */ - type_super_edge = 0x23, /**< an edge from a class type to its super/basis type */ - union_edge = 0x24, /**< an edge from a union type to its member types */ - ptr_pts_to_edge = 0x25, /**< an edge from a pointer type to its points-to type */ - arr_elt_type_edge = 0x26, /**< an edge from an array type to its element type */ - arr_ent_edge = 0x27, /**< an edge from a array type to its element entity */ - type_member_edge = 0x28, /**< an edge from a compound type to its member entities */ - - /* additional flags */ - intra_edge = 0, /**< intra edge flag: edge do not cross basic block boundaries */ - inter_edge = 0x40, /**< inter edge flag: edge cross basic block boundaries */ - back_edge = 0x80 /**< backwards edge flag */ + data_edge = 0x01, /**< A data edge between two basic blocks. */ + block_edge = 0x02, /**< An edge from a node to its basic block. */ + cf_edge = 0x03, /**< A regularly control flow edge. */ + exc_cf_edge = 0x04, /**< An exceptional control flow edge. */ + mem_edge = 0x05, /**< A memory edge. */ + dominator_edge = 0x06, /**< A dominator edge from a block to its immediate dominator. */ + node2type_edge = 0x07, /**< An edge from an IR node to a type. */ + + ent_type_edge = 0x11, /**< An edge from an entity to its type. */ + ent_own_edge = 0x12, /**< An edge from an entity to its owner type. */ + ent_overwrites_edge = 0x13, /**< An edge from an entity to the entity it overwrites. */ + ent_value_edge = 0x14, /**< An edge from an entity to its value entity. */ + ent_corr_edge = 0x15, /**< An edge from an entity to the member entity its initializes. */ + + meth_par_edge = 0x21, /**< An edge from a method type to one of its parameter types. */ + meth_res_edge = 0x22, /**< An edge from a method type to one of its result types. */ + type_super_edge = 0x23, /**< An edge from a class type to its super/basis type. */ + union_edge = 0x24, /**< An edge from a union type to its member types. */ + ptr_pts_to_edge = 0x25, /**< An edge from a pointer type to its points-to type. */ + arr_elt_type_edge = 0x26, /**< An edge from an array type to its element type. */ + arr_ent_edge = 0x27, /**< An edge from a array type to its element entity. */ + type_member_edge = 0x28, /**< An edge from a compound type to its member entities. */ + + /* additional flags */ + intra_edge = 0, /**< Intra edge flag: edge do not cross basic block boundaries */ + inter_edge = 0x40, /**< Inter edge flag: edge cross basic block boundaries */ + back_edge = 0x80 /**< Backwards edge flag. */ } edge_kind; /* **************************************************************************** */ @@ -189,6 +170,7 @@ DUMP_NODE_EDGE_FUNC get_dump_block_edge_hook(void); * @see turn_off_edge_labels() */ void dump_ir_graph (ir_graph *irg, const char *suffix); +void dump_ir_graph_file (ir_graph *irg, FILE *out); /** Dump a firm graph without explicit block nodes. * @@ -208,6 +190,7 @@ void dump_ir_graph (ir_graph *irg, const char *suffix); * @see turn_off_edge_labels() */ void dump_ir_block_graph (ir_graph *irg, const char *suffix); +void dump_ir_block_graph_file (ir_graph *irg, FILE *out); /** Dump a firm graph without explicit block nodes but grouped in extended blocks. * @@ -226,6 +209,7 @@ void dump_ir_block_graph (ir_graph *irg, const char *suffix); * @see turn_off_edge_labels() */ void dump_ir_extblock_graph (ir_graph *irg, const char *suffix); +void dump_ir_extblock_graph_file (ir_graph *irg, FILE *out); /** Dumps all graphs in interprocedural view to a file named All_graphs.vcg. * @@ -249,6 +233,7 @@ void dump_all_cg_block_graph(const char *suffix); * @see turn_off_edge_labels() */ void dump_ir_graph_w_types (ir_graph *irg, const char *suffix); +void dump_ir_graph_w_types_file (ir_graph *irg, FILE *out); /** Dumps a firm graph and all the type information needed for Calls, * Sels, ... in this graph. @@ -480,42 +465,42 @@ void dump_graph_as_text(ir_graph *irg, const char *suffix); /** Verbosity for text dumpers */ typedef enum { - dump_verbosity_onlynames = 0x00000001, /**< only dump names. turns off all other - flags up to 0x00010000. */ - dump_verbosity_fields = 0x00000002, /**< dump types and fields (like a type declaration) */ - dump_verbosity_methods = 0x00000004, /**< dump types and methods (like a type declaration) */ - dump_verbosity_nostatic = 0x00000040, /**< dump types and dynamic allocated fields (like a - type declaration). This excludes methods and - static, polymorphic fields. */ - dump_verbosity_typeattrs = 0x00000008, /**< dump all type attributes */ - dump_verbosity_entattrs = 0x00000010, /**< dump all entity attributes */ - dump_verbosity_entconsts = 0x00000020, /**< dump entity constants */ - - dump_verbosity_accessStats = 0x00000100, /**< dump entity access statistics */ - dump_verbosity_csv = 0x00000200, /**< dump access statistics as comma separated list */ - - dump_verbosity_noClassTypes = 0x00001000, /**< dump no class types */ - dump_verbosity_noStructTypes = 0x00002000, /**< dump no struct types */ - dump_verbosity_noUnionTypes = 0x00004000, /**< dump no union types */ - dump_verbosity_noArrayTypes = 0x00008000, /**< dump no array types */ - dump_verbosity_noPointerTypes = 0x00010000, /**< dump no pointer types */ - dump_verbosity_noMethodTypes = 0x00020000, /**< dump no method types */ - dump_verbosity_noPrimitiveTypes = 0x00040000, /**< dump no primitive types */ - dump_verbosity_noEnumerationTypes= 0x00080000, /**< dump no enumeration types */ - - dump_verbosity_onlyClassTypes = 0x000FE000, /**< dump only class types */ - dump_verbosity_onlyStructTypes = 0x000FD000, /**< dump only struct types */ - dump_verbosity_onlyUnionTypes = 0x000FB000, /**< dump only union types */ - dump_verbosity_onlyArrayTypes = 0x000F7000, /**< dump only array types */ - dump_verbosity_onlyPointerTypes = 0x000EF000, /**< dump only pointer types */ - dump_verbosity_onlyMethodTypes = 0x000DF000, /**< dump only method types */ - dump_verbosity_onlyPrimitiveTypes = 0x000BF000, /**< dump only primitive types */ - dump_verbosity_onlyEnumerationTypes=0x0007F000, /**< dump only enumeration types */ - - dump_verbosity_max = 0x4FF00FBE /**< turn on all verbosity. - Do not turn on negative flags! - @@@ Because of a bug in gcc 3.2 we can not set the - first two bits. */ + dump_verbosity_onlynames = 0x00000001, /**< Only dump names. Turns off all other + flags up to 0x00010000. */ + dump_verbosity_fields = 0x00000002, /**< Dump types and fields (like a type declaration). */ + dump_verbosity_methods = 0x00000004, /**< Dump types and methods (like a type declaration). */ + dump_verbosity_nostatic = 0x00000040, /**< Dump types and dynamic allocated fields (like a + type declaration). This excludes methods and + static, polymorphic fields. */ + dump_verbosity_typeattrs = 0x00000008, /**< Dump all type attributes. */ + dump_verbosity_entattrs = 0x00000010, /**< Dump all entity attributes. */ + dump_verbosity_entconsts = 0x00000020, /**< Dump entity constants. */ + + dump_verbosity_accessStats = 0x00000100, /**< Dump entity access statistics. */ + dump_verbosity_csv = 0x00000200, /**< Dump access statistics as comma separated list. */ + + dump_verbosity_noClassTypes = 0x00001000, /**< Dump no class types. */ + dump_verbosity_noStructTypes = 0x00002000, /**< Dump no struct types. */ + dump_verbosity_noUnionTypes = 0x00004000, /**< Dump no union types. */ + dump_verbosity_noArrayTypes = 0x00008000, /**< Dump no array types. */ + dump_verbosity_noPointerTypes = 0x00010000, /**< Dump no pointer types. */ + dump_verbosity_noMethodTypes = 0x00020000, /**< Dump no method types. */ + dump_verbosity_noPrimitiveTypes = 0x00040000, /**< Dump no primitive types .*/ + dump_verbosity_noEnumerationTypes= 0x00080000, /**< Dump no enumeration types. */ + + dump_verbosity_onlyClassTypes = 0x000FE000, /**< Dump only class types. */ + dump_verbosity_onlyStructTypes = 0x000FD000, /**< Dump only struct types. */ + dump_verbosity_onlyUnionTypes = 0x000FB000, /**< Dump only union types. */ + dump_verbosity_onlyArrayTypes = 0x000F7000, /**< Dump only array types. */ + dump_verbosity_onlyPointerTypes = 0x000EF000, /**< Dump only pointer types. */ + dump_verbosity_onlyMethodTypes = 0x000DF000, /**< Dump only method types. */ + dump_verbosity_onlyPrimitiveTypes = 0x000BF000, /**< Dump only primitive types. */ + dump_verbosity_onlyEnumerationTypes=0x0007F000, /**< Dump only enumeration types. */ + + dump_verbosity_max = 0x4FF00FBE /**< Turn on all verbosity. + Do not turn on negative flags! + @@@ Because of a bug in gcc 3.2 we can not set the + first two bits. */ } dump_verbosity; @@ -607,12 +592,6 @@ void dump_consts_local(int flag); */ void dump_node_idx_label(int flag); -/** - * Returns 0 if dump_out_edge_flag or dump_loop_information_flag - * are set, else returns dump_const_local_flag. - */ -int get_opt_dump_const_local(void); - /** Turns off dumping the values of constant entities. Makes type graphs * better readable. */ @@ -676,6 +655,13 @@ void dump_ld_names(int flag); */ void dump_all_anchors(int flag); +/** Dumps a MacroBlock edge from every Block to its + * MacroBlock header. + * + * This option is off per default. + */ +void dump_macroblock_edges(int flag); + /** A node info dumper callback. */ typedef void (dump_node_info_cb_t)(void *data, FILE *f, const ir_node *n);