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. */
- void *tag; /**< Some custom pointer the op's creator can attach stuff to. */
+ unsigned tag; /**< Some custom TAG value the op's creator set to. */
void *attr; /**< custom pointer where op's creator can attach attribute stuff to. */
ir_op_ops ops; /**< The operations of the this op. */
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 */
ir_dom_info dom; /**< Datastructure that holds information about dominators.
/** SymConst attributes. */
typedef struct {
symconst_symbol sym; // old tori
- symconst_kind num;
- ir_type *tp; /**< the source type, for analyses. default: type_unknown. */
+ symconst_kind kind;
+ ir_type *tp; /**< the source type, for analyses. default: type_unknown. */
} symconst_attr;
/** Sel attributes. */
/** Alloc attributes. */
typedef struct {
except_attr exc; /**< the exception attribute. MUST be the first one. */
- ir_type *type; /**< Type of the allocated object. */
- ir_where_alloc where; /**< stack, heap or other managed part of memory */
+ ir_where_alloc where; /**< stack, heap or other managed part of memory */
+ ir_type *type; /**< Type of the allocated object. */
} alloc_attr;
/** Free attributes. */
/** CallBegin attributes. */
typedef struct {
- ir_node * call; /**< Associated Call-operation. */
+ ir_node *call; /**< Associated Call-operation. */
} callbegin_attr;
/** Cast attributes. */
/** Load attributes. */
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. */
- unsigned volatility:1; /**< The volatility of this Load operation. */
- unsigned aligned:1; /**< The align attribute of this Load operation. */
} load_attr;
/** Store attributes. */
/** 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. */
struct ir_node {
/* ------- Basics of the representation ------- */
firm_kind kind; /**< Distinguishes this node from others. */
+ unsigned node_idx; /**< The node index of this node in its graph. */
ir_op *op; /**< The Opcode of this node. */
ir_mode *mode; /**< The Mode of this node. */
struct ir_node **in; /**< The array of predecessors / operands. */
unsigned long visited; /**< The visited counter for walks of the graph. */
- unsigned node_idx; /**< The node index of this node in its graph. */
void *link; /**< To attach additional information to the node, e.g.
used while construction to link Phi0 nodes and
during optimization to link to nodes that
* 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. */
-#else
ir_edgeset_t edges;
struct obstack edges_obst;
unsigned allocated : 1;
-#endif
- unsigned activated : 1; /**< set if edges are activated for the graph. */
+ 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];
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 */
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. */
ir_entity *ent; /**< The entity of this procedure, i.e.,
the type of the procedure and the
class it belongs to. */
ir_node *current_block; /**< Current block for newly gen_*()-erated ir_nodes. */
struct obstack *extbb_obst; /**< The obstack for extended basic block info. */
- unsigned last_node_idx; /**< The last IR node index for this graph. */
-
/* -- Fields for graph properties -- */
irg_inline_property inline_property; /**< How to handle inlineing. */
unsigned additional_properties; /**< Additional graph properties. */
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 */
+ unsigned using_block_mark : 1; /**< set to 1 if we are currently using the block mark flags */
#endif
};