out edges for entities and types
[libfirm] / ir / ir / irnode.c
index d91b356..bfcb287 100644 (file)
@@ -355,10 +355,19 @@ void *
 
 op_pin_state
 (get_irn_pinned)(const ir_node *node) {
-  /* return __get_irn_pinned(node); */
-  return (__get_op_pinned (get_irn_op (node)));
+  return __get_irn_pinned(node);
 }
 
+void set_irn_pinned(ir_node *node, op_pin_state state) {
+  /* due to optimization an opt may be turned into a Tuple */
+  if (get_irn_op(node) == op_Tuple)
+    return;
+
+  assert(node && get_op_pinned(get_irn_op(node)) == op_pin_state_exc_pinned);
+  assert(state == op_pin_state_pinned || state == op_pin_state_floats);
+
+  node->attr.except.pin_state = state;
+}
 
 #ifdef DO_HEAPANALYSIS
 /* Access the abstract interpretation information of a node.
@@ -861,6 +870,10 @@ set_Const_type (ir_node *node, type *tp) {
     assert (get_type_mode(tp) == get_irn_mode(node));
   }
 
+  if ((get_irn_node_nr(node) == 259216) && (tp == unknown_type))
+    assert(0);
+
+
   node->attr.con.tp = tp;
 }
 
@@ -921,7 +934,6 @@ void     set_SymConst_entity (ir_node *node, entity *ent) {
   node->attr.i.sym.entity_p  = ent;
 }
 
-
 union symconst_symbol
 get_SymConst_symbol (ir_node *node) {
   assert (node->op == op_SymConst);
@@ -935,6 +947,18 @@ set_SymConst_symbol (ir_node *node, union symconst_symbol sym) {
   node->attr.i.sym = sym;
 }
 
+type *
+get_SymConst_value_type (ir_node *node) {
+  assert (node->op == op_SymConst);
+  return node->attr.i.tp = skip_tid(node->attr.i.tp);
+}
+
+void
+set_SymConst_value_type (ir_node *node, type *tp) {
+  assert (node->op == op_SymConst);
+  node->attr.i.tp = tp;
+}
+
 ir_node *
 get_Sel_mem (ir_node *node) {
   assert (node->op == op_Sel);
@@ -1113,7 +1137,7 @@ get_Call_type (ir_node *node) {
 void
 set_Call_type (ir_node *node, type *tp) {
   assert (node->op == op_Call);
-  assert (is_method_type(tp));
+  assert ((get_unknown_type() == tp) || is_method_type(tp));
   node->attr.call.cld_tp = tp;
 }