+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 */
+
+static ir_node *
+new_bd_Sel(dbg_info *db, ir_node *block, ir_node *store, ir_node *objptr,
+ int arity, ir_node **in, ir_entity *ent) {
+ ir_node **r_in;
+ ir_node *res;
+ int r_arity;
+ ir_graph *irg = current_ir_graph;
+ ir_mode *mode = is_Method_type(get_entity_type(ent)) ? mode_P_code : mode_P_data;
+
+ assert(ent != NULL && is_entity(ent) && "entity expected in Sel construction");
+
+ r_arity = arity + 2;
+ NEW_ARR_A(ir_node *, r_in, r_arity); /* uses alloca */
+ r_in[0] = store;
+ r_in[1] = objptr;
+ memcpy(&r_in[2], in, sizeof(ir_node *) * arity);
+ /*
+ * Sel's can select functions which should be of mode mode_P_code.
+ */
+ res = new_ir_node(db, irg, block, op_Sel, mode, r_arity, r_in);
+ res->attr.sel.ent = ent;
+ res = optimize_node(res);
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_Sel */
+
+static ir_node *
+new_bd_SymConst_type(dbg_info *db, ir_node *block, ir_mode *mode,
+ symconst_symbol value,symconst_kind symkind, ir_type *tp) {
+ ir_graph *irg = current_ir_graph;
+ ir_node *res = new_ir_node(db, irg, block, op_SymConst, mode, 0, NULL);
+
+ res->attr.symc.num = symkind;
+ res->attr.symc.sym = value;
+ res->attr.symc.tp = tp;
+
+ res = optimize_node(res);
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_SymConst_type */
+
+static ir_node *
+new_bd_Sync(dbg_info *db, ir_node *block) {
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ res = new_ir_node(db, irg, block, op_Sync, mode_M, -1, NULL);
+ /* no need to call optimize node here, Sync are always created with no predecessors */
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_Sync */
+
+static ir_node *
+new_bd_Confirm(dbg_info *db, ir_node *block, ir_node *val, ir_node *bound, pn_Cmp cmp) {
+ ir_node *in[2], *res;
+ ir_graph *irg = current_ir_graph;
+
+ in[0] = val;
+ in[1] = bound;
+ res = new_ir_node(db, irg, block, op_Confirm, get_irn_mode(val), 2, in);
+ res->attr.confirm.cmp = cmp;
+ res = optimize_node(res);
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_Confirm */
+
+static ir_node *
+new_bd_Unknown(ir_mode *m) {
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ res = new_ir_node(NULL, irg, get_irg_start_block(irg), op_Unknown, m, 0, NULL);
+ res = optimize_node(res);
+ return res;
+} /* new_bd_Unknown */
+
+static ir_node *
+new_bd_CallBegin(dbg_info *db, ir_node *block, ir_node *call) {
+ ir_node *in[1];
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ in[0] = get_Call_ptr(call);
+ res = new_ir_node(db, irg, block, op_CallBegin, mode_T, 1, in);
+ /* res->attr.callbegin.irg = irg; */
+ res->attr.callbegin.call = call;
+ res = optimize_node(res);
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_CallBegin */
+
+static ir_node *
+new_bd_EndReg(dbg_info *db, ir_node *block) {
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ res = new_ir_node(db, irg, block, op_EndReg, mode_T, -1, NULL);
+ set_irg_end_reg(irg, res);
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_EndReg */
+
+static ir_node *
+new_bd_EndExcept(dbg_info *db, ir_node *block) {
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ res = new_ir_node(db, irg, block, op_EndExcept, mode_T, -1, NULL);
+ set_irg_end_except(irg, res);
+ IRN_VRFY_IRG (res, irg);
+ return res;
+} /* new_bd_EndExcept */
+
+static ir_node *
+new_bd_Break(dbg_info *db, ir_node *block) {
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ res = new_ir_node(db, irg, block, op_Break, mode_X, 0, NULL);
+ res = optimize_node(res);
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_Break */
+
+static ir_node *
+new_bd_Filter(dbg_info *db, ir_node *block, ir_node *arg, ir_mode *mode,
+ long proj) {
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ res = new_ir_node(db, irg, block, op_Filter, mode, 1, &arg);
+ res->attr.filter.proj = proj;
+ res->attr.filter.in_cg = NULL;
+ res->attr.filter.backedge = NULL;