X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode_t.h;h=fa24090fad64bf4bd711379321eeb50998b49c22;hb=e570f00fb465d212dde403160e97ab45d36d1d7e;hp=68a83407c7ffb20e2d5733945870d83f0877cc0f;hpb=6474dc8e951a231d0bb6c3face8fd75449807bf1;p=libfirm diff --git a/ir/ir/irnode_t.h b/ir/ir/irnode_t.h index 68a83407c..fa24090fa 100644 --- a/ir/ir/irnode_t.h +++ b/ir/ir/irnode_t.h @@ -32,6 +32,7 @@ # include "firm_common_t.h" # include "irdom_t.h" /* For size of struct dom_info. */ # include "dbginfo.h" +# include "irloop.h" # include "exc.h" @@ -39,29 +40,33 @@ /** Block attributes */ typedef struct { + /* General attributes */ + ir_graph *irg; unsigned long block_visited; /**< for the walker that walks over all blocks. */ /* Attributes private to construction: */ bool matured; /**< if set, all in-nodes of the block are fixed */ struct ir_node **graph_arr; /**< array to store all parameters */ + /* Attributes holding analyses information */ struct dom_info dom; /**< Datastructure that holds information about dominators. - @todo - Eventually overlay with graph_arr as only valid - in different phases. Eventually inline the whole - datastructure. */ - exc_t exc; /**< role of this block for exception handling */ - ir_node *handler_entry; /**< handler entry block iff this block is part of a region */ + @@@ @todo + Eventually overlay with graph_arr as only valid + in different phases. Eventually inline the whole + datastructure. */ + // exc_t exc; /**< role of this block for exception handling */ + // ir_node *handler_entry; /**< handler entry block iff this block is part of a region */ ir_node ** in_cg; /**< array with predecessors in * interprocedural_view, if they differ * from intraprocedural predecessors */ int *backedge; /**< Field n set to true if pred n is backedge. - @todo Ev. replace by bitfield! */ + @@@ @todo Ev. replace by bitfield! */ int *cg_backedge; /**< Field n set to true if pred n is interprocedural backedge. - @todo Ev. replace by bitfield! */ + @@@ @todo Ev. replace by bitfield! */ } block_attr; /** Start attributes */ typedef struct { - ir_graph *irg; + char dummy; + // ir_graph *irg; @@@ now in block } start_attr; /** Cond attributes */ @@ -128,14 +133,17 @@ typedef struct { /** EndReg/EndExcept attributes */ typedef struct { - ir_graph * irg; /**< ir_graph this node belongs to (for - * navigating in interprocedural graphs) */ + char dummy; + // ir_graph * irg; /**< ir_graph this node belongs to (for + // * navigating in interprocedural graphs) + // @@@ now in block */ } end_attr; /** CallBegin attributes */ typedef struct { - ir_graph * irg; /**< ir_graph this node belongs to (for - * navigating in interprocedural graphs) */ + // ir_graph * irg; / **< ir_graph this node belongs to (for + // * navigating in interprocedural graphs) */ + // @@@ now in block ir_node * call; /**< associated Call-operation */ } callbegin_attr; @@ -202,6 +210,9 @@ struct ir_node { int node_nr; /**< a unique node number for each node to make output readable. */ #endif + /* ------- For analyses -------- */ + ir_loop *loop; /**< the loop the node is in. Access routines in irloop.h */ + /* ------- Opcode depending fields -------- */ attr attr; /**< attribute of this node. Depends on opcode. Must be last field of struct ir_node. */ }; @@ -209,7 +220,7 @@ struct ir_node { /** Copies all attributes stored in the old node to the new node. Assumes both have the same opcode and sufficient size. */ void -copy_attrs (ir_node *old, ir_node *new); +copy_attrs(const ir_node *old_node, ir_node *new_node); /** Returns the array with the ins. The content of the array may not be @@ -224,6 +235,7 @@ INLINE alloc_attr get_irn_alloc_attr (ir_node *node); INLINE type *get_irn_free_attr (ir_node *node); INLINE symconst_attr get_irn_symconst_attr (ir_node *node); type *get_irn_call_attr (ir_node *node); +type *get_irn_funccall_attr (ir_node *node); sel_attr get_irn_sel_attr (ir_node *node); int get_irn_phi_attr (ir_node *node); block_attr get_irn_block_attr (ir_node *node);