X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firtypes.h;h=017a2915a36f202376c325361687f4c6892f61c8;hb=2af4a97900b435e35d7c20350604e3863aff2b4c;hp=c10b4e41a0b4a78e61b5335126cee409dfded464;hpb=9d564d6198d8a1e36a3a9c9ec9ca4d13c6acd153;p=libfirm diff --git a/ir/ir/irtypes.h b/ir/ir/irtypes.h index c10b4e41a..017a2915a 100644 --- a/ir/ir/irtypes.h +++ b/ir/ir/irtypes.h @@ -45,6 +45,7 @@ #include "set.h" #include "list.h" #include "obst.h" +#include "vrp.h" struct ir_phase; @@ -156,7 +157,6 @@ typedef struct { /** Cond attributes. */ typedef struct { - cond_kind kind; /**< flavor of Cond */ long default_proj; /**< only for non-binary Conds: biggest Proj number, i.e. the one used for default. */ cond_jmp_predicate jmp_pred; /**< only for binary Conds: The jump predication. */ } cond_attr; @@ -305,6 +305,21 @@ typedef struct { ident **clobber; /**< List of clobbered registers. */ } asm_attr; +/** VRP information */ +typedef struct { + int valid; /**< 0: VRP info invalid, 1: VRP info valid (not + neccessarily updated) */ + tarval *bits_set; /**< The bits which, by analysis, are definitely set */ + tarval *bits_not_set; /**< The bits which by analysis are definitely not set */ + ir_node *bits_node; /**< The node, from which the rest of the bits + are set */ + enum range_types range_type;/**< The range represented by range_top, range_bottom */ + tarval *range_bottom, *range_top; + ir_node *range_node; /**< The node to which the range is relative */ + enum range_ops range_op; /**< The op which describes the relation + between range_node and range */ +} vrp_attr; + /** Some IR-nodes just have one attribute, these are stored here, some have more. Their name is 'irnodename_attr' */ typedef union { @@ -340,7 +355,8 @@ typedef union { */ typedef struct _irn_edge_kind_info_t { struct list_head outs_head; /**< The list of all outs. */ - int out_count; /**< Number of outs in the list. */ + unsigned edges_built : 1; /**< Set edges where built for this node. */ + unsigned out_count : 31; /**< Number of outs in the list. */ } irn_edge_info_t; typedef irn_edge_info_t irn_edges_info_t[EDGE_KIND_LAST]; @@ -382,6 +398,8 @@ struct ir_node { struct ir_node **deps; /**< Additional dependencies induced by state. */ void *backend_info; irn_edges_info_t edge_info; /**< Everlasting out edges. */ + vrp_attr vrp; /**< Information supplied by VRP */ + /* ------- Opcode depending fields -------- */ attr attr; /**< The set of attributes of this node. Depends on opcode. Must be last field of struct ir_node. */ @@ -547,7 +565,7 @@ struct ir_prog { to allocate nodes the represent values of constant entities. It is not meant as a procedure. */ - ir_type *segment_types[IR_SEGMENT_COUNT]; + ir_type *segment_types[IR_SEGMENT_LAST+1]; ir_type **types; /**< A list of all types in the ir. */ ir_mode **modes; /**< A list of all modes in the ir. */ ir_op **opcodes; /**< A list of all opcodes in the ir. */