X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode.c;h=e16438177864b480d1aed092df00f1c86f7a86e9;hb=e1c33a238578342a072e1c95ff12eefe6d0acd37;hp=904bd711061a64f3d7e20309037bced8c6370c9c;hpb=75da6f9fb1f03333a5faf5c4479bbe6917981b74;p=libfirm diff --git a/ir/ir/irnode.c b/ir/ir/irnode.c index 904bd7110..e16438177 100644 --- a/ir/ir/irnode.c +++ b/ir/ir/irnode.c @@ -142,7 +142,7 @@ new_ir_node (dbg_info *db, ir_graph *irg, ir_node *block, ir_op *op, ir_mode *mo res->op = op; res->mode = mode; res->visited = 0; - res->node_idx = get_irg_next_node_idx(irg); + res->node_idx = irg_register_node_idx(irg, res); res->link = NULL; if (arity < 0) { res->in = NEW_ARR_F (ir_node *, 1); /* 1: space for block */ @@ -783,8 +783,13 @@ get_End_keepalive(ir_node *end, int pos) { void add_End_keepalive (ir_node *end, ir_node *ka) { - assert (end->op == op_End); - ARR_APP1 (ir_node *, end->in, ka); + int l; + ir_graph *irg = get_irn_irg(end); + + assert(end->op == op_End); + l = ARR_LEN(end->in); + ARR_APP1(ir_node *, end->in, ka); + edges_notify_edge(end, l, end->in[l], NULL, irg); } void @@ -990,17 +995,15 @@ set_SymConst_kind (ir_node *node, symconst_kind num) { ir_type * get_SymConst_type (ir_node *node) { - assert ( (node->op == op_SymConst) - && ( get_SymConst_kind(node) == symconst_type_tag - || get_SymConst_kind(node) == symconst_size)); + assert( (node->op == op_SymConst) + && (SYMCONST_HAS_TYPE(get_SymConst_kind(node)))); return node->attr.i.sym.type_p = skip_tid(node->attr.i.sym.type_p); } void set_SymConst_type (ir_node *node, ir_type *tp) { - assert ( (node->op == op_SymConst) - && ( get_SymConst_kind(node) == symconst_type_tag - || get_SymConst_kind(node) == symconst_size)); + assert( (node->op == op_SymConst) + && (SYMCONST_HAS_TYPE(get_SymConst_kind(node)))); node->attr.i.sym.type_p = tp; } @@ -1756,37 +1759,43 @@ set_Free_where (ir_node *node, where_alloc where) { node->attr.f.where = where; } -ir_node ** -get_Sync_preds_arr (ir_node *node) { +ir_node **get_Sync_preds_arr (ir_node *node) { assert (node->op == op_Sync); return (ir_node **)&(get_irn_in(node)[1]); } -int -get_Sync_n_preds (ir_node *node) { - assert (node->op == op_Sync); +int get_Sync_n_preds (ir_node *node) { + assert(node->op == op_Sync); return (get_irn_arity(node)); } /* -void -set_Sync_n_preds (ir_node *node, int n_preds) { +void set_Sync_n_preds (ir_node *node, int n_preds) { assert (node->op == op_Sync); } */ -ir_node * -get_Sync_pred (ir_node *node, int pos) { - assert (node->op == op_Sync); +ir_node *get_Sync_pred (ir_node *node, int pos) { + assert(node->op == op_Sync); return get_irn_n(node, pos); } -void -set_Sync_pred (ir_node *node, int pos, ir_node *pred) { - assert (node->op == op_Sync); +void set_Sync_pred (ir_node *node, int pos, ir_node *pred) { + assert(node->op == op_Sync); set_irn_n(node, pos, pred); } +/* Add a new Sync predecessor */ +void add_Sync_pred (ir_node *node, ir_node *pred) { + int l; + ir_graph *irg = get_irn_irg(node); + + assert(node->op == op_Sync); + l = ARR_LEN(node->in); + ARR_APP1(ir_node *, node->in, pred); + edges_notify_edge(node, l, node->in[l], NULL, irg); +} + ir_type *get_Proj_type(ir_node *n) { ir_type *tp = NULL; @@ -2440,6 +2449,24 @@ int return _is_Mux(node); } +/* returns true if node is a Load node. */ +int +(is_Load)(const ir_node *node) { + return _is_Load(node); +} + +/* returns true if node is a Sync node. */ +int +(is_Sync)(const ir_node *node) { + return _is_Sync(node); +} + +/* returns true if node is a Confirm node. */ +int +(is_Confirm)(const ir_node *node) { + return _is_Confirm(node); +} + int is_Proj (const ir_node *node) { assert(node); @@ -2587,7 +2614,7 @@ ir_op_ops *firm_set_default_get_type(opcode code, ir_op_ops *ops) /** Return the attribute type of a SymConst node if exists */ static ir_type *get_SymConst_attr_type(ir_node *self) { symconst_kind kind = get_SymConst_kind(self); - if (kind == symconst_type_tag || kind == symconst_size) + if (SYMCONST_HAS_TYPE(kind)) return get_SymConst_type(self); return NULL; } @@ -2595,7 +2622,7 @@ static ir_type *get_SymConst_attr_type(ir_node *self) { /** Return the attribute entity of a SymConst node if exists */ static entity *get_SymConst_attr_entity(ir_node *self) { symconst_kind kind = get_SymConst_kind(self); - if (kind == symconst_addr_ent) + if (SYMCONST_HAS_ENT(kind)) return get_SymConst_entity(self); return NULL; }