/*
- * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
set_Phi_next(n, NULL);
}
+void firm_clear_block_phis(ir_node *node, void *env)
+{
+ (void) env;
+ if (is_Block(node)) {
+ set_Block_phis(node, NULL);
+ } else if (is_Phi(node)) {
+ set_Phi_next(node, NULL);
+ }
+}
+
+void firm_collect_block_phis(ir_node *node, void *env)
+{
+ (void) env;
+ if (is_Phi(node))
+ add_Block_phi(get_nodes_block(node), node);
+}
+
void copy_irn_to_irg(ir_node *n, ir_graph *irg)
{
ir_op *op = get_irn_op(n);
ir_node *nn = NULL;
/* do not copy standard nodes */
- if (op == op_Bad)
- nn = get_irg_bad(irg);
- else if (op == op_NoMem)
+ if (op == op_NoMem)
n = get_irg_no_mem(irg);
else if (op == op_Block) {
old_irg = get_irn_irg(n);
copy_node_attr(irg, n, nn);
set_irn_link(n, nn);
- /* fix the irg for blocks */
- if (is_Block(nn)) {
+ /* fix the irg for nodes containing a reference to it */
+ if (ir_has_irg_ref(nn)) {
nn->attr.block.irg.irg = irg;
-
- /* we cannot allow blocks WITHOUT macroblock input */
- set_Block_MacroBlock(nn, get_Block_MacroBlock(n));
}
}
/* copy the attributes */
copy_node_attr(irg, node, res);
- if (op == op_Block) {
- set_Block_MacroBlock(res, get_Block_MacroBlock(node));
- }
/* duplicate dependency edges */
n_deps = get_irn_deps(node);
new_node = get_new_node(node);
- if (is_Block(node)) {
- /* copy the macro block header */
- ir_node *mbh = get_Block_MacroBlock(node);
-
- /* get the macro block header */
- ir_node *nmbh = get_new_node(mbh);
- assert(nmbh != NULL);
- set_Block_MacroBlock(new_node, nmbh);
- } else {
+ if (!is_Block(node)) {
ir_node *block = get_nodes_block(node);
ir_node *new_block = get_new_node(block);
set_nodes_block(new_node, new_block);
{
void *obj;
- foreach_pset(set, obj) {
+ foreach_pset(set, void*, obj) {
ir_fprintf(stderr, "%+F\n", obj);
}
}