/* GRAPH DUMPERS */
/* **************************************************************************** */
+/**
+ * This hook is called to dump the vcg attributes of a node to a file.
+ * If this function returns zero, the default attributes are added, else
+ * removed.
+ */
+typedef int (*DUMP_NODE_VCGATTR_FUNC)(FILE *F, ir_node *node, ir_node *local);
+
+/** Set the node_vcgattr hook. */
+void set_dump_node_vcgattr_hook(DUMP_NODE_VCGATTR_FUNC hook);
+
+typedef int (*DUMP_NODE_EDGE_FUNC)(FILE *f, ir_node *node);
+
+/**
+ * Set the hook to be called to dump additional edges to a node.
+ * @param func The hook to be called.
+ */
+void set_dump_node_edge_hook(DUMP_NODE_EDGE_FUNC func);
+
+/**
+ * Get the additional edge dump hook.
+ * @return The current additional edge dump hook.]
+ */
+DUMP_NODE_EDGE_FUNC get_dump_node_edge_hook(void);
+
/** Dump a firm graph.
*
* @param irg The firm graph to be dumped.
*/
void dump_ir_block_graph (ir_graph *irg, const char *suffix);
+/** Dump a firm graph without explicit block nodes but grouped in extended blocks.
+ *
+ * @param irg The firm graph to be dumped.
+ *
+ * @return
+ * A file containing the firm graph in vcg format.
+ *
+ * Dumps all Firm nodes of a single graph for a single procedure in
+ * extended xvcg format.
+ * Dumps the graph to a file. The file name is constructed from the
+ * name of the entity describing the procedure (irg->entity) and the
+ * ending <-ip>.vcg. Eventually overwrites existing files. Dumps several
+ * procedures in boxes if interprocedural_view.
+ *
+ * @see turn_off_edge_labels()
+ */
+void dump_ir_extblock_graph (ir_graph *irg, const char *suffix);
+
/** Dumps all graphs in interprocedural view to a file named All_graphs.vcg.
*/
void dump_all_cg_block_graph(const char *suffix);
*/
void dump_cfg (ir_graph *irg, const char *suffix);
+/** Dump a node and its predecessors forming a subgraph to a vcg file.
+ *
+ * @param root The node serving as root for the subgraph.
+ * @param depth Dump nodes on paths starting at root with length depth.
+ * @param suffix A suffix for the file name.
+ *
+ * Dumps the graph to a file. The file name is constructed from the
+ * name of the entity describing the procedure the passed node is
+ * in, suffix and the ending -subg_<nr>.vcg. nr is a unique number
+ * for each graph dumped. Eventually overwrites existing files.
+ *
+ * @return
+ * A file containing the subgraph in vcg format.
+ */
+void dump_subgraph (ir_node *root, int depth, const char *suffix);
/* **************************************************************************** */
/* CALLGRAPH DUMPERS */
/** Dump the call graph.
*
* Dumps the callgraph to a file "Callgraph"<suffix>".vcg".
+ *
+ * @see dump_callgraph_loop_tree(const char *suffix)
*/
void dump_callgraph(const char *suffix);
/* TEXT DUMPERS */
/* **************************************************************************** */
+
+/** Write the irnode and all its attributes to the file passed.
+ * */
+int dump_irnode_to_file (FILE *f, ir_node *n);
+
+/** Write the irnode and all its attributes to stdout.
+ * */
+void dump_irnode (ir_node *n);
+
+/** Write the graph and all its attributes to the file passed.
+ * Does not write the nodes.
+ * */
+void dump_graph_to_file(FILE *F, ir_graph *irg);
+
+/** Write the graph and all its attributes to stdout.
+ * Does not write the nodes.
+ * */
+void dump_graph(ir_graph *g);
+
+
+/** Dump graph information as text.
+ *
+ * Often graphs are unhandy in their vcg representation. The text
+ * dumper represents the information for the firm nodes more compact,
+ * but the relations between the nodes only implicitly.
+ *
+ * The file name is the graph name (get_entity_name()), appended by
+ * <suffix>.txt.
+ */
+void dump_graph_as_text(ir_graph *irg, const char *suffix);
+
+
/** Verbosity for text dumpers */
typedef enum {
- dump_verbosity_onlynames = 0x00000001, /**< only dump type names. turns off all other
+ 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_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 = 0x000F8000, /**< dump only array 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=0x0008F000, /**< dump only enumeration types */
+ dump_verbosity_onlyEnumerationTypes=0x0007F000, /**< dump only enumeration types */
- dump_verbosity_max = 0x48888888, /**< turn on all verbosity. */
+ 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;
/** Write the type and all its attributes to the file passed.
* */
-void dump_type_to_file (FILE *f, type *tp, unsigned verbosity);
+void dump_type_to_file (FILE *f, type *tp, dump_verbosity verbosity);
/** Write the type and all its attributes to stdout.
* */
* the global type nor frame types or the like.
*
* The file name is the program name (get_irp_name()), or 'TextTypes'
- * if the program name is not set appended by <suffix>-types.txt.
+ * if the program name is not set, appended by <suffix>-types.txt.
+ * For verbosity see the documentation of the verbosity flags above.
*/
void dump_types_as_text(unsigned verbosity, const char *suffix);
+/** Dumps all global variables as text.
+ *
+ * Dumps a text representation of the entities in the global type.
+ *
+ * The file name is the program name (get_irp_name()), or 'TextTypes'
+ * if the program name is not set, appended by <suffix>-globals.txt.
+ * For verbosity see the documentation of the verbosity flags above.
+ */
+void dump_globals_as_text(unsigned verbosity, const char *suffix);
+
/* **************************************************************************** */
/* FLAGS */
/* **************************************************************************** */
* @param name The prefix of the name (not the ld_name) of the method
* entity to be dumped.
*/
-void only_dump_method_with_name(ident *name);
+void only_dump_method_with_name(ident *name);
+
+/** Returns the name set with only_dump_method_with_name(). */
+ident *get_dump_file_filter_ident(void);
+
+/** Returns true if dump file filter is not set, or if it is a
+ * prefix of name. */
+int is_filtered_dump_name(ident *name);
/** Sets the vcg flag "display_edge_labels" to no.
*
* This is necessary as xvcg and aisee both fail to display graphs
- * with self-edges if these edges have labes.
+ * with self-edges if these edges have labels.
*/
void turn_off_edge_labels(void);
/** Turns off dumping the values of constant entities. Makes type graphs
* better readable.
*/
-void turn_off_constant_entity_values(void);
+void dump_constant_entity_values(bool b);
/** Turns on dumping the edges from the End node to nodes to be kept
* alive.
/** Turns on dumping the out edges starting from the Start block in
* dump_ir_graph.
*
- * To test the consistency of the out datastructure.
+ * To test the consistency of the out data structure.
*/
-void dump_out_edges(void);
+void dump_out_edges(bool b);
/** If this flag is set the dumper dumps edges to immediate dominator in cfg.
*/
-void dump_dominator_information(void);
+void dump_dominator_information(bool b);
/** If this flag is set the dumper dumps loop nodes and edges from
* these nodes to the contained ir nodes.
*
- * Can be turned off with dont_dump_loop_information().
* If the loops are interprocedural nodes can be missing.
*/
-void dump_loop_information(void);
-
-/**
- * @see dump_loop_information()
- */
-void dont_dump_loop_information(void);
+void dump_loop_information(bool b);
/** If set and backedge info is computed, backedges are dumped dashed
* and as vcg 'backedge' construct.
* If the flag is set, the type name is output in [] in the node label,
* else it is output as info.
*/
-void dump_analysed_type_info(bool b);
+void set_opt_dump_analysed_type_info(bool b);
/** Write the address of a node into the vcg info.
*