- assert(res);
- assert(get_Proj_pred(res));
- assert(get_nodes_block(get_Proj_pred(res)));
-
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-}
-
-static ir_node *
-new_bd_Mux (dbg_info *db, ir_node *block,
- ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode)
-{
- ir_node *in[3];
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- in[0] = sel;
- in[1] = ir_false;
- in[2] = ir_true;
-
- res = new_ir_node(db, irg, block, op_Mux, mode, 3, 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 *in[3];
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- in[0] = store;
- in[1] = dst;
- in[2] = src;
-
- res = new_ir_node(db, irg, block, op_CopyB, mode_T, 3, in);
-
- res->attr.copyb.exc.pin_state = op_pin_state_pinned;
- res->attr.copyb.data_type = data_type;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-}
-
-static ir_node *
-new_bd_Bound (dbg_info *db, ir_node *block,
- ir_node *store, ir_node *idx, ir_node *lower, ir_node *upper)
-{
- ir_node *in[4];
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- in[0] = store;
- in[1] = idx;
- in[2] = lower;
- in[3] = upper;
-
- res = new_ir_node(db, irg, block, op_Bound, mode_T, 4, in);
-
- res->attr.copyb.exc.pin_state = op_pin_state_pinned;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-}
-
-static ir_node *
-new_bd_Keep(dbg_info *db, ir_node *block, int n, ir_node *in[])
-{
- ir_graph *irg = current_ir_graph;
- ir_node *res;
-
- res = new_ir_node(db, irg, block, op_Keep, mode_ANY, n, in);
- keep_alive(res);
-
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-}
-
-/* --------------------------------------------- */
-/* private interfaces, for professional use only */
-/* --------------------------------------------- */
-
-/* Constructs a Block with a fixed number of predecessors.
- Does not set current_block. Can not be used with automatic
- Phi node construction. */
-ir_node *
-new_rd_Block (dbg_info *db, ir_graph *irg, int arity, ir_node **in)
-{
- ir_graph *rem = current_ir_graph;
- ir_node *res;
-
- current_ir_graph = irg;
- res = new_bd_Block (db, arity, in);
- current_ir_graph = rem;
-
- return res;
-}
-
-ir_node *
-new_rd_Start (dbg_info *db, ir_graph *irg, ir_node *block)
-{
- ir_graph *rem = current_ir_graph;
- ir_node *res;
-
- current_ir_graph = irg;
- res = new_bd_Start (db, block);
- current_ir_graph = rem;
-
- return res;
-}
-
-ir_node *
-new_rd_End (dbg_info *db, ir_graph *irg, ir_node *block)
-{
- ir_node *res;
- ir_graph *rem = current_ir_graph;
-
- current_ir_graph = rem;
- res = new_bd_End (db, block);
- current_ir_graph = rem;
-
- return res;
-}
-
-/* Creates a Phi node with all predecessors. Calling this constructor
- is only allowed if the corresponding block is mature. */
-ir_node *
-new_rd_Phi (dbg_info *db, ir_graph *irg, ir_node *block, int arity, ir_node **in, ir_mode *mode)
-{
- ir_node *res;
- ir_graph *rem = current_ir_graph;
-
- current_ir_graph = irg;
- res = new_bd_Phi (db, block,arity, in, mode);
- current_ir_graph = rem;
-
- return res;
-}
-
-ir_node *
-new_rd_Const_type (dbg_info *db, ir_graph *irg, ir_node *block, ir_mode *mode, tarval *con, ir_type *tp)
-{
- ir_node *res;
- ir_graph *rem = current_ir_graph;
-
- current_ir_graph = irg;
- res = new_bd_Const_type (db, block, mode, con, tp);
- current_ir_graph = rem;
-
- return res;
-}
-
-ir_node *
-new_rd_Const (dbg_info *db, ir_graph *irg, ir_node *block, ir_mode *mode, tarval *con)
-{
- ir_node *res;
- ir_graph *rem = current_ir_graph;
-
- current_ir_graph = irg;
- res = new_bd_Const_type (db, block, mode, con, firm_unknown_type);
- current_ir_graph = rem;
-
- return res;
-}
-
-ir_node *
-new_rd_Const_long (dbg_info *db, ir_graph *irg, ir_node *block, ir_mode *mode, long value)
-{
- return new_rd_Const(db, irg, block, mode, new_tarval_from_long(value, mode));
-}
-
-ir_node *
-new_rd_Id (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *val, ir_mode *mode)
-{
- ir_node *res;
- ir_graph *rem = current_ir_graph;
-
- current_ir_graph = irg;
- res = new_bd_Id(db, block, val, mode);
- current_ir_graph = rem;
-
- return res;
-}
-
-ir_node *
-new_rd_Proj (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *arg, ir_mode *mode,
- long proj)
-{
- ir_node *res;
- ir_graph *rem = current_ir_graph;
-
- current_ir_graph = irg;
- res = new_bd_Proj(db, block, arg, mode, proj);
- current_ir_graph = rem;
-
- return res;
-}
-
-ir_node *
-new_rd_defaultProj (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *arg,
- long max_proj)
-{
- ir_node *res;
- ir_graph *rem = current_ir_graph;
-
- current_ir_graph = irg;
- res = new_bd_defaultProj(db, block, arg, max_proj);
- current_ir_graph = rem;
-