fixed iredges related bug in set_irn_in
authorRubino Geiß <rubino@ipd.info.uni-karlsruhe.de>
Tue, 20 Dec 2005 19:39:35 +0000 (19:39 +0000)
committerRubino Geiß <rubino@ipd.info.uni-karlsruhe.de>
Tue, 20 Dec 2005 19:39:35 +0000 (19:39 +0000)
[r7111]

ir/ir/irnode.c

index 9c2b872..c767793 100644 (file)
@@ -238,17 +238,24 @@ set_irn_in (ir_node *node, int arity, ir_node **in) {
   } else {
     arr = &node->in;
   }
-  if (arity != ARR_LEN(*arr) - 1) {
+
+       for (i = 0; i < arity; i++) {
+               if (i < ARR_LEN(*arr)-1)
+       edges_notify_edge(node, i, in[i], (*arr)[i+1], current_ir_graph);
+               else
+           edges_notify_edge(node, i, in[i], NULL,        current_ir_graph);
+  }
+       for(;i < ARR_LEN(*arr)-1; i++) {
+               edges_notify_edge(node, i, NULL, (*arr)[i+1], current_ir_graph);
+       }
+
+       if (arity != ARR_LEN(*arr) - 1) {
     ir_node * block = (*arr)[0];
     *arr = NEW_ARR_D(ir_node *, current_ir_graph->obst, arity + 1);
     (*arr)[0] = block;
   }
   fix_backedges(current_ir_graph->obst, node);
 
-  for (i = 0; i < arity; i++) {
-    edges_notify_edge(node, i, in[i], (*arr)[i+1], current_ir_graph);
-  }
-
   memcpy((*arr) + 1, in, sizeof(ir_node *) * arity);
 }