- last = current_node;
- func(current_node);
- /* was the current node replaced? */
- if(current_node != last) {
- set_uses(current_node);
- }
+ DB((dbg, LEVEL_2, "optimize %+F\n", current_node));
+ peephole_node(current_node);
+ assert(!is_Bad(current_node));
+ }
+}
+
+static void kill_node_and_preds(ir_node *node)
+{
+ int arity, i;
+
+ arity = get_irn_arity(node);
+ for (i = 0; i < arity; ++i) {
+ ir_node *pred = get_irn_n(node, i);
+
+ set_irn_n(node, i, new_Bad());
+ if (get_irn_n_edges(pred) != 0)
+ continue;
+
+ kill_node_and_preds(pred);