X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firtypes.h;h=5e30eec55761cbcd02b4b8655e6bdc7dbd235ab6;hb=ea68f3f7a13e0b7742bfaa643e109302bc023e9c;hp=b17c1c12323b4c0f44447d64596179af1de70b69;hpb=9caf2352d0859bfaba872eb8aee97ff93293dc74;p=libfirm diff --git a/ir/ir/irtypes.h b/ir/ir/irtypes.h index b17c1c123..5e30eec55 100644 --- a/ir/ir/irtypes.h +++ b/ir/ir/irtypes.h @@ -34,7 +34,6 @@ #include "irgraph.h" #include "iredgekinds.h" #include "irtypeinfo.h" -#include "irextbb.h" #include "irmemory.h" #include "callgraph.h" #include "irprog.h" @@ -205,27 +204,16 @@ typedef struct block_attr { 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 */ - ir_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. */ + ir_dom_info dom; /**< Datastructure that holds information about dominators. */ ir_dom_info pdom; /**< Datastructure that holds information about post-dominators. */ - ir_node ** in_cg; /**< array with predecessors in - * interprocedural_view, if they differ - * from intraprocedural predecessors */ 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_entity *entity; /**< entitiy representing this block */ 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. */ + double execfreq; /**< block execution frequency */ } block_attr; /** Cond attributes. */ typedef struct cond_attr { - 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; @@ -296,16 +284,16 @@ typedef struct cast_attr { /** Load attributes. */ typedef struct load_attr { except_attr exc; /**< The exception attribute. MUST be the first one. */ - unsigned volatility:1; /**< The volatility of this Load operation. */ - unsigned unaligned:1; /**< The align attribute of this Load operation. */ + ir_volatility volatility:1; /**< The volatility of this Load operation. */ + ir_align unaligned:1; /**< The align attribute of this Load operation. */ ir_mode *mode; /**< The mode of this Load operation. */ } load_attr; /** Store attributes. */ typedef struct store_attr { except_attr exc; /**< the exception attribute. MUST be the first one. */ - unsigned volatility:1; /**< The volatility of this Store operation. */ - unsigned unaligned:1; /**< The align attribute of this Store operation. */ + ir_volatility volatility:1; /**< The volatility of this Store operation. */ + ir_align unaligned:1; /**< The align attribute of this Store operation. */ } store_attr; typedef struct phi_attr { @@ -342,11 +330,6 @@ typedef struct bound_attr { except_attr exc; /**< The exception attribute. MUST be the first one. */ } bound_attr; -/** Conv attribute. */ -typedef struct conv_attr { - char strict; /**< If set, this is a strict Conv that cannot be removed. */ -} conv_attr; - /** Div attribute. */ typedef struct div_attr { except_attr exc; /**< The exception attribute. MUST be the first one. */ @@ -405,7 +388,6 @@ typedef union ir_attr { except_attr except; /**< For Phi node construction in case of exceptions */ copyb_attr copyb; /**< For CopyB operation */ bound_attr bound; /**< For Bound operation */ - conv_attr conv; /**< For Conv operation */ div_attr div; /**< For Div operation */ mod_attr mod; /**< For Mod operation */ asm_attr assem; /**< For ASM operation. */ @@ -431,6 +413,11 @@ typedef struct ir_def_use_edge { int pos; /** The position of this edge in use's input array. */ } ir_def_use_edge; +typedef struct ir_def_use_edges { + unsigned n_edges; + ir_def_use_edge edges[]; +} ir_def_use_edges; + /** * The common structure of an irnode. * If the node has some attributes, they are stored in the attr field. @@ -448,13 +435,12 @@ struct ir_node { shall replace a node. */ long node_nr; /**< A globally unique node number for each node. */ /* ------- Fields for optimizations / analysis information ------- */ - ir_def_use_edge *out; /**< array of def-use edges. */ - struct dbg_info *dbi; /**< A pointer to information for debug support. */ - /* ------- For debugging ------- */ -#ifdef DEBUG_libfirm - unsigned out_valid : 1; - unsigned flags : 31; -#endif + union { + ir_def_use_edges *out; /**< array of def-use edges. */ + unsigned n_outs; /**< number of def-use edges (temporarily used + during construction of datastructure ) */ + } o; + struct dbg_info *dbi; /**< A pointer to information for debug support. */ /* ------- For analyses -------- */ ir_loop *loop; /**< the loop the node is in. Access routines in irloop.h */ struct ir_node **deps; /**< Additional dependencies induced by state. */ @@ -518,7 +504,7 @@ typedef struct ir_vrp_info { struct ir_graph { firm_kind kind; /**< Always set to k_ir_graph. */ /* -- Basics of the representation -- */ - unsigned last_node_idx; /**< The last IR node index for this graph. */ + unsigned last_node_idx; /**< The last IR node index for this graph. */ ir_entity *ent; /**< The entity of this procedure, i.e., the type of the procedure and the class it belongs to. */ @@ -527,19 +513,19 @@ struct ir_graph { ir_node *anchor; /**< Pointer to the anchor node of this graph. */ struct obstack *obst; /**< The obstack where all of the ir_nodes live. */ ir_node *current_block; /**< Current block for newly gen_*()-erated ir_nodes. */ - struct obstack *extbb_obst; /**< The obstack for extended basic block info. */ /* -- Fields for graph properties -- */ irg_inline_property inline_property; /**< How to handle inlineing. */ mtp_additional_properties additional_properties; /**< Additional graph properties. */ /* -- Fields indicating different states of irgraph -- */ - ir_graph_state_t state; - irg_phase_state phase_state; /**< Compiler phase. */ - op_pin_state irg_pinned_state; /**< Flag for status of nodes. */ - ir_typeinfo_state typeinfo_state; /**< Validity of type information. */ - irg_callee_info_state callee_info_state; /**< Validity of callee information. */ - ir_class_cast_state class_cast_state; /**< Kind of cast operations in code. */ + ir_graph_properties_t properties; + ir_graph_constraints_t constraints; + irg_phase_state phase_state; /**< Compiler phase. */ + op_pin_state irg_pinned_state; /**< Flag for status of nodes. */ + ir_typeinfo_state typeinfo_state; /**< Validity of type information. */ + irg_callee_info_state callee_info_state; /**< Validity of callee information. */ + ir_class_cast_state class_cast_state; /**< Kind of cast operations in code. */ unsigned mem_disambig_opt; /**< Options for the memory disambiguator. */ unsigned fp_model; /**< floating point model of the graph. */ @@ -551,10 +537,12 @@ struct ir_graph { /* -- Fields for optimizations / analysis information -- */ pset *value_table; /**< Hash table for global value numbering (cse) for optimizing use in iropt.c */ - ir_def_use_edge *outs; /**< Space for the Def-Use arrays. */ + struct obstack out_obst; /**< Space for the Def-Use arrays. */ + bool out_obst_allocated; ir_vrp_info vrp; /**< vrp info */ ir_loop *loop; /**< The outermost loop for this graph. */ + ir_dom_front_info_t domfront; /**< dominance frontier analysis data */ void *link; /**< A void* field to link any information to the node. */ @@ -588,7 +576,6 @@ struct ir_graph { unsigned dump_nr; /**< number of graph dumps */ #ifdef DEBUG_libfirm - int n_outs; /**< Size wasted for outs */ long graph_nr; /**< a unique graph number for each graph to make output readable. */ #endif @@ -629,6 +616,7 @@ struct ir_prog { ir_type *none_type; /**< unique 'none'-type */ ir_type *code_type; /**< unique 'code'-type */ ir_type *unknown_type; /**< unique 'unknown'-type */ + ir_type *byte_type; /**< type for a 'byte' */ ident **global_asms; /**< An array of global ASM insertions. */ /* -- states of and access to generated information -- */ @@ -657,7 +645,6 @@ struct ir_prog { size_t max_irg_idx; /**< highest unused irg index */ long max_node_nr; /**< to generate unique numbers for nodes. */ unsigned dump_nr; /**< number of program info dumps */ - unsigned optimization_dumps :1; /**< dump irg on each optimization */ #ifndef NDEBUG irp_resources_t reserved_resources; /**< Bitset for tracking used global resources. */ #endif