X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firloop.h;h=c7219b572146619f07ab56b9be0c8d081696714f;hb=fa9c992b5f23e7a059ac91fdd04b409b951ebcc4;hp=969ff77c64bdb1b78ee2815796664aa811dbc37d;hpb=1ce363f80e6a204d4011f85813362d9bd1d0e7e4;p=libfirm diff --git a/include/libfirm/irloop.h b/include/libfirm/irloop.h index 969ff77c6..c7219b572 100644 --- a/include/libfirm/irloop.h +++ b/include/libfirm/irloop.h @@ -67,8 +67,9 @@ void clear_backedges(ir_node *n); /** Loop elements: loop nodes and ir nodes */ typedef union { firm_kind *kind; /**< is either k_ir_node or k_ir_loop */ - ir_node *node; /**< Pointer to an ir_node element */ - ir_loop *son; /**< Pointer to an ir_loop element */ + ir_node *node; /**< Pointer to an ir_node element */ + ir_loop *son; /**< Pointer to an ir_loop element */ + ir_graph *irg; /**< Pointer to an ir_graph element (only callgraph loop trees) */ } loop_element; int is_ir_loop(const void *thing); @@ -165,31 +166,43 @@ int construct_backedges(ir_graph *irg); int construct_ip_backedges(void); #endif -/** Construct loop tree only for control flow. +/** + * Construct Intra-procedural control flow loop tree for a IR-graph. + * + * This constructs loop information resembling the program structure. + * It is useful for loop optimizations and analyses, as, e.g., finding + * iteration variables or loop invariant code motion. * - * This constructs loop information resembling the program structure. - * It is useful for loop optimizations and analyses, as, e.g., finding - * iteration variables or loop invariant code motion. + * This algorithm computes only back edge information for Block nodes, not + * for Phi nodes. * - * This algorithm computes only back edge information for Block nodes, not - * for Phi nodes. + * This algorithm destroyes the link field of block nodes. * - * This algorithm destroyes the link field of block nodes. + * @param irg the graph * * @returns Maximal depth of loop tree. */ int construct_cf_backedges(ir_graph *irg); +/** + * Computes Intra-procedural control flow loop tree on demand. + * + * @param irg the graph + */ +void assure_cf_loop(ir_graph *irg); + #ifdef INTERPROCEDURAL_VIEW -/** Construct interprocedural loop tree for control flow. +/** + * Construct Inter-procedural control flow loop tree. * - * @see construct_cf_backedges() and construct_ip_backedges(). + * @see construct_cf_backedges() and construct_ip_backedges(). */ -int construct_ip_cf_backedges (void); +int construct_ip_cf_backedges(void); #endif -/** Removes all loop information. - * Resets all backedges. Works for any construction algorithm. +/** + * Removes all loop information. + * Resets all backedges. Works for any construction algorithm. */ void free_loop_information(ir_graph *irg); void free_all_loop_information (void); @@ -206,6 +219,6 @@ void free_all_loop_information (void); * * Returns non-zero, if the node n is not changed in the loop block * belongs to or in inner loops of this block. */ -int is_loop_invariant(ir_node *n, ir_node *block); +int is_loop_invariant(const ir_node *n, const ir_node *block); #endif