X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode.c;h=a446381cf1115ea73949f76b238fea9517aab25b;hb=cb91bddc9cacdab7c28e4336847bd3dc248aa549;hp=535e356a9de8b7bedbe445d74e7e382e45fef77a;hpb=0daecf1222995af33c73ac53e1b228d11d32d11f;p=libfirm diff --git a/ir/ir/irnode.c b/ir/ir/irnode.c index 535e356a9..a446381cf 100644 --- a/ir/ir/irnode.c +++ b/ir/ir/irnode.c @@ -380,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 } @@ -454,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 */ @@ -1136,22 +1158,22 @@ set_Call_type (ir_node *node, type *tp) { } int Call_has_callees(ir_node *node) { - + 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); @@ -1498,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); @@ -1522,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) { @@ -1559,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);