#define NEW_D_UNOP(instr) \
ir_node * \
new_d_##instr (dbg_info *db, ir_node *op, ir_mode *mode) { \
- return new_bd_Minus(db, current_ir_graph->current_block, op, mode); \
+ return new_bd_##instr(db, current_ir_graph->current_block, op, mode); \
}
/* Memory Phis in endless loops must be kept alive.
As we can't distinguish these easily we keep all of them alive. */
if ((res->op == op_Phi) && (mode == mode_M))
- add_End_keepalive(irg->end, res);
+ add_End_keepalive(get_irg_end(irg), res);
return res;
}
ir_node *res;
ir_graph *irg = current_ir_graph;
- res = new_ir_node (db, irg, irg->start_block, op_Const, mode, 0, NULL);
+ res = new_ir_node (db, irg, get_irg_start_block(irg), op_Const, mode, 0, NULL);
res->attr.con.tv = con;
set_Const_type(res, tp); /* Call method because of complex assertion. */
res = optimize_node (res);
ir_node *res;
ir_graph *irg = current_ir_graph;
- res = new_ir_node(NULL, irg, irg->start_block, op_Unknown, m, 0, NULL);
+ res = new_ir_node(NULL, irg, get_irg_start_block(irg), op_Unknown, m, 0, NULL);
res = optimize_node(res);
return res;
}
ir_graph *irg = current_ir_graph;
res = new_ir_node(db, irg, block, op_EndReg, mode_T, -1, NULL);
- irg->end_reg = res;
+ set_irg_end_reg(irg, res);
IRN_VRFY_IRG(res, irg);
return res;
}
ir_graph *irg = current_ir_graph;
res = new_ir_node(db, irg, block, op_EndExcept, mode_T, -1, NULL);
- irg->end_except = res;
+ set_irg_end_except(irg, res);
IRN_VRFY_IRG (res, irg);
return res;
}
return res;
}
+static ir_node *
+new_bd_Psi (dbg_info *db, ir_node *block,
+ int arity, ir_node *cond[], ir_node *vals[], ir_mode *mode)
+{
+ ir_node **in;
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+ int i;
+
+ NEW_ARR_A(ir_node *, in, 2 * arity + 1);
+
+ for (i = 0; i < arity; ++i) {
+ in[2 * i] = cond[i];
+ in[2 * i + 1] = vals[i];
+ }
+ in[2 * i] = vals[i];
+
+ res = new_ir_node(db, irg, block, op_Psi, mode, 2 * arity + 1, in);
+ assert(res);
+
+ res = optimize_node(res);
+ IRN_VRFY_IRG(res, irg);
+ return res;
+}
+
static ir_node *
new_bd_CopyB (dbg_info *db, ir_node *block,
ir_node *store, ir_node *dst, ir_node *src, ir_type *data_type)
ir_node *new_rd_SymConst_addr_ent (dbg_info *db, ir_graph *irg, entity *symbol, ir_type *tp)
{
symconst_symbol sym = {(ir_type *)symbol};
- return new_rd_SymConst_type(db, irg, irg->start_block, sym, symconst_addr_ent, tp);
+ return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_addr_ent, tp);
}
ir_node *new_rd_SymConst_addr_name (dbg_info *db, ir_graph *irg, ident *symbol, ir_type *tp) {
symconst_symbol sym = {(ir_type *)symbol};
- return new_rd_SymConst_type(db, irg, irg->start_block, sym, symconst_addr_name, tp);
+ return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_addr_name, tp);
}
ir_node *new_rd_SymConst_type_tag (dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp) {
symconst_symbol sym = {symbol};
- return new_rd_SymConst_type(db, irg, irg->start_block, sym, symconst_type_tag, tp);
+ return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_type_tag, tp);
}
ir_node *new_rd_SymConst_size (dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp) {
symconst_symbol sym = {symbol};
- return new_rd_SymConst_type(db, irg, irg->start_block, sym, symconst_size, tp);
+ return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_size, tp);
}
ir_node *
}
ir_node *
-new_rd_Bad (ir_graph *irg)
-{
- return irg->bad;
+new_rd_Bad (ir_graph *irg) {
+ return get_irg_bad(irg);
}
ir_node *
ir_node *res;
res = new_ir_node(db, irg, block, op_EndReg, mode_T, -1, NULL);
- irg->end_reg = res;
+ set_irg_end_reg(irg, res);
IRN_VRFY_IRG(res, irg);
return res;
}
ir_node *res;
res = new_ir_node(db, irg, block, op_EndExcept, mode_T, -1, NULL);
- irg->end_except = res;
+ set_irg_end_except(irg, res);
IRN_VRFY_IRG (res, irg);
return res;
}
ir_node *
new_rd_NoMem (ir_graph *irg) {
- return irg->no_mem;
+ return get_irg_no_mem(irg);
}
ir_node *
return res;
}
+ir_node *
+new_rd_Psi (dbg_info *db, ir_graph *irg, ir_node *block,
+ int arity, ir_node *cond[], ir_node *vals[], ir_mode *mode)
+{
+ ir_node *res;
+ ir_graph *rem = current_ir_graph;
+
+ current_ir_graph = irg;
+ res = new_bd_Psi(db, block, arity, cond, vals, mode);
+ current_ir_graph = rem;
+
+ return res;
+}
+
ir_node *new_rd_CopyB(dbg_info *db, ir_graph *irg, ir_node *block,
ir_node *store, ir_node *dst, ir_node *src, ir_type *data_type)
{
ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode) {
return new_rd_Mux(NULL, irg, block, sel, ir_false, ir_true, mode);
}
+ir_node *new_r_Psi (ir_graph *irg, ir_node *block,
+ int arity, ir_node *conds[], ir_node *vals[], ir_mode *mode) {
+ return new_rd_Psi(NULL, irg, block, arity, conds, vals, mode);
+}
ir_node *new_r_CopyB(ir_graph *irg, ir_node *block,
ir_node *store, ir_node *dst, ir_node *src, ir_type *data_type) {
return new_rd_CopyB(NULL, irg, block, store, dst, src, data_type);
/* Memory Phis in endless loops must be kept alive.
As we can't distinguish these easily we keep all of them alive. */
if ((res->op == op_Phi) && (mode == mode_M))
- add_End_keepalive(irg->end, res);
+ add_End_keepalive(get_irg_end(irg), res);
}
return res;
ir_node *
new_d_Const (dbg_info *db, ir_mode *mode, tarval *con)
{
- return new_bd_Const(db, current_ir_graph->start_block, mode, con);
+ return new_bd_Const(db, get_irg_start_block(current_ir_graph), mode, con);
}
ir_node *
new_d_Const_long(dbg_info *db, ir_mode *mode, long value)
{
- return new_bd_Const_long(db, current_ir_graph->start_block, mode, value);
+ return new_bd_Const_long(db, get_irg_start_block(current_ir_graph), mode, value);
}
ir_node *
new_d_Const_type (dbg_info *db, ir_mode *mode, tarval *con, ir_type *tp)
{
- return new_bd_Const_type(db, current_ir_graph->start_block, mode, con, tp);
+ return new_bd_Const_type(db, get_irg_start_block(current_ir_graph), mode, con, tp);
}
ir_node *
new_d_SymConst_type (dbg_info *db, symconst_symbol value, symconst_kind kind, ir_type *tp)
{
- return new_bd_SymConst_type (db, current_ir_graph->start_block,
+ return new_bd_SymConst_type (db, get_irg_start_block(current_ir_graph),
value, kind, tp);
}
ir_node *
new_d_SymConst (dbg_info *db, symconst_symbol value, symconst_kind kind)
{
- return new_bd_SymConst (db, current_ir_graph->start_block,
+ return new_bd_SymConst (db, get_irg_start_block(current_ir_graph),
value, kind);
}
sel, ir_false, ir_true, mode);
}
+ir_node *
+new_d_Psi (dbg_info *db,int arity, ir_node *conds[], ir_node *vals[], ir_mode *mode) {
+ return new_bd_Psi (db, current_ir_graph->current_block,
+ arity, conds, vals, mode);
+}
+
ir_node *new_d_CopyB(dbg_info *db,ir_node *store,
ir_node *dst, ir_node *src, ir_type *data_type) {
ir_node *res;
void
keep_alive (ir_node *ka) {
- add_End_keepalive(current_ir_graph->end, ka);
+ add_End_keepalive(get_irg_end(current_ir_graph), ka);
}
/* --- Useful access routines --- */
default_initialize_local_variable = func;
}
-/* call for each graph */
-void
-irg_finalize_cons (ir_graph *irg) {
- irg->phase_state = phase_high;
-}
-
void
irp_finalize_cons (void) {
- int i, n_irgs = get_irp_n_irgs();
- for (i = 0; i < n_irgs; i++) {
+ int i;
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
irg_finalize_cons(get_irp_irg(i));
}
irp->phase_state = phase_high;
ir_node *new_Mux (ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode) {
return new_d_Mux(NULL, sel, ir_false, ir_true, mode);
}
+ir_node *new_Psi (int arity, ir_node *conds[], ir_node *vals[], ir_mode *mode) {
+ return new_d_Psi(NULL, arity, conds, vals, mode);
+}
ir_node *new_CopyB(ir_node *store, ir_node *dst, ir_node *src, ir_type *data_type) {
return new_d_CopyB(NULL, store, dst, src, data_type);
}