-static ir_node *
-new_bd_Conv(dbg_info *db, ir_node *block, ir_node *op, ir_mode *mode, int strict_flag) {
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- res = new_ir_node(db, irg, block, op_Conv, mode, 1, &op);
- res->attr.conv.strict = strict_flag;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Conv */
-
-#ifdef USE_ORIGINAL
-static ir_node *
-new_bd_Cast(dbg_info *db, ir_node *block, ir_node *op, ir_type *to_tp) {
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- assert(is_atomic_type(to_tp));
-
- res = new_ir_node(db, irg, block, op_Cast, get_irn_mode(op), 1, &op);
- res->attr.cast.totype = to_tp;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Cast */
-
-static ir_node *
-new_bd_Tuple(dbg_info *db, ir_node *block, int arity, ir_node **in) {
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- res = new_ir_node(db, irg, block, op_Tuple, mode_T, arity, in);
- res = optimize_node (res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Tuple */
-
-NEW_BD_BINOP(Add)
-#endif
-NEW_BD_BINOP(Sub)
-NEW_BD_UNOP(Minus)
-NEW_BD_BINOP(Mul)
-NEW_BD_BINOP(Mulh)
-NEW_BD_DIVOP(Quot)
-NEW_BD_DIVOP(DivMod)
-#ifdef USE_ORIGINAL
-NEW_BD_DIVOP(Div)
-#endif
-NEW_BD_DIVOP(Mod)
-NEW_BD_BINOP(And)
-NEW_BD_BINOP(Or)
-NEW_BD_BINOP(Eor)
-NEW_BD_UNOP(Not)
-NEW_BD_BINOP(Shl)
-NEW_BD_BINOP(Shr)
-NEW_BD_BINOP(Shrs)
-NEW_BD_BINOP(Rotl)
-NEW_BD_UNOP(Abs)
-NEW_BD_BINOP(Carry)
-NEW_BD_BINOP(Borrow)
-
-/** Creates a remainderless Div node. */
-static ir_node *new_bd_DivRL(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_Div, mode_T, 3, in);
- res->attr.divmod.exc.pin_state = state;
- res->attr.divmod.res_mode = mode;
- res->attr.divmod.no_remainder = 1;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-}
-
-#ifdef USE_ORIGINAL
-static ir_node *
-new_bd_Cmp(dbg_info *db, ir_node *block, ir_node *op1, ir_node *op2) {
- 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_Cmp, mode_T, 2, in);
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Cmp */
-
-static ir_node *
-new_bd_Jmp(dbg_info *db, ir_node *block) {
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- res = new_ir_node(db, irg, block, op_Jmp, mode_X, 0, NULL);
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Jmp */
-
-static ir_node *
-new_bd_IJmp(dbg_info *db, ir_node *block, ir_node *tgt) {
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- res = new_ir_node(db, irg, block, op_IJmp, mode_X, 1, &tgt);
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_IJmp */
-
-static ir_node *
-new_bd_Cond(dbg_info *db, ir_node *block, ir_node *c) {
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- res = new_ir_node(db, irg, block, op_Cond, mode_T, 1, &c);
- res->attr.cond.kind = dense;
- res->attr.cond.default_proj = 0;
- res->attr.cond.pred = COND_JMP_PRED_NONE;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Cond */
-#endif
-
-static ir_node *
-new_bd_Call(dbg_info *db, ir_node *block, ir_node *store,
- ir_node *callee, int arity, ir_node **in, ir_type *tp) {
- ir_node **r_in;
- ir_node *res;
- int r_arity;
- ir_graph *irg = current_ir_graph;
-
- r_arity = arity + 2;
- NEW_ARR_A(ir_node *, r_in, r_arity);
- r_in[0] = store;
- r_in[1] = callee;
- memcpy(&r_in[2], in, sizeof(ir_node *) * arity);
-
- res = new_ir_node(db, irg, block, op_Call, mode_T, r_arity, r_in);
-
- assert((get_unknown_type() == tp) || is_Method_type(tp));
- set_Call_type(res, tp);
- res->attr.call.exc.pin_state = op_pin_state_pinned;
- res->attr.call.callee_arr = NULL;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Call */
-
-static ir_node *
-new_bd_Builtin(dbg_info *db, ir_node *block, ir_node *store,
- ir_builtin_kind kind, int arity, ir_node **in, ir_type *tp) {
- ir_node **r_in;
- ir_node *res;
- int r_arity;
- ir_graph *irg = current_ir_graph;
-
- r_arity = arity + 1;
- NEW_ARR_A(ir_node *, r_in, r_arity);
- r_in[0] = store;
- memcpy(&r_in[1], in, sizeof(ir_node *) * arity);
-
- res = new_ir_node(db, irg, block, op_Builtin, mode_T, r_arity, r_in);
-
- assert((get_unknown_type() == tp) || is_Method_type(tp));
- res->attr.builtin.exc.pin_state = op_pin_state_pinned;
- res->attr.builtin.kind = kind;
- res->attr.builtin.builtin_tp = tp;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Buildin */
-
-static ir_node *
-new_bd_Return(dbg_info *db, ir_node *block,
- ir_node *store, int arity, ir_node **in) {
- ir_node **r_in;
- ir_node *res;
- int r_arity;
- ir_graph *irg = current_ir_graph;
-
- r_arity = arity+1;
- NEW_ARR_A (ir_node *, r_in, r_arity);
- r_in[0] = store;
- memcpy(&r_in[1], in, sizeof(ir_node *) * arity);
- res = new_ir_node(db, irg, block, op_Return, mode_X, r_arity, r_in);
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Return */
-
-static ir_node *
-new_bd_Load(dbg_info *db, ir_node *block,
- ir_node *store, ir_node *adr, ir_mode *mode, ir_cons_flags flags) {
- ir_node *in[2];
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- in[0] = store;
- in[1] = adr;
- res = new_ir_node(db, irg, block, op_Load, mode_T, 2, in);
- res->attr.load.exc.pin_state = flags & cons_floats ? op_pin_state_floats : op_pin_state_pinned;
- res->attr.load.load_mode = mode;
- res->attr.load.volatility = flags & cons_volatile ? volatility_is_volatile : volatility_non_volatile;
- res->attr.load.aligned = flags & cons_unaligned ? align_non_aligned : align_is_aligned;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Load */
-
-static ir_node *
-new_bd_Store(dbg_info *db, ir_node *block,
- ir_node *store, ir_node *adr, ir_node *val, ir_cons_flags flags) {
- ir_node *in[3];
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- in[0] = store;
- in[1] = adr;
- in[2] = val;
- res = new_ir_node(db, irg, block, op_Store, mode_T, 3, in);
- res->attr.store.exc.pin_state = flags & cons_floats ? op_pin_state_floats : op_pin_state_pinned;
- res->attr.store.volatility = flags & cons_volatile ? volatility_is_volatile : volatility_non_volatile;
- res->attr.store.aligned = flags & cons_unaligned ? align_non_aligned : align_is_aligned;
-
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Store */
-
-static ir_node *
-new_bd_Alloc(dbg_info *db, ir_node *block, ir_node *store,
- ir_node *size, ir_type *alloc_type, ir_where_alloc where) {
- ir_node *in[2];
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- in[0] = store;
- in[1] = size;
- res = new_ir_node(db, irg, block, op_Alloc, mode_T, 2, in);
- res->attr.alloc.exc.pin_state = op_pin_state_pinned;
- res->attr.alloc.where = where;
- res->attr.alloc.type = alloc_type;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Alloc */
-
-static ir_node *
-new_bd_Free(dbg_info *db, ir_node *block, ir_node *store,
- ir_node *ptr, ir_node *size, ir_type *free_type, ir_where_alloc where) {
- ir_node *in[3];
- ir_node *res;
- ir_graph *irg = current_ir_graph;
-
- in[0] = store;
- in[1] = ptr;
- in[2] = size;
- res = new_ir_node (db, irg, block, op_Free, mode_M, 3, in);
- res->attr.free.where = where;
- res->attr.free.type = free_type;
- res = optimize_node(res);
- IRN_VRFY_IRG(res, irg);
- return res;
-} /* new_bd_Free */
-