X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Fircons.h;h=545e38691dc1e08ba05605bbd2d8efbad2dbaf63;hb=a9480327c81a9d2ee3a48834e490c5fbfd65d902;hp=d97442c6ca791aa12de9ca65dd28dd244b47b7e8;hpb=6dd417e1838c9319956dd3a658791ce413099b7f;p=libfirm diff --git a/ir/ir/ircons.h b/ir/ir/ircons.h index d97442c6c..545e38691 100644 --- a/ir/ir/ircons.h +++ b/ir/ir/ircons.h @@ -296,6 +296,7 @@ * ir_node *new_InstOf (ir_node *store, ir_node obj, ir_type *ent); * ir_node *new_Raise (ir_node *store, ir_node *obj); * ir_node *new_Bound (ir_node *store, ir_node *idx, ir_node *lower, ir_node *upper); + * ir_node *new_Pin (ir_node *node); * * void add_immBlock_pred (ir_node *block, ir_node *jmp); * void mature_immBlock (ir_node *block); @@ -1030,6 +1031,13 @@ * Describes a high level bounds check. Must be lowered to a Call to a runtime check * function. * + * ir_node *new_Pin (ir_node *node); + * ----------------------------------------------------------------------------------- + * + * Pin the value of the node node in the current block No users of the Pin node can + * float above the Block of the Pin. The node cannot float behind this block. Often + * used to Pin the NoMem node. + * * * COPING WITH DATA OBJECTS * ======================== @@ -1044,7 +1052,7 @@ * * All values known in a Block are listed in the block's attribute, * block.**graph_arr which is used to automatically insert Phi nodes. - * The following two funcions can be used to add a newly computed value + * The following two functions can be used to add a newly computed value * to the array, or to get the producer of a value, i.e., the current * live value. * @@ -1943,7 +1951,7 @@ ir_node *new_rd_Raise (dbg_info *db, ir_graph *irg, ir_node *block, * @param *db A pointer for debug information. * @param *irg The ir graph the node belong to. * @param *block The block the node belong to. - * @param *store The current memory + * @param *store The current memory. * @param *idx The ir_node that represents an index. * @param *lower The ir_node that represents the lower bound for the index. * @param *upper The ir_node that represents the upper bound for the index. @@ -1951,6 +1959,15 @@ ir_node *new_rd_Raise (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *new_rd_Bound(dbg_info *db, ir_graph *irg, ir_node *block, ir_node *store, ir_node *idx, ir_node *lower, ir_node *upper); +/** Constructor for a Pin node. + * + * @param *db A pointer for debug information. + * @param *irg The ir graph the node belong to. + * @param *block The block the node belong to. + * @param *node The node which value should be pinned. + */ +ir_node *new_rd_Pin(dbg_info *db, ir_graph *irg, ir_node *block, ir_node *node); + /*-------------------------------------------------------------------------*/ /* The raw interface without debug support */ /*-------------------------------------------------------------------------*/ @@ -2706,7 +2723,7 @@ ir_node *new_r_Raise (ir_graph *irg, ir_node *block, * * @param *irg The ir graph the node belong to. * @param *block The block the node belong to. - * @param *store The current memory + * @param *store The current memory. * @param *idx The ir_node that represents an index. * @param *lower The ir_node that represents the lower bound for the index. * @param *upper The ir_node that represents the upper bound for the index. @@ -2714,6 +2731,14 @@ ir_node *new_r_Raise (ir_graph *irg, ir_node *block, ir_node *new_r_Bound(ir_graph *irg, ir_node *block, ir_node *store, ir_node *idx, ir_node *lower, ir_node *upper); +/** Constructor for a Pin node. + * + * @param *irg The ir graph the node belong to. + * @param *block The block the node belong to. + * @param *node The node which value should be pinned. + */ +ir_node *new_r_Pin(ir_graph *irg, ir_node *block, ir_node *node); + /*-----------------------------------------------------------------------*/ /* The block oriented interface */ /*-----------------------------------------------------------------------*/ @@ -3468,6 +3493,13 @@ ir_node *new_d_Raise (dbg_info *db, ir_node *store, ir_node *obj); */ ir_node *new_d_Bound(dbg_info *db, ir_node *store, ir_node *idx, ir_node *lower, ir_node *upper); +/** Constructor for a Pin node. + * + * @param *db A pointer for debug information. + * @param *node The node which value should be pinned. + */ +ir_node *new_d_Pin(dbg_info *db, ir_node *node); + /*-----------------------------------------------------------------------*/ /* The block oriented interface without debug support */ /*-----------------------------------------------------------------------*/ @@ -3597,6 +3629,38 @@ ir_node *new_Const_long(ir_mode *mode, long value); * Derives mode from passed type. */ ir_node *new_Const_type(tarval *con, ir_type *tp); +/** Constructor for a SymConst node. + * + * Adds the node to the block in current_ir_block. + * This is the constructor for a symbolic constant. + * There are four kinds of symbolic constants: + * -# type_tag The symbolic constant represents a type tag. The type the + * tag stands for is given explicitly. + * -# size The symbolic constant represents the size of a type. The + * type of which the constant represents the size is given + * explicitly. + * -# align The symbolic constant represents the alignment of a type. The + * type of which the constant represents the size is given + * explicitly. + * -# addr_name The symbolic constant represents the address of an entity + * (variable or method). The variable is indicated by a name + * that is valid for linking. + * -# addr_ent The symbolic constant represents the address of an entity + * (variable or method). The variable is given explicitly by + * a firm entity. + * + * Inputs to the node: + * No inputs except the block it belongs to. + * Outputs of the node. + * An unsigned integer (I_u) or a pointer (P). + * + * @param value A type or a ident depending on the SymConst kind. + * @param kind The kind of the symbolic constant: symconst_type_tag, symconst_type_size + * symconst_type_align, symconst_addr_name or symconst_addr_ent. + * @param tp The source type of the constant. + */ +ir_node *new_SymConst_type (union symconst_symbol value, symconst_kind kind, ir_type *tp); + /** Constructor for a SymConst node. * * Adds the node to the block in current_ir_block. @@ -4134,6 +4198,12 @@ ir_node *new_Raise (ir_node *store, ir_node *obj); */ ir_node *new_Bound(ir_node *store, ir_node *idx, ir_node *lower, ir_node *upper); +/** Constructor for a Pin node. + * + * @param *node The node which value should be pinned. + */ +ir_node *new_Pin(ir_node *node); + /*---------------------------------------------------------------------*/ /* The comfortable interface. */ /* Supports automatic Phi node construction. */