- add an extra filed for the bit offset\n- renamed access functions\n- renamed entity...
[libfirm] / ir / ir / irnode.c
index 260ff0e..df556c2 100644 (file)
@@ -888,6 +888,25 @@ void set_End_keepalives(ir_node *end, int n, ir_node *in[]) {
     edges_notify_edge(end, END_KEEPALIVE_OFFSET + i, NULL, end->in[1 + END_KEEPALIVE_OFFSET + i], irg);
   }
 }
+/* Set new keep-alives from old keep-alives, skipping irn */
+void remove_End_keepalive(ir_node *end, ir_node *irn) {
+  int     n = get_End_n_keepalives(end);
+  ir_node **in;
+  int     i, idx;
+
+  NEW_ARR_A(ir_node *, in, n);
+
+  for (idx = i = 0; i < n; ++i) {
+    ir_node *old_ka = get_End_keepalive(end, i);
+
+    /* skip irn */
+    if (old_ka != irn)
+      in[idx++] = old_ka;
+  }
+
+  /* set new keep-alives */
+  set_End_keepalives(end, idx, in);
+}
 
 void
 free_End (ir_node *end) {
@@ -2357,10 +2376,10 @@ get_irn_irg(const ir_node *node) {
 ir_node *
 skip_Proj (ir_node *node) {
   /* don't assert node !!! */
-  if (node && is_Proj(node)) {
+  if (node != NULL && is_Proj(node)) {
     return get_Proj_pred(node);
   } else {
-    return node;
+    return (ir_node*) node;
   }
 }
 
@@ -2506,6 +2525,36 @@ int
   return _is_Bad(node);
 }
 
+int
+(is_NoMem)(const ir_node *node) {
+       return _is_NoMem(node);
+}
+
+int
+(is_Mod)(const ir_node *node) {
+       return _is_Mod(node);
+}
+
+int
+(is_Div)(const ir_node *node) {
+       return _is_Div(node);
+}
+
+int
+(is_DivMod)(const ir_node *node) {
+       return _is_DivMod(node);
+}
+
+int
+(is_Start)(const ir_node *node) {
+  return _is_Start(node);
+}
+
+int
+(is_End)(const ir_node *node) {
+       return _is_End(node);
+}
+
 int
 (is_Const)(const ir_node *node) {
        return _is_Const(node);
@@ -2605,6 +2654,12 @@ int
   return _is_Jmp(node);
 }
 
+/* returns true if a node is a Raise node. */
+int
+(is_Raise)(const ir_node *node) {
+  return _is_Raise(node);
+}
+
 int
 is_Proj (const ir_node *node) {
   assert(node);
@@ -2691,6 +2746,13 @@ int (is_irn_keep)(const ir_node *node) {
   return _is_irn_keep(node);
 }
 
+/*
+ * Returns non-zero for nodes that are always placed in the start block.
+ */
+int (is_irn_start_block_placed)(const ir_node *node) {
+  return _is_irn_start_block_placed(node);
+}
+
 /* Returns non-zero for nodes that are machine operations. */
 int (is_irn_machine_op)(const ir_node *node) {
        return _is_irn_machine_op(node);