return new_rd_Const(db, irg, new_tarval_from_long(value, mode));
}
-ir_node *new_rd_defaultProj(dbg_info *db, ir_node *arg, long max_proj)
-{
- ir_node *res;
-
- assert(is_Cond(arg));
- arg->attr.cond.default_proj = max_proj;
- res = new_rd_Proj(db, arg, mode_X, max_proj);
- return res;
-}
-
ir_node *new_rd_ASM(dbg_info *db, ir_node *block, int arity, ir_node *in[],
ir_asm_constraint *inputs, size_t n_outs,
ir_asm_constraint *outputs, size_t n_clobber,
return new_rd_SymConst(db, irg, mode, sym, symconst_ofs_ent);
}
-ir_node *new_rd_SymConst_type_tag(dbg_info *db, ir_graph *irg, ir_mode *mode, ir_type *symbol)
-{
- symconst_symbol sym;
- sym.type_p = symbol;
- return new_rd_SymConst(db, irg, mode, sym, symconst_type_tag);
-}
-
ir_node *new_rd_SymConst_size(dbg_info *db, ir_graph *irg, ir_mode *mode, ir_type *symbol)
{
symconst_symbol sym;
{
return new_rd_Sel(NULL, block, store, objptr, 0, NULL, ent);
}
-ir_node *new_r_defaultProj(ir_node *arg, long max_proj)
-{
- return new_rd_defaultProj(NULL, arg, max_proj);
-}
ir_node *new_r_ASM(ir_node *block,
int arity, ir_node *in[], ir_asm_constraint *inputs,
size_t n_outs, ir_asm_constraint *outputs,
return res;
}
-/* ************************************************************************** */
-
-/*
- * Finalize a Block node, when all control flows are known.
- * Acceptable parameters are only Block nodes.
- */
void mature_immBlock(ir_node *block)
{
size_t n_preds;
ir_node *next;
ir_node *phi;
+ ir_node **new_in;
ir_graph *irg;
assert(is_Block(block));
set_Block_matured(block, 1);
+ /* create final in-array for the block */
+ if (block->attr.block.dynamic_ins) {
+ new_in = NEW_ARR_D(ir_node*, irg->obst, n_preds+1);
+ memcpy(new_in, block->in, (n_preds+1) * sizeof(new_in[0]));
+ DEL_ARR_F(block->in);
+ block->in = new_in;
+ block->attr.block.dynamic_ins = false;
+ }
+
/* Now, as the block is a finished Firm node, we can optimize it.
Since other nodes have been allocated since the block was created
we can not free the node on the obstack. Therefore we have to call
return new_rd_Const_long(db, current_ir_graph, mode, value);
}
-ir_node *new_d_defaultProj(dbg_info *db, ir_node *arg, long max_proj)
-{
- ir_node *res;
- assert(is_Cond(arg) || is_Bad(arg));
- assert(get_irg_phase_state(current_ir_graph) == phase_building);
- if (is_Cond(arg))
- arg->attr.cond.default_proj = max_proj;
- res = new_d_Proj(db, arg, mode_X, max_proj);
- return res;
-}
-
ir_node *new_d_simpleSel(dbg_info *db, ir_node *store, ir_node *objptr,
ir_entity *ent)
{
res = new_ir_node(dbgi, irg, NULL, op_Block, mode_BB, -1, NULL);
set_Block_matured(res, 0);
+ res->attr.block.dynamic_ins = true;
res->attr.block.irg.irg = irg;
res->attr.block.backedge = NULL;
res->attr.block.in_cg = NULL;
set_r_value(current_ir_graph, pos, value);
}
-int r_find_value(ir_graph *irg, ir_node *value)
-{
- size_t i;
- ir_node *bl = irg->current_block;
-
- for (i = ARR_LEN(bl->attr.block.graph_arr); i > 1;) {
- if (bl->attr.block.graph_arr[--i] == value)
- return i - 1;
- }
- return -1;
-}
-
-int find_value(ir_node *value)
-{
- return r_find_value(current_ir_graph, value);
-}
-
ir_node *get_r_store(ir_graph *irg)
{
assert(get_irg_phase_state(irg) == phase_building);
void irg_finalize_cons(ir_graph *irg)
{
+ ir_node *end_block = get_irg_end_block(irg);
+ mature_immBlock(end_block);
+
set_irg_phase_state(irg, phase_high);
}
{
return new_d_simpleSel(NULL, store, objptr, ent);
}
-ir_node *new_defaultProj(ir_node *arg, long max_proj)
-{
- return new_d_defaultProj(NULL, arg, max_proj);
-}
ir_node *new_ASM(int arity, ir_node *in[], ir_asm_constraint *inputs,
size_t n_outs, ir_asm_constraint *outputs,
size_t n_clobber, ident *clobber[], ident *text)