X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode.c;h=a9fccc2d44f26732899d9161cfe3bf6128742553;hb=5f8ddee6b08c8040c0a304a347d65045c1141d52;hp=f1d3d68693b3e3739aa7f04458d69548d5c58605;hpb=6d36abf323fc5c7fba7ed2f1f6939a84b3e4a932;p=libfirm diff --git a/ir/ir/irnode.c b/ir/ir/irnode.c index f1d3d6869..a9fccc2d4 100644 --- a/ir/ir/irnode.c +++ b/ir/ir/irnode.c @@ -6,6 +6,9 @@ */ #include "irnode_t.h" +#include "irgraph_t.h" +#include "ident_t.h" +#include "irmode_t.h" #include "array.h" #ifdef DEBUG_libfirm @@ -114,7 +117,7 @@ ir_node_print (XP_PAR1, const xprintf_info *info ATTRIBUTE((unused)), XP_PARN) return printed; } - XPF1 ("%I", get_irn_opname(np)); + XPF1 ("%I", get_irn_opident(np)); switch (get_irn_opcode (np)) { /* node label */ case iro_Const: @@ -217,7 +220,7 @@ get_irn_modecode (ir_node *node) inline ident * -get_irn_modename (ir_node *node) +get_irn_modeident (ir_node *node) { assert(node); return node->mode->name; @@ -245,8 +248,15 @@ get_irn_opcode (ir_node *node) return node->op->code; } -inline ident * +inline const char * get_irn_opname (ir_node *node) +{ + assert(node); + return id_to_str(node->op->name); +} + +inline ident * +get_irn_opident (ir_node *node) { assert(node); return node->op->name; @@ -564,8 +574,6 @@ get_SymConst_ptrinfo (ir_node *node) { assert ( (node->op == op_SymConst) && (get_SymConst_kind(node) == linkage_ptr_info)); return node->attr.i.tori.ptrinfo; - - } inline void @@ -575,6 +583,18 @@ set_SymConst_ptrinfo (ir_node *node, ident *ptrinfo) { node->attr.i.tori.ptrinfo = ptrinfo; } +inline type_or_id_p +get_SymConst_type_or_id (ir_node *node) { + assert (node->op == op_SymConst); + return &(node->attr.i.tori); +} + +inline void +set_SymConst_type_or_id (ir_node *node, type_or_id_p tori) { + assert (node->op == op_SymConst); + memcpy (&(node->attr.i.tori), tori, sizeof(type_or_id)); +} + inline ir_node * get_Sel_mem (ir_node *node) { assert (node->op == op_Sel); @@ -689,11 +709,16 @@ get_Call_param_arr (ir_node *node) { } inline int -get_Call_arity (ir_node *node) { +get_Call_n_params (ir_node *node) { assert (node->op == op_Call); return (get_irn_arity(node) - CALL_PARAM_OFFSET); } +inline int +get_Call_arity (ir_node *node) { + return get_Call_n_params(node); +} + /* inline void set_Call_arity (ir_node *node, ir_node *arity) { assert (node->op == op_Call); @@ -1511,7 +1536,7 @@ get_Alloc_size (ir_node *node) { } inline void -set_Allco_size (ir_node *node, ir_node *size) { +set_Alloc_size (ir_node *node, ir_node *size) { assert (node->op == op_Alloc); set_irn_n(node, 1, size); } @@ -1706,7 +1731,10 @@ skip_nop (ir_node *node) { /* don't assert node !!! */ if (node && (node->op == op_Id) && (node != get_Id_pred(node))) { - return get_Id_pred(node); + /* Don't use get_Id_pred: We get into an endless loop for + self-referencing Ids. */ + assert (get_irn_arity (node) > 0); + return node->in[0+1]; } else { return node; }