X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode.c;h=a446381cf1115ea73949f76b238fea9517aab25b;hb=cb91bddc9cacdab7c28e4336847bd3dc248aa549;hp=fcd49ef0accad3fd17b6dcf03522ccb3b6463fa3;hpb=dddcc630819f338c3b45e2bc646233e6872d5bb6;p=libfirm diff --git a/ir/ir/irnode.c b/ir/ir/irnode.c index fcd49ef0a..a446381cf 100644 --- a/ir/ir/irnode.c +++ b/ir/ir/irnode.c @@ -223,7 +223,8 @@ ir_node * void set_irn_n (ir_node *node, int n, ir_node *in) { - assert(node && -1 <= n && n < get_irn_arity(node)); + assert(node && node->kind == k_ir_node && -1 <= n && n < get_irn_arity(node)); + assert(in && in->kind == k_ir_node); if ((n == -1) && (get_irn_opcode(node) == iro_Filter)) { /* Change block pred in both views! */ node->in[n + 1] = in; @@ -379,7 +380,7 @@ get_irn_node_nr(const ir_node *node) { #ifdef DEBUG_libfirm return node->node_nr; #else - return (long)&node; + return (long)node; #endif } @@ -453,6 +454,28 @@ get_irn_block_attr (ir_node *node) return node->attr.block; } +load_attr +get_irn_load_attr (ir_node *node) +{ + assert (node->op == op_Load); + return node->attr.load; +} + +store_attr +get_irn_store_attr (ir_node *node) +{ + assert (node->op == op_Store); + return node->attr.store; +} + +except_attr +get_irn_except_attr (ir_node *node) +{ + assert (node->op == op_Div || node->op == op_Quot || + node->op == op_DivMod || node->op == op_Mod); + return node->attr.except; +} + /** manipulate fields of individual nodes **/ /* this works for all except Block */ @@ -1135,20 +1158,22 @@ set_Call_type (ir_node *node, type *tp) { } int Call_has_callees(ir_node *node) { - return (node->attr.call.callee_arr != NULL); + assert(node && node->op == op_Call); + return ((get_irg_callee_info_state(get_irn_irg(node)) != irg_callee_info_none) && + (node->attr.call.callee_arr != NULL)); } int get_Call_n_callees(ir_node * node) { - assert(node->op == op_Call && node->attr.call.callee_arr); + assert(node && node->op == op_Call && node->attr.call.callee_arr); return ARR_LEN(node->attr.call.callee_arr); } entity * get_Call_callee(ir_node * node, int pos) { - assert(node->op == op_Call && node->attr.call.callee_arr); + assert(pos >= 0 && pos < get_Call_n_callees(node)); return node->attr.call.callee_arr[pos]; } -void set_Call_callee_arr(ir_node * node, int n, entity ** arr) { +void set_Call_callee_arr(ir_node * node, const int n, entity ** arr) { assert(node->op == op_Call); if (node->attr.call.callee_arr == NULL || get_Call_n_callees(node) != n) { node->attr.call.callee_arr = NEW_ARR_D(entity *, current_ir_graph->obst, n); @@ -1240,7 +1265,8 @@ set_FuncCall_type (ir_node *node, type *tp) { } int FuncCall_has_callees(ir_node *node) { - return (node->attr.call.callee_arr != NULL); + return ((get_irg_callee_info_state(get_irn_irg(node)) != irg_callee_info_none) && + (node->attr.call.callee_arr != NULL)); } int get_FuncCall_n_callees(ir_node * node) { @@ -1494,6 +1520,31 @@ set_Phi_pred (ir_node *node, int pos, ir_node *pred) { set_irn_n(node, pos, pred); } + +int is_memop(ir_node *node) { + return ((get_irn_op(node) == op_Load) || (get_irn_op(node) == op_Store)); +} + +ir_node *get_memop_mem (ir_node *node) { + assert(is_memop(node)); + return get_irn_n(node, 0); +} + +void set_memop_mem (ir_node *node, ir_node *mem) { + assert(is_memop(node)); + set_irn_n(node, 0, mem); +} + +ir_node *get_memop_ptr (ir_node *node) { + assert(is_memop(node)); + return get_irn_n(node, 1); +} + +void set_memop_ptr (ir_node *node, ir_node *ptr) { + assert(is_memop(node)); + set_irn_n(node, 1, ptr); +} + ir_node * get_Load_mem (ir_node *node) { assert (node->op == op_Load); @@ -1518,6 +1569,30 @@ set_Load_ptr (ir_node *node, ir_node *ptr) { set_irn_n(node, 1, ptr); } +ir_mode * +get_Load_mode (ir_node *node) { + assert (node->op == op_Load); + return node->attr.load.load_mode; +} + +void +set_Load_mode (ir_node *node, ir_mode *mode) { + assert (node->op == op_Load); + node->attr.load.load_mode = mode; +} + +ent_volatility +get_Load_volatility (ir_node *node) { + assert (node->op == op_Load); + return node->attr.load.volatility; +} + +void +set_Load_volatility (ir_node *node, ent_volatility volatility) { + assert (node->op == op_Load); + node->attr.load.volatility = volatility; +} + ir_node * get_Store_mem (ir_node *node) { @@ -1555,6 +1630,19 @@ set_Store_value (ir_node *node, ir_node *value) { set_irn_n(node, 2, value); } +ent_volatility +get_Store_volatility (ir_node *node) { + assert (node->op == op_Store); + return node->attr.store.volatility; +} + +void +set_Store_volatility (ir_node *node, ent_volatility volatility) { + assert (node->op == op_Store); + node->attr.store.volatility = volatility; +} + + ir_node * get_Alloc_mem (ir_node *node) { assert (node->op == op_Alloc);