-/* creates a bd constructor for a binop */
-#define NEW_BD_BINOP(instr) \
-static ir_node * \
-new_bd_##instr(dbg_info *db, ir_node *block, \
- ir_node *op1, ir_node *op2, ir_mode *mode) \
-{ \
- ir_node *in[2]; \
- ir_node *res; \
- ir_graph *irg = current_ir_graph; \
- in[0] = op1; \
- in[1] = op2; \
- res = new_ir_node(db, irg, block, op_##instr, mode, 2, in); \
- res = optimize_node(res); \
- IRN_VRFY_IRG(res, irg); \
- return res; \
-}
-
-/* creates a bd constructor for an unop */
-#define NEW_BD_UNOP(instr) \
-static ir_node * \
-new_bd_##instr(dbg_info *db, ir_node *block, \
- ir_node *op, ir_mode *mode) \
-{ \
- ir_node *res; \
- ir_graph *irg = current_ir_graph; \
- res = new_ir_node(db, irg, block, op_##instr, mode, 1, &op); \
- res = optimize_node(res); \
- IRN_VRFY_IRG(res, irg); \
- return res; \
-}
-
-/* creates a bd constructor for an divop */
-#define NEW_BD_DIVOP(instr) \
-static ir_node * \
-new_bd_##instr(dbg_info *db, ir_node *block, \
- ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state) \
-{ \
- ir_node *in[3]; \
- ir_node *res; \
- ir_graph *irg = current_ir_graph; \
- in[0] = memop; \
- in[1] = op1; \
- in[2] = op2; \
- res = new_ir_node(db, irg, block, op_##instr, mode_T, 3, in); \
- res->attr.divmod.exc.pin_state = state; \
- res->attr.divmod.resmode = mode; \
- res->attr.divmod.no_remainder = 0; \
- res = optimize_node(res); \
- IRN_VRFY_IRG(res, irg); \
- return res; \
-}
-
-/* creates a rd constructor for a binop */
-#define NEW_RD_BINOP(instr) \
-ir_node * \
-new_rd_##instr(dbg_info *db, ir_graph *irg, ir_node *block, \
- ir_node *op1, ir_node *op2, ir_mode *mode) \
-{ \
- ir_node *res; \
- ir_graph *rem = current_ir_graph; \
- current_ir_graph = irg; \
- res = new_bd_##instr(db, block, op1, op2, mode); \
- current_ir_graph = rem; \
- return res; \
-}
-
-/* creates a rd constructor for an unop */
-#define NEW_RD_UNOP(instr) \
-ir_node * \
-new_rd_##instr(dbg_info *db, ir_graph *irg, ir_node *block, \
- ir_node *op, ir_mode *mode) \
-{ \
- ir_node *res; \
- ir_graph *rem = current_ir_graph; \
- current_ir_graph = irg; \
- res = new_bd_##instr(db, block, op, mode); \
- current_ir_graph = rem; \
- return res; \
-}
-
-/* creates a rd constructor for an divop */
-#define NEW_RD_DIVOP(instr) \
-ir_node * \
-new_rd_##instr(dbg_info *db, ir_graph *irg, ir_node *block, \
- ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state) \
-{ \
- ir_node *res; \
- ir_graph *rem = current_ir_graph; \
- current_ir_graph = irg; \
- res = new_bd_##instr(db, block, memop, op1, op2, mode, state);\
- current_ir_graph = rem; \
- return res; \
-}
-
-/* creates a d constructor for an binop */
-#define NEW_D_BINOP(instr) \
-ir_node * \
-new_d_##instr(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode) { \
- return new_bd_##instr(db, current_ir_graph->current_block, op1, op2, mode); \
-}
-
-/* creates a d constructor for an unop */
-#define NEW_D_UNOP(instr) \
-ir_node * \
-new_d_##instr(dbg_info *db, ir_node *op, ir_mode *mode) { \
- return new_bd_##instr(db, current_ir_graph->current_block, op, mode); \
-}
-
-#include "gen_ir_cons.c.inl"
-
-static ir_node *new_bd_Start(dbg_info *db, ir_node *block)
-{
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- res = new_ir_node(db, irg, block, op_Start, mode_T, 0, NULL);
-
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Start */
-
-static ir_node *new_bd_End(dbg_info *db, ir_node *block)
-{
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- res = new_ir_node(db, irg, block, op_End, mode_X, -1, NULL);
-
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_End */
-
-/**
- * Creates a Phi node with all predecessors. Calling this constructor
- * is only allowed if the corresponding block is mature.
- */
-static ir_node *new_bd_Phi(dbg_info *db, ir_node *block, int arity, ir_node **in, ir_mode *mode)
-{
- ir_node *res;
- ir_graph *irg = current_ir_graph;
- int i;
- int has_unknown = 0;
-
- /* Don't assert that block matured: the use of this constructor is strongly
- restricted ... */
- if (get_Block_matured(block))
- assert(get_irn_arity(block) == arity);
-
- res = new_ir_node(db, irg, block, op_Phi, mode, arity, in);
-
- res->attr.phi.u.backedge = new_backedge_arr(irg->obst, arity);
-
- for (i = arity - 1; i >= 0; --i)
- if (is_Unknown(in[i])) {
- has_unknown = 1;
- break;
- }
-
- if (!has_unknown) res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
-
- /* Memory Phis in endless loops must be kept alive.
- As we can't distinguish these easily we keep all of them alive. */
- if (is_Phi(res) && mode == mode_M)
- add_End_keepalive(get_irg_end(irg), res);
- return res;
-} /* new_bd_Phi */
-
-static ir_node *new_bd_Const_type(dbg_info *db, tarval *con, ir_type *tp)
-{
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- res = new_ir_node(db, irg, get_irg_start_block(irg), op_Const, get_tarval_mode(con), 0, NULL);
- res->attr.con.tarval = con;
- set_Const_type(res, tp); /* Call method because of complex assertion. */
- res = optimize_node (res);
- assert(get_Const_type(res) == tp);
- IRN_VRFY_IRG(res, irg);
-
- return res;
-} /* new_bd_Const_type */
-
-static ir_node *new_bd_Const(dbg_info *db, tarval *con)