+
+ir_node *part_block_edges(ir_node *node)
+{
+ ir_graph *irg = get_irn_irg(node);
+ ir_node *old_block = get_nodes_block(node);
+ ir_node *new_block = new_r_Block(irg,
+ get_Block_n_cfgpreds(old_block),
+ get_Block_cfgpred_arr(old_block));
+ const ir_edge_t *edge;
+ const ir_edge_t *next;
+
+ /* old_block has no predecessors anymore for now */
+ set_irn_in(old_block, 0, NULL);
+
+ /* move node and its predecessors to new_block */
+ move_edges(node, old_block, new_block);
+
+ /* move Phi nodes to new_block */
+ foreach_out_edge_safe(old_block, edge, next) {
+ ir_node *phi = get_edge_src_irn(edge);
+ if (!is_Phi(phi))
+ continue;
+ set_nodes_block(phi, new_block);
+ }
+
+ return old_block;
+}
+
+void kill_node(ir_node *node)
+{
+ ir_graph *irg = get_irn_irg(node);
+
+ if (edges_activated(irg)) {
+ edges_node_deleted(node);
+ }
+ /* noone is allowed to reference this node anymore */
+ set_irn_op(node, op_Deleted);
+}