X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fir%2Firtypes.h;h=93ecb8a79872032cb066638b9718f253b5923b0c;hb=6f37b3f5178996ef665bae4df2efac5aa5446c4a;hp=b78cdd9d7570ac7ab69003397714284cb67cc81e;hpb=efe2efd4a5a5528b7784233e0395ea792c0c784e;p=libfirm diff --git a/ir/ir/irtypes.h b/ir/ir/irtypes.h index b78cdd9d7..93ecb8a79 100644 --- a/ir/ir/irtypes.h +++ b/ir/ir/irtypes.h @@ -39,7 +39,7 @@ #include "callgraph.h" #include "irprog.h" #include "field_temperature.h" -#include "irphases_t.h" +#include "irphase.h" #include "pset.h" #include "set.h" @@ -47,6 +47,15 @@ #include "obst.h" #include "vrp.h" +/** + * List of phases. (We will add a register/unregister interface if managing + * this gets too tedious) + */ +typedef enum ir_phase_id { + PHASE_VRP, + PHASE_LAST = PHASE_VRP +} ir_phase_id; + /** The type of an ir_op. */ struct ir_op { unsigned code; /**< The unique opcode of the op. */ @@ -116,7 +125,7 @@ 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; @@ -161,8 +170,8 @@ typedef struct { /** Const attributes. */ typedef struct { - tarval *tv; /**< the target value */ - ir_type *tp; /**< the source type, for analyses. default: type_unknown. */ + tarval *tarval; /**< the target value */ + ir_type *tp; /**< the source type, for analyses. default: type_unknown. */ } const_attr; /** SymConst attributes. */ @@ -219,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. */ @@ -296,11 +293,11 @@ typedef struct { /** Inline Assembler support attribute. */ typedef struct { /* BEWARE: pin state MUST be the first attribute */ - op_pin_state pin_state; /**< the pin state for operations that might generate a exception */ - ident *asm_text; /**< The inline assembler text. */ - ir_asm_constraint *inputs; /**< Input constraints. */ - ir_asm_constraint *outputs; /**< Output constraints. */ - ident **clobber; /**< List of clobbered registers. */ + op_pin_state pin_state; /**< the pin state for operations that might generate a exception */ + ident *text; /**< The inline assembler text. */ + ir_asm_constraint *input_constraints; /**< Input constraints. */ + ir_asm_constraint *output_constraints; /**< Output constraints. */ + ident **clobbers; /**< List of clobbered registers. */ } asm_attr; /** Some IR-nodes just have one attribute, these are stored here, @@ -314,7 +311,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 */ @@ -324,7 +320,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 */ @@ -336,7 +331,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. */ @@ -347,7 +342,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; @@ -392,7 +387,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. */ @@ -410,8 +405,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 @@ -453,18 +446,18 @@ struct ir_graph { unsigned additional_properties; /**< Additional graph properties. */ /* -- Fields indicating different states of irgraph -- */ - unsigned state; - irg_phase_state phase_state; /**< Compiler phase. */ - op_pin_state irg_pinned_state; /**< Flag for status of nodes. */ - irg_outs_state outs_state; /**< Out edges. */ - irg_dom_state dom_state; /**< Dominator state information. */ - irg_dom_state pdom_state; /**< Post Dominator state information. */ - ir_typeinfo_state typeinfo_state; /**< Validity of type information. */ + ir_graph_state_t state; + irg_phase_state phase_state; /**< Compiler phase. */ + op_pin_state irg_pinned_state; /**< Flag for status of nodes. */ + irg_outs_state outs_state; /**< Out edges. */ + irg_dom_state dom_state; /**< Dominator state information. */ + irg_dom_state pdom_state; /**< Post Dominator state information. */ + ir_typeinfo_state typeinfo_state; /**< Validity of type information. */ irg_callee_info_state callee_info_state; /**< Validity of callee information. */ - irg_loopinfo_state loopinfo_state; /**< State of loop information. */ - ir_class_cast_state class_cast_state; /**< Kind of cast operations in code. */ + irg_loopinfo_state loopinfo_state; /**< State of loop information. */ + ir_class_cast_state class_cast_state; /**< Kind of cast operations in code. */ irg_extblk_info_state extblk_state; /**< State of extended basic block info. */ - exec_freq_state execfreq_state; /**< Execution frequency state. */ + exec_freq_state execfreq_state; /**< Execution frequency state. */ ir_entity_usage_computed_state entity_usage_state; unsigned mem_disambig_opt; /**< Options for the memory disambiguator. */ unsigned fp_model; /**< floating point model of the graph. */ @@ -508,8 +501,10 @@ struct ir_graph { ir_node **idx_irn_map; /**< Array mapping node indexes to nodes. */ int index; /**< a unique number for each graph */ - ir_phase *phases[PHASE_LAST]; /**< Phase information. */ + ir_phase *phases[PHASE_LAST+1]; /**< Phase information. */ void *be_data; /**< backend can put in private data here */ + + 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 @@ -542,7 +537,6 @@ struct ir_prog { ir_graph *main_irg; /**< The entry point to the compiled program or NULL if no point exists. */ ir_graph **graphs; /**< A list of all graphs in the ir. */ - ir_graph **pseudo_graphs; /**< A list of all pseudo graphs in the ir. See pseudo_irg.c */ ir_graph *const_code_irg; /**< This ir graph gives the proper environment to allocate nodes the represent values of constant entities. It is not meant as @@ -556,8 +550,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. */ @@ -585,6 +577,7 @@ struct ir_prog { ir_label_t last_label_nr; /**< The highest label number for generating unique labels. */ int 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 */ #ifndef NDEBUG ir_resources_t reserved_resources; /**< Bitset for tracking used global resources. */ #endif