X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firtypes.h;h=ebb68e8b8838bca03eacf8b70f43e1c8d10f1569;hb=081ef4f7ca73620500e5494f882ee6095c8bb983;hp=3b1d6b3d6734188b582c2f25902a207ca51f3b1d;hpb=1535324d82eaddebb17a0ece9d5980d5da73e7bb;p=libfirm diff --git a/ir/ir/irtypes.h b/ir/ir/irtypes.h index 3b1d6b3d6..ebb68e8b8 100644 --- a/ir/ir/irtypes.h +++ b/ir/ir/irtypes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -38,17 +38,21 @@ #include "irmemory.h" #include "callgraph.h" #include "field_temperature.h" +#include "irphases_t.h" #include "pset.h" #include "set.h" #include "list.h" +#include "obst.h" + +struct ir_phase; /** The type of an ir_op. */ struct ir_op { unsigned code; /**< The unique opcode of the op. */ ident *name; /**< The name of the op. */ size_t attr_size; /**< Space needed in memory for private attributes. */ - op_pin_state op_pin_state_pinned; /**< How to deal with the node in CSE, PRE. */ + op_pin_state pin_state; /**< How to deal with the node in CSE, PRE. */ op_arity opar; /**< The arity of operator. */ int op_index; /**< The index of the first data operand, 0 for most cases, 1 for Div etc. */ unsigned flags; /**< Flags describing the behavior of the ir_op, a bitmasks of irop_flags. */ @@ -90,7 +94,7 @@ struct ir_mode { int, float, reference ... (see irmode.h) */ mode_arithmetic arithmetic; /**< different arithmetic operations possible with a mode */ - int size; /**< size of the mode in Bits. */ + unsigned size; /**< size of the mode in Bits. */ unsigned sign:1; /**< signedness of this mode */ unsigned int modulo_shift; /**< number of bits a values of this mode will be shifted */ unsigned vector_elem; /**< if this is not equal 1, this is a vector mode with @@ -139,6 +143,7 @@ typedef struct { 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_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. */ } block_attr; @@ -189,13 +194,13 @@ typedef struct { typedef struct { except_attr exc; /**< the exception attribute. MUST be the first one. */ ir_type *type; /**< Type of the allocated object. */ - where_alloc where; /**< stack, heap or other managed part of memory */ + ir_where_alloc where; /**< stack, heap or other managed part of memory */ } alloc_attr; /** Free attributes. */ typedef struct { ir_type *type; /**< Type of the allocated object. */ - where_alloc where; /**< stack, heap or other managed part of memory */ + ir_where_alloc where; /**< stack, heap or other managed part of memory */ } free_attr; /** InstOf attributes. */ @@ -237,13 +242,18 @@ typedef struct { } store_attr; typedef struct { - 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 - predecessors. If this attribute is set, the Phi - node takes the role of the obsolete Phi0 node, - therefore the name. */ -} phi0_attr; + 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. */ + 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 + predecessors. If this attribute is set, the Phi + node takes the role of the obsolete Phi0 node, + therefore the name. */ + } u; +} phi_attr; + /**< Confirm attribute. */ typedef struct { @@ -270,6 +280,7 @@ typedef struct { typedef struct { except_attr exc; /**< The exception attribute. MUST be the first one. */ ir_mode *res_mode; /**< Result mode for the division. */ + char no_remainder; /**< Set, if known that a division can be done without a remainder. */ } divmod_attr; /** Inline Assembler support attribute. */ @@ -297,9 +308,7 @@ typedef union { cast_attr cast; /**< For Cast. */ load_attr load; /**< For Load. */ store_attr store; /**< For Store. */ - phi0_attr phi0; /**< for Phi0 nodes. */ - unsigned *phi_backedge; /**< For Phi after construction. - Raw Bitfield n set to true if pred n is backedge. */ + 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 */ @@ -360,12 +369,20 @@ struct ir_node { Must be last field of struct ir_node. */ }; +#include "iredgeset.h" + /** * Edge info to put into an irg. */ typedef struct _irg_edge_info_t { +#if 0 set *edges; /**< a set containing all edges of a graph. */ - unsigned activated : 1; /**< set if edges are activated for the graph. */ +#else + ir_edgeset_t edges; + struct obstack edges_obst; + unsigned allocated : 1; +#endif + unsigned activated : 1; /**< set if edges are activated for the graph. */ } irg_edge_info_t; typedef irg_edge_info_t irg_edges_info_t[EDGE_KIND_LAST]; @@ -380,9 +397,8 @@ enum irg_anchors { 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_frame, /**< method's frame */ - anchor_globals, /**< pointer to the data segment containing all - globals as well as global procedures. */ + anchor_initial_exec, /**< methods initial control flow */ + anchor_frame, /**< methods frame */ anchor_tls, /**< pointer to the thread local storage containing all thread local data. */ anchor_initial_mem, /**< initial memory of this graph */ @@ -457,9 +473,9 @@ struct ir_graph { the node. */ ir_graph **callers; /**< For callgraph analysis: list of caller graphs. */ - unsigned char *caller_isbe; /**< For callgraph analysis: set if backedge. */ + unsigned *caller_isbe; /**< For callgraph analysis: raw bitset if backedge info calculated. */ cg_callee_entry **callees; /**< For callgraph analysis: list of callee calls */ - unsigned char *callee_isbe; /**< For callgraph analysis: set if backedge. */ + unsigned *callee_isbe; /**< For callgraph analysis: raw bitset if backedge info calculated. */ int callgraph_loop_depth; /**< For callgraph analysis */ int callgraph_recursion_depth; /**< For callgraph analysis */ double method_execution_frequency; /**< For callgraph analysis */ @@ -479,6 +495,7 @@ 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. */ #ifdef DEBUG_libfirm int n_outs; /**< Size wasted for outs */ long graph_nr; /**< a unique graph number for each @@ -486,7 +503,7 @@ struct ir_graph { #endif #ifndef NDEBUG - unsigned using_visited : 1; /**< set to 1 if we are currently using the visited flag */ + unsigned using_irn_visited : 1; /**< set to 1 if we are currently using the visited flag */ unsigned using_block_visited : 1; /**< set to 1 if we are currently using the block_visited flag */ unsigned using_irn_link : 1; /**< set to 1 if we are currently using the irn_link fields */ #endif @@ -508,6 +525,8 @@ struct ir_prog { have fields and procedures. */ ir_type *tls_type; /**< The thread local storage type. Must be a struct as it can only have fields. */ + ir_type *constructors_type; /**< contains links to module constructor + functions. Must be a struct */ ir_type **types; /**< A list of all types in the ir. */ ir_mode **modes; /**< A list of all modes in the ir. */ ir_op **opcodes; /**< A list of all opcodes in the ir. */ @@ -536,9 +555,7 @@ struct ir_prog { double max_method_execution_frequency; /**< needed in callgraph. */ irp_temperature_state temperature_state; /**< accumulated temperatures computed? */ exec_freq_state execfreq_state; /**< The state of execution frequency information */ -#ifdef INTERPROCEDURAL_VIEW loop_nesting_depth_state lnd_state; /**< The state of loop nesting depth information. */ -#endif ir_class_cast_state class_cast_state; /**< The state of cast operations in code. */ ir_address_taken_computed_state globals_adr_taken_state; /**< Address taken state of the globals. */ @@ -550,5 +567,4 @@ struct ir_prog { #endif }; - #endif