X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firtypes.h;h=ebb68e8b8838bca03eacf8b70f43e1c8d10f1569;hb=081ef4f7ca73620500e5494f882ee6095c8bb983;hp=41b93515b446e7aba9db95ef01ea11eeea9a4263;hpb=12b680b45d40312393d75644484cf72f8215666d;p=libfirm diff --git a/ir/ir/irtypes.h b/ir/ir/irtypes.h index 41b93515b..ebb68e8b8 100644 --- a/ir/ir/irtypes.h +++ b/ir/ir/irtypes.h @@ -143,6 +143,7 @@ typedef struct { ir_region *region; /**< The immediate structural region this block belongs to. */ unsigned mb_depth; /**< The macroblock depth: A distance from the macroblock header */ ir_label_t label; /**< The block label if assigned. */ + ir_node *phis; /**< The list of Phi nodes in this block. */ struct list_head succ_head; /**< A list head for all successor edges of a block. */ } block_attr; @@ -241,13 +242,18 @@ typedef struct { } store_attr; typedef struct { - int pos; /**< For Phi0. Used to remember the value defined by - this Phi node. Needed when the Phi is completed - to call get_r_internal_value to find the - predecessors. If this attribute is set, the Phi - node takes the role of the obsolete Phi0 node, - therefore the name. */ -} phi0_attr; + ir_node *next; /**< Points to the next Phi in the Phi list of a block. */ + union { + unsigned *backedge; /**< Raw Bitfield: bit n is set to true if pred n is backedge. */ + int pos; /**< For Phi0. Used to remember the value defined by + this Phi node. Needed when the Phi is completed + to call get_r_internal_value() to find the + predecessors. If this attribute is set, the Phi + node takes the role of the obsolete Phi0 node, + therefore the name. */ + } u; +} phi_attr; + /**< Confirm attribute. */ typedef struct { @@ -274,6 +280,7 @@ typedef struct { typedef struct { except_attr exc; /**< The exception attribute. MUST be the first one. */ ir_mode *res_mode; /**< Result mode for the division. */ + char no_remainder; /**< Set, if known that a division can be done without a remainder. */ } divmod_attr; /** Inline Assembler support attribute. */ @@ -301,9 +308,7 @@ typedef union { cast_attr cast; /**< For Cast. */ load_attr load; /**< For Load. */ store_attr store; /**< For Store. */ - phi0_attr phi0; /**< for Phi0 nodes. */ - unsigned *phi_backedge; /**< For Phi after construction. - Raw Bitfield n set to true if pred n is backedge. */ + phi_attr phi; /**< For Phi. */ long proj; /**< For Proj: contains the result position to project */ confirm_attr confirm; /**< For Confirm: compare operation and region. */ filter_attr filter; /**< For Filter */ @@ -392,9 +397,8 @@ enum irg_anchors { anchor_start, /**< start node of this ir_graph */ anchor_end_reg, /**< end node of this ir_graph */ anchor_end_except, /**< end node of this ir_graph */ - anchor_frame, /**< method's frame */ - anchor_globals, /**< pointer to the data segment containing all - globals as well as global procedures. */ + anchor_initial_exec, /**< methods initial control flow */ + anchor_frame, /**< methods frame */ anchor_tls, /**< pointer to the thread local storage containing all thread local data. */ anchor_initial_mem, /**< initial memory of this graph */ @@ -499,7 +503,7 @@ struct ir_graph { #endif #ifndef NDEBUG - unsigned using_visited : 1; /**< set to 1 if we are currently using the visited flag */ + unsigned using_irn_visited : 1; /**< set to 1 if we are currently using the visited flag */ unsigned using_block_visited : 1; /**< set to 1 if we are currently using the block_visited flag */ unsigned using_irn_link : 1; /**< set to 1 if we are currently using the irn_link fields */ #endif @@ -521,6 +525,8 @@ struct ir_prog { have fields and procedures. */ ir_type *tls_type; /**< The thread local storage type. Must be a struct as it can only have fields. */ + ir_type *constructors_type; /**< contains links to module constructor + functions. Must be a struct */ 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. */