Fix inconsistency between reg_req and ins of Push: reg_req expected the stack in...
[libfirm] / ir / ir / irgmod.c
index 3b306aa..f9a4f48 100644 (file)
@@ -96,8 +96,6 @@ void exchange(ir_node *old, ir_node *nw) {
                /* Else, do it the old-fashioned way. */
                ir_node *block;
 
-               assert(get_irn_op(old)->opar != oparity_dynamic);
-
                hook_turn_into_id(old);
 
                block = old->in[0];
@@ -109,6 +107,10 @@ void exchange(ir_node *old, ir_node *nw) {
                        }
                }
 
+               if (get_irn_op(old)->opar == oparity_dynamic) {
+                       DEL_ARR_F(get_irn_in(old));
+               }
+
                old->op    = op_Id;
                old->in    = NEW_ARR_D (ir_node *, irg->obst, 2);
                old->in[0] = block;