X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firtypes.h;h=ac57335dd4b99b156949abd92d708636c7140cb2;hb=b4647d67ab7885d5da32c2a30242fbc4ed93d81b;hp=0df6d12062793f9bf660805c82f6ec99ef4f8da3;hpb=1140301fc5c11fef75f583bc4d94082cfd450fbc;p=libfirm diff --git a/ir/ir/irtypes.h b/ir/ir/irtypes.h index 0df6d1206..ac57335dd 100644 --- a/ir/ir/irtypes.h +++ b/ir/ir/irtypes.h @@ -40,6 +40,7 @@ #include "irprog.h" #include "field_temperature.h" #include "irphase.h" +#include "bitset.h" #include "pset.h" #include "set.h" @@ -111,12 +112,12 @@ struct ir_mode { of all bits and must be dividable by vector_elem */ /* ----------------------------------------------------------------------- */ - tarval *min; /**< the minimum value that can be expressed */ - tarval *max; /**< the maximum value that can be expressed */ - tarval *null; /**< the value 0 */ - tarval *one; /**< the value 1 */ - tarval *minus_one; /**< the value -1 */ - tarval *all_one; /**< the value ~0 */ + ir_tarval *min; /**< the minimum value that can be expressed */ + ir_tarval *max; /**< the maximum value that can be expressed */ + ir_tarval *null; /**< the value 0 */ + ir_tarval *one; /**< the value 1 */ + ir_tarval *minus_one; /**< the value -1 */ + ir_tarval *all_one; /**< the value ~0 */ ir_mode *eq_signed; /**< For pointer modes, the equivalent signed integer one. */ ir_mode *eq_unsigned; /**< For pointer modes, the equivalent unsigned integer one. */ void *link; /**< To store some intermediate information */ @@ -125,11 +126,15 @@ struct ir_mode { /* ir node attributes */ -/** first attribute of Bad and Block nodes */ +/** first attribute of Bad, Block, Anchor nodes */ typedef struct { ir_graph *irg; /**< The graph this block like node belongs to. */ } irg_attr; +typedef struct { + irg_attr irg; +} bad_attr; + /** Block attributes */ typedef struct { /* General attributes */ @@ -138,7 +143,6 @@ typedef struct { /* Attributes private to construction: */ unsigned is_matured:1; /**< If set, all in-nodes of the block are fixed. */ unsigned is_dead:1; /**< If set, the block is dead (and could be replace by a Bad. */ - unsigned is_mb_head:1; /**< Set if this block is a macroblock head. */ unsigned marked:1; /**< Can be set/unset to temporary mark a block. */ ir_node **graph_arr; /**< An array to store all parameters. */ /* Attributes holding analyses information */ @@ -151,11 +155,10 @@ typedef struct { ir_node ** in_cg; /**< array with predecessors in * interprocedural_view, if they differ * from intraprocedural predecessors */ - unsigned *backedge; /**< Raw Bitfield n set to true if pred n is backedge.*/ - unsigned *cg_backedge; /**< Raw Bitfield n set to true if pred n is interprocedural backedge. */ + bitset_t *backedge; /**< Bitfield n set to true if pred n is backedge.*/ + bitset_t *cg_backedge; /**< Bitfield n set to true if pred n is interprocedural backedge. */ ir_extblk *extblk; /**< The extended basic block this block belongs to. */ ir_region *region; /**< The immediate structural region this block belongs to. */ - unsigned mb_depth; /**< The macroblock depth: A distance from the macroblock header */ ir_entity *entity; /**< entitiy representing this block */ ir_node *phis; /**< The list of Phi nodes in this block. */ @@ -169,16 +172,14 @@ typedef struct { } cond_attr; /** Const attributes. */ -typedef struct { - tarval *tarval; /**< the target value */ - ir_type *tp; /**< the source type, for analyses. default: type_unknown. */ +typedef struct const_attr { + ir_tarval *tarval; /**< the target value */ } const_attr; /** SymConst attributes. */ typedef struct { symconst_symbol sym; // old tori symconst_kind kind; - ir_type *tp; /**< the source type, for analyses. default: type_unknown. */ } symconst_attr; /** Sel attributes. */ @@ -191,7 +192,6 @@ typedef struct { op_pin_state pin_state; /**< the pin state for operations that might generate a exception: If it's know that no exception will be generated, could be set to op_pin_state_floats. */ - struct ir_node **frag_arr; /**< For Phi node construction in case of exception */ } except_attr; /** Call attributes. */ @@ -228,18 +228,6 @@ typedef struct { ir_type *type; /**< the type of which the object pointer must be */ } io_attr; -/** Filter attributes. */ -typedef struct { - long proj; /**< contains the result position to project (Proj) */ - ir_node **in_cg; /**< array with interprocedural predecessors (Phi) */ - unsigned *backedge; /**< Raw Bitfield n set to true if pred n is backedge. */ -} filter_attr; - -/** CallBegin attributes. */ -typedef struct { - ir_node *call; /**< Associated Call-operation. */ -} callbegin_attr; - /** Cast attributes. */ typedef struct { ir_type *type; /**< Type of the casted node. */ @@ -263,7 +251,7 @@ typedef struct { typedef struct { 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. */ + bitset_t *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 @@ -316,6 +304,7 @@ typedef struct { some have more. Their name is 'irnodename_attr' */ typedef union { irg_attr irg; /**< For Blocks and Bad: its belonging irg */ + bad_attr bad; /**< for Bads: irg reference */ block_attr block; /**< For Block: Fields needed to construct it */ cond_attr cond; /**< For Cond. */ const_attr con; /**< For Const: contains the value of the constant and a type */ @@ -323,7 +312,6 @@ typedef union { sel_attr sel; /**< For Sel. */ call_attr call; /**< For Call. */ builtin_attr builtin; /**< For Builtin. */ - callbegin_attr callbegin; /**< For CallBegin. */ alloc_attr alloc; /**< For Alloc. */ free_attr free; /**< For Free. */ io_attr instof; /**< For InstOf */ @@ -333,7 +321,6 @@ typedef union { 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 */ except_attr except; /**< For Phi node construction in case of exceptions */ copyb_attr copyb; /**< For CopyB operation */ bound_attr bound; /**< For Bound operation */ @@ -345,7 +332,7 @@ typedef union { /** * Edge info to put into an irn. */ -typedef struct _irn_edge_kind_info_t { +typedef struct irn_edge_kind_info_t { struct list_head outs_head; /**< The list of all outs. */ unsigned edges_built : 1; /**< Set edges where built for this node. */ unsigned out_count : 31; /**< Number of outs in the list. */ @@ -356,7 +343,7 @@ typedef irn_edge_info_t irn_edges_info_t[EDGE_KIND_LAST]; /** * A Def-Use edge. */ -typedef struct _ir_def_use_edge { +typedef struct ir_def_use_edge { ir_node *use; /** The use node of that edge. */ int pos; /** The position of this edge in use's input array. */ } ir_def_use_edge; @@ -401,7 +388,7 @@ struct ir_node { /** * Edge info to put into an irg. */ -typedef struct _irg_edge_info_t { +typedef struct irg_edge_info_t { ir_edgeset_t edges; /**< A set containing all edges of the current graph. */ struct list_head free_edges; /**< list of all free edges. */ struct obstack edges_obst; /**< Obstack, where edges are allocated on. */ @@ -419,8 +406,6 @@ enum irg_anchors { anchor_start_block, /**< block the start node will belong to */ anchor_end, /**< end node of this ir_graph */ 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_initial_exec, /**< methods initial control flow */ anchor_frame, /**< methods frame */ anchor_tls, /**< pointer to the thread local storage containing all @@ -566,8 +551,6 @@ struct ir_prog { /* -- states of and access to generated information -- */ irg_phase_state phase_state; /**< The state of construction. */ - ip_view_state ip_view; /**< The state of interprocedural view. */ - irg_outs_state outs_state; /**< The state of out edges of ir nodes. */ ir_node **ip_outedges; /**< A huge Array that contains all out edges in interprocedural view. */