X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firouts.h;h=8b4fd95c91f9de536449ce10b9af2c1c97caadd9;hb=f7a0dee11313faad6f2ff54edc8eaadabd03e433;hp=80108914f63576b08df26ede626fcd4fa8f685f5;hpb=1ce363f80e6a204d4011f85813362d9bd1d0e7e4;p=libfirm diff --git a/include/libfirm/irouts.h b/include/libfirm/irouts.h index 80108914f..8b4fd95c9 100644 --- a/include/libfirm/irouts.h +++ b/include/libfirm/irouts.h @@ -39,28 +39,41 @@ order of successors guaranteed. Will return edges from block to floating nodes even if irgraph is in state "op_pin_state_floats". */ /* returns the number of successors of the node: */ -int get_irn_n_outs(ir_node *node); +int get_irn_n_outs(const ir_node *node); -/** Get predecessor n */ -ir_node *get_irn_out(ir_node *node, int pos); +/** Get the User of a node from the Def-Use edge at position pos. */ +ir_node *get_irn_out(const ir_node *def, int pos); -/** Set predecessor n */ -void set_irn_out(ir_node *node, int pos, ir_node *out); +/** + * Get the User and its input position from the Def-Use edge of def + * at position pos. + */ +ir_node *get_irn_out_ex(const ir_node *def, int pos, int *in_pos); + +/** + * Set the User at position pos. + * + * @param def the Def node + * @param pos the number of the Def-Use edge tat is modified + * @param use the Use node + * @param in_pos the number of the corresponding Use-Def edge in the use node in array + */ +void set_irn_out(ir_node *def, int pos, ir_node *use, int in_pos); /* Methods to iterate through the control flow graph. Iterate from 0 to i < get_Block_cfg_outs(block). No order of successors guaranteed. */ /** Return the number of control flow successors, ignore keep-alives. */ -int get_Block_n_cfg_outs(ir_node *node); +int get_Block_n_cfg_outs(const ir_node *node); /** Return the number of control flow successors, honor keep-alives. */ -int get_Block_n_cfg_outs_ka(ir_node *node); +int get_Block_n_cfg_outs_ka(const ir_node *node); /** Access predecessor n, ignore keep-alives. */ -ir_node *get_Block_cfg_out(ir_node *node, int pos); +ir_node *get_Block_cfg_out(const ir_node *node, int pos); /** Access predecessor n, honor keep-alives. */ -ir_node *get_Block_cfg_out_ka(ir_node *node, int pos); +ir_node *get_Block_cfg_out_ka(const ir_node *node, int pos); /** Walks over the graph starting at node. Walks also if graph is in state "outs_inconsistent". Assumes current_ir_graph is set properly. */ @@ -75,6 +88,13 @@ void irg_out_block_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post, void *env); +/** + * returns 1 if outs have been computed for a node, 0 otherwise. + * + * this is usefull to detect newly created nodes that have no outs set yet + */ +int get_irn_outs_computed(const ir_node *node); + /*------------------------------------------------------------------*/ /* Building and Removing the out datastructure */ /*------------------------------------------------------------------*/