*** empty log message ***
[libfirm] / ir / ir / irnode.c
index e26e6b9..0858a7a 100644 (file)
@@ -6,7 +6,6 @@
 */
 
 #include "irnode.h"
-//#include "irnode2.h"
 #include "array.h"
 
 static char *pnc_name_arr [] = {"False", "Eq", "Lt", "Le",
@@ -47,8 +46,6 @@ static char *pns_name_arr [] = {"initial_exec", "global_store",
 
 static char *symconst_name_arr [] = {"type_tag", "size", "linkage_ptr_info"};
 
-
-
 void
 init_irnode (void)
 {
@@ -70,7 +67,7 @@ new_ir_node (ir_graph *irg, ir_node *block, ir_op *op, ir_mode *mode,
   res->kind = k_ir_node;
   res->op = op;
   res->mode = mode;
-  res->visit = 0;
+  res->visited = 0;
   res->link = NULL;
   if (arity < 0) {
     res->in = NEW_ARR_F (ir_node *, 1);
@@ -79,6 +76,11 @@ new_ir_node (ir_graph *irg, ir_node *block, ir_op *op, ir_mode *mode,
     memcpy (&res->in[1], in, sizeof (ir_node *) * arity);
   }
   res->in[0] = block;
+
+#ifdef DEBUG_libfirm
+  res->node_nr = get_irp_new_node_nr();
+#endif
+
   return res;
 }
 
@@ -95,7 +97,7 @@ ir_node_print (XP_PAR1, const xprintf_info *info ATTRIBUTE((unused)), XP_PARN)
     return printed;
   }
 
-  XPF1 ("%I", get_irn_op(np)->name);
+  XPF1 ("%I", get_irn_opname(np));
 
   switch (get_irn_opcode (np)) {       /* node label */
   case iro_Const:
@@ -148,7 +150,12 @@ get_irn_arity (ir_node *node)
   return (ARR_LEN((node)->in)-1);
 }
 
-/* returns the array with ins */
+/* Returns the array with ins. This array is shifted with respect to the
+   array accessed by get_irn_n: The block operand is at position 0 not -1.
+   (@@@ This should be changed.)
+   The order of the predecessors in this array is not guaranteed, except that
+   lists of operands as predecessors of Block or arguments of a Call are
+   consecutive. */
 inline ir_node **
 get_irn_in (ir_node *node)
 {
@@ -159,12 +166,15 @@ get_irn_in (ir_node *node)
 /* to iterate through the predecessors without touching the array */
 /* To iterate over the operands iterate from 0 to i < get_irn_arity(),
    to iterate includind the Block predecessor iterate from i = -1 to
-   i < get_irn_arity. */
+   i < get_irn_arity.
+   If it is a block, the entry -1 is NULL. */
+
 inline ir_node *
 get_irn_n (ir_node *node, int n)
 {
   assert (node);
-  // assert (get_irn_arity (node) > n);
+  /* GL commented the assert in, 12.7.00, let's see whether it works */
+  assert (get_irn_arity (node) > n);
   return skip_nop(node->in[n+1]);
 }
 
@@ -190,6 +200,14 @@ get_irn_modecode (ir_node *node)
   return node->mode->code;
 }
 
+
+inline ident *
+get_irn_modename (ir_node *node)
+{
+  assert(node);
+  return node->mode->name;
+}
+
 inline ir_op *
 get_irn_op (ir_node *node)
 {
@@ -212,6 +230,26 @@ get_irn_opcode (ir_node *node)
   return node->op->code;
 }
 
+inline ident *
+get_irn_opname (ir_node *node)
+{
+  assert(node);
+  return node->op->name;
+}
+
+inline unsigned long
+get_irn_visited (ir_node *node)
+{
+  assert (node);
+  return node->visited;
+}
+
+inline void
+set_irn_visited (ir_node *node, unsigned long visited)
+{
+  assert (node);
+  node->visited = visited;
+}
 inline void
 set_irn_link (ir_node *node, ir_node *link) {
   assert (node);
@@ -224,6 +262,15 @@ get_irn_link (ir_node *node) {
   return node->link;
 }
 
+#ifdef DEBUG_libfirm
+/* Outputs a unique number for this node */
+inline long
+get_irn_node_nr(ir_node *node) {
+  assert(node);
+  return node->node_nr;
+}
+#endif
+
 inline tarval *
 get_irn_const_attr (ir_node *node)
 {
@@ -302,6 +349,18 @@ set_nodes_Block (ir_node *node, ir_node *block) {
   set_irn_n(node, -1, block);
 }
 
+/* Returns an array with the predecessors of the Block. Depending on
+   the implementation of the graph datastructure this can be a copy of
+   the internal representation of predecessors as well as the internal
+   array itself. Therefore writing to this array might obstruct the ir. */
+inline ir_node **
+get_Block_cfgpred_arr (ir_node *node)
+{
+  assert ((node->op == op_Block));
+  return (ir_node **)get_Block_cfgpred(node, 0);
+}
+
+
 inline int
 get_Block_n_cfgpreds (ir_node *node) {
   assert ((node->op == op_Block));
@@ -339,15 +398,15 @@ set_Block_matured (ir_node *node, bool matured) {
   node->attr.block.matured = matured;
 }
 inline unsigned long
-get_Block_block_visit (ir_node *node) {
+get_Block_block_visited (ir_node *node) {
   assert (node->op == op_Block);
-  return node->attr.block.block_visit;
+  return node->attr.block.block_visited;
 }
 
 inline void
-set_Block_block_visit (ir_node *node, unsigned long visit) {
+set_Block_block_visited (ir_node *node, unsigned long visit) {
   assert (node->op == op_Block);
-  node->attr.block.block_visit = visit;
+  node->attr.block.block_visited = visit;
 }
 
 inline ir_node *
@@ -376,7 +435,7 @@ set_Cond_selector (ir_node *node, ir_node *selector) {
 
 inline ir_node *
 get_Return_mem (ir_node *node) {
-  assert (node->op == op_Cond);
+  assert (node->op == op_Return);
   return get_irn_n(node, 0);
 }
 
@@ -386,6 +445,16 @@ set_Return_mem (ir_node *node, ir_node *mem) {
   set_irn_n(node, 0, mem);
 }
 
+inline ir_node **
+get_Return_res_arr (ir_node *node)
+{
+  assert ((node->op == op_Return));
+  if (get_Return_n_res(node) > 0)
+    return ((ir_node **)get_Return_res(node, 0));
+  else
+    return NULL;
+}
+
 inline int
 get_Return_n_res (ir_node *node) {
   assert (node->op == op_Return);
@@ -402,12 +471,13 @@ set_Return_n_res (ir_node *node, int results) {
 inline ir_node *
 get_Return_res (ir_node *node, int pos) {
   assert (node->op == op_Return);
+  assert (get_Return_n_res(node) > pos);
   return get_irn_n(node, pos+1);
 }
 
 inline void
 set_Return_res (ir_node *node, int pos, ir_node *res){
-  assert (node->op == op_Raise);
+  assert (node->op == op_Return);
   set_irn_n(node, pos+1, res);
 }
 
@@ -514,6 +584,16 @@ set_Sel_ptr (ir_node *node, ir_node *ptr) {
   set_irn_n(node, 1, ptr);
 }
 
+inline ir_node **
+get_Sel_index_arr (ir_node *node)
+{
+  assert ((node->op == op_Sel));
+  if (get_Sel_n_index(node) > 0)
+    return (ir_node **)get_Sel_index(node, 0);
+  else
+    return NULL;
+}
+
 inline int
 get_Sel_n_index (ir_node *node) {
   assert (node->op == op_Sel);
@@ -587,6 +667,15 @@ set_Call_ptr (ir_node *node, ir_node *ptr) {
   set_irn_n(node, 1, ptr);
 }
 
+inline ir_node **
+get_Call_param_arr (ir_node *node) {
+  assert (node->op == op_Call);
+  if (get_Call_arity(node) > 0)
+    return ((ir_node **)get_Call_param (node, 0));
+  else
+    return NULL;
+}
+
 inline int
 get_Call_arity (ir_node *node) {
   assert (node->op == op_Call);
@@ -1300,6 +1389,12 @@ set_Conv_op (ir_node *node, ir_node *op) {
   set_irn_n(node, 0, op);
 }
 
+inline ir_node **
+get_Phi_preds_arr (ir_node *node) {
+  assert (node->op == op_Phi);
+  return ((ir_node **)get_Phi_pred(node, 0));
+}
+
 inline int
 get_Phi_n_preds (ir_node *node) {
   assert (node->op == op_Phi);
@@ -1482,6 +1577,12 @@ set_Free_type (ir_node *node, type *type) {
   node->attr.f = type;
 }
 
+inline ir_node **
+get_Sync_preds_arr (ir_node *node) {
+  assert (node->op == op_Sync);
+  return ((ir_node **)get_Sync_pred(node, 0));
+}
+
 inline int
 get_Sync_n_preds (ir_node *node) {
   assert (node->op == op_Sync);
@@ -1531,6 +1632,12 @@ set_Proj_proj (ir_node *node, long proj) {
   node->attr.proj = proj;
 }
 
+inline ir_node **
+get_Tuple_preds_arr (ir_node *node) {
+  assert (node->op == op_Tuple);
+  return ((ir_node **)get_Tuple_pred(node, 0));
+}
+
 inline int
 get_Tuple_n_preds (ir_node *node) {
   assert (node->op == op_Tuple);