+/*
+ * Project: libFIRM
+ * File name: ir/common/firmwalk.h
+ * Purpose: Walker that touches all Firm data structures
+ * Author: Sebastian Felis
+ * Modified by:
+ * Created: 7.2003
+ * CVS-ID: $Id$
+ * Copyright: (c) 2003 Universität Karlsruhe
+ * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
+ */
+
/** Returns the link of a firm node.
* Possible firm structures are: entity, type, ir_graph, ir_node and
/** Returns the link of a firm node.
* Possible firm structures are: entity, type, ir_graph, ir_node and
* to a firm structure. The real link field of firm structure is used
* by this firm walker to collect walking data.
*
* to a firm structure. The real link field of firm structure is used
* by this firm walker to collect walking data.
*
/** Mode callback function definition */
typedef void firm_walk_mode_func(ir_mode *mode, void *env);
/** Type callback function definition */
/** Mode callback function definition */
typedef void firm_walk_mode_func(ir_mode *mode, void *env);
/** Type callback function definition */
/** Entity callback function definition */
typedef void firm_walk_entity_func(entity *ent, void *env);
/** Graph callback function definition */
typedef void firm_walk_graph_func(ir_graph *irg, void *env);
/** Entity callback function definition */
typedef void firm_walk_entity_func(entity *ent, void *env);
/** Graph callback function definition */
typedef void firm_walk_graph_func(ir_graph *irg, void *env);
/** Block callback function definition */
typedef void firm_walk_block_init_func(ir_graph *irg, void *env);
typedef void firm_walk_block_func(ir_node *block, void *env);
typedef void firm_walk_block_finalize_func(ir_graph *irg, void *env);
/** Block callback function definition */
typedef void firm_walk_block_init_func(ir_graph *irg, void *env);
typedef void firm_walk_block_func(ir_node *block, void *env);
typedef void firm_walk_block_finalize_func(ir_graph *irg, void *env);
/** Node callback function definition */
typedef void firm_walk_node_func (ir_node *irn, void *env);
/** Node callback function definition */
typedef void firm_walk_node_func (ir_node *irn, void *env);
- FGD_WITH_DOMINATOR = 1<<1, /**< nyi */
- FGD_WITH_OUTEDGES = 1<<2, /**< nyi */
- FGD_WITH_LOOPS = 1<<3, /**< nyi */
- FGD_DUMP_BLOCK_AS_IRN = 1<<4, /**< Dump all block nodes as irn nodes
+ FW_WITH_DOMINATOR = 1<<1, /**< nyi */
+ FW_WITH_OUTEDGES = 1<<2, /**< nyi */
+ FW_WITH_LOOPS = 1<<3, /**< nyi */
+ FW_DUMP_BLOCK_AS_IRN = 1<<4, /**< Dump all block nodes as irn nodes
/** Interface function to dump all used and internal modes.
Internal modes are: BB, X, M and T */
firm_walk_init_func *do_mode_init;
firm_walk_mode_func *do_mode;
firm_walk_finalize_func *do_mode_finalize;
/** Interface function to dump all used and internal modes.
Internal modes are: BB, X, M and T */
firm_walk_init_func *do_mode_init;
firm_walk_mode_func *do_mode;
firm_walk_finalize_func *do_mode_finalize;
* flag must be set for the walker initializer */
firm_walk_init_func *do_type_init;
firm_walk_type_func *do_type;
firm_walk_finalize_func *do_type_finalize;
* flag must be set for the walker initializer */
firm_walk_init_func *do_type_init;
firm_walk_type_func *do_type;
firm_walk_finalize_func *do_type_finalize;
/** Dumping interface for entities */
firm_walk_init_func *do_entity_init;
firm_walk_entity_func *do_entity;
firm_walk_finalize_func *do_entity_finalize;
/** Dumping interface for entities */
firm_walk_init_func *do_entity_init;
firm_walk_entity_func *do_entity;
firm_walk_finalize_func *do_entity_finalize;
/** Dumps all graphs and subnodes.
*
* The firm walker dump a graph with its blocks and nodes nested.
* Fist do_graph_init will be called (if defined). For each graph
/** Dumps all graphs and subnodes.
*
* The firm walker dump a graph with its blocks and nodes nested.
* Fist do_graph_init will be called (if defined). For each graph
- * do_graph will be call in a loop. After dumped all graphs,
- * do_graph_finalize will be called.
+ * do_graph will be call in a loop.
+ * After all blocks in a graph are dumped, do_graph_post() is called.
+ * After dumped all graphs, do_graph_finalize will be called.
*
* Within do_graph each block will be dumped. First do_block_init,
* for each block do_block and after all dumped blocks
*
* Within do_graph each block will be dumped. First do_block_init,
* for each block do_block and after all dumped blocks
* walking flag, a prefix order is also possible. */
firm_walk_init_func *do_graph_init;
firm_walk_graph_func *do_graph;
* walking flag, a prefix order is also possible. */
firm_walk_init_func *do_graph_init;
firm_walk_graph_func *do_graph;
/** Dumping interface for blocks. If blocks should be handled like
* like a normal ir node, a special walker flag could be set.
* @see do_graph */
firm_walk_block_init_func *do_block_init;
firm_walk_block_func *do_block;
/** Dumping interface for blocks. If blocks should be handled like
* like a normal ir node, a special walker flag could be set.
* @see do_graph */
firm_walk_block_init_func *do_block_init;
firm_walk_block_func *do_block;