X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firtypes.h;h=f94017ac60b6c1dc58d6468fb16577e4463ae1fb;hb=03a0b8a1e06fb7837b2a99ec64eefeddeeddfa7a;hp=4dbae00f926a66654f2a8c475aa93491bf2fe2e4;hpb=a824d376c1c37f80c7e1ebd6304665380d28fc5f;p=libfirm diff --git a/ir/ir/irtypes.h b/ir/ir/irtypes.h index 4dbae00f9..f94017ac6 100644 --- a/ir/ir/irtypes.h +++ b/ir/ir/irtypes.h @@ -34,6 +34,7 @@ #include "irgraph.h" #include "iredgekinds.h" #include "irtypeinfo.h" +#include "irextbb.h" #include "execution_frequency.h" #include "irmemory.h" #include "callgraph.h" @@ -127,7 +128,6 @@ typedef struct { 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 has_label:1; /**< Set if this block has a label assigned. */ 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 */ @@ -145,7 +145,7 @@ typedef struct { 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_label_t label; /**< The block label if assigned. */ + 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. */ @@ -153,9 +153,9 @@ typedef struct { /** Cond attributes. */ typedef struct { - cond_kind kind; /**< flavor of Cond */ - long default_proj; /**< only for non-binary Conds: biggest Proj number, i.e. the one used for default. */ - cond_jmp_predicate pred; /**< only for binary Conds: The jump predication. */ + cond_kind kind; /**< flavor of Cond */ + 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; /** Const attributes. */ @@ -173,7 +173,7 @@ typedef struct { /** Sel attributes. */ typedef struct { - ir_entity *ent; /**< entity to select */ + ir_entity *entity; /**< entity to select */ } sel_attr; /** Exception attributes. */ @@ -189,10 +189,17 @@ typedef struct { /** Call attributes. */ typedef struct { except_attr exc; /**< the exception attribute. MUST be the first one. */ - ir_type *cld_tp; /**< type of called procedure */ + ir_type *type; /**< type of called procedure */ ir_entity ** callee_arr; /**< result of callee analysis */ } call_attr; +/** Builtin attributes. */ +typedef struct { + except_attr exc; /**< the exception attribute. MUST be the first one. */ + ir_builtin_kind kind; /**< kind of the called builtin procedure */ + ir_type *type; /**< type of called builtin procedure */ +} builtin_attr; + /** Alloc attributes. */ typedef struct { except_attr exc; /**< the exception attribute. MUST be the first one. */ @@ -226,7 +233,7 @@ typedef struct { /** Cast attributes. */ typedef struct { - ir_type *totype; /**< Type of the casted node. */ + ir_type *type; /**< Type of the casted node. */ } cast_attr; /** Load attributes. */ @@ -234,7 +241,7 @@ typedef struct { except_attr exc; /**< The exception attribute. MUST be the first one. */ unsigned volatility:1; /**< The volatility of this Load operation. */ unsigned aligned:1; /**< The align attribute of this Load operation. */ - ir_mode *load_mode; /**< The mode of this Load operation. */ + ir_mode *mode; /**< The mode of this Load operation. */ } load_attr; /** Store attributes. */ @@ -266,7 +273,7 @@ typedef struct { /** CopyB attribute. */ typedef struct { except_attr exc; /**< The exception attribute. MUST be the first one. */ - ir_type *data_type; /**< Type of the copied entity. */ + ir_type *type; /**< Type of the copied entity. */ } copyb_attr; /** Bound attribute. */ @@ -282,7 +289,7 @@ typedef struct { /** Div/Mod/DivMod/Quot attribute. */ typedef struct { except_attr exc; /**< The exception attribute. MUST be the first one. */ - ir_mode *res_mode; /**< Result mode for the division. */ + ir_mode *resmode; /**< Result mode for the division. */ char no_remainder; /**< Set, if known that a division can be done without a remainder. */ } divmod_attr; @@ -304,7 +311,8 @@ typedef union { const_attr con; /**< For Const: contains the value of the constant and a type */ symconst_attr symc; /**< For SymConst. */ sel_attr sel; /**< For Sel. */ - call_attr call; /**< For Call: pointer to the type of the method to call */ + 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. */ @@ -357,6 +365,7 @@ struct ir_node { void *link; /**< To attach additional information to the node, e.g. used during optimization to link to nodes that 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. */ @@ -364,8 +373,6 @@ struct ir_node { #ifdef DEBUG_libfirm unsigned out_valid : 1; unsigned flags : 31; - long 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 */ @@ -408,7 +415,6 @@ enum irg_anchors { thread local data. */ anchor_initial_mem, /**< initial memory of this graph */ anchor_args, /**< methods arguments */ - anchor_value_param_base, /**< method value param base */ anchor_bad, /**< bad node of this ir_graph, the one and only in this graph */ anchor_no_mem, /**< NoMem node of this ir_graph, the one and only in this graph */ @@ -444,6 +450,7 @@ 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. */ @@ -460,9 +467,6 @@ struct ir_graph { unsigned fp_model; /**< floating point model of the graph. */ /* -- Fields for construction -- */ -#if USE_EXPLICIT_PHI_IN_STACK - struct Phi_in_stack *Phi_in_stack; /**< Needed for automatic Phi construction. */ -#endif int n_loc; /**< Number of local variables in this procedure including procedure parameters. */ void **loc_descriptions; /**< Storage for local variable descriptions. */ @@ -480,11 +484,11 @@ struct ir_graph { unsigned *caller_isbe; /**< For callgraph analysis: raw bitset if backedge info calculated. */ cg_callee_entry **callees; /**< For callgraph analysis: list of callee calls */ unsigned *callee_isbe; /**< For callgraph analysis: raw bitset if backedge info calculated. */ + ir_loop *l; /**< For callgraph analysis. */ int callgraph_loop_depth; /**< For callgraph analysis */ int callgraph_recursion_depth; /**< For callgraph analysis */ double method_execution_frequency; /**< For callgraph analysis */ - ir_loop *l; /**< For callgraph analysis. */ /* -- Fields for Walking the graph -- */ ir_visited_t visited; /**< this flag is an identifier for @@ -509,7 +513,7 @@ struct ir_graph { #endif #ifndef NDEBUG - ir_resources_t reserved_resources;/**< Bitset for tracking used resources. */ + ir_resources_t reserved_resources; /**< Bitset for tracking used local resources. */ #endif }; @@ -562,8 +566,9 @@ struct ir_prog { ir_exc_region_t last_region_nr; /**< The last exception region number that was assigned. */ ir_label_t last_label_nr; /**< The highest label number for generating unique labels. */ int max_irg_idx; /**< highest unused irg index */ -#ifdef DEBUG_libfirm long max_node_nr; /**< to generate unique numbers for nodes. */ +#ifndef NDEBUG + ir_resources_t reserved_resources; /**< Bitset for tracking used global resources. */ #endif };