+ir_node *ir_create_cond_set(ir_node *cond_value, ir_mode *dest_mode)
+{
+ ir_node *lower_block = part_block_edges(cond_value);
+ ir_node *upper_block = get_nodes_block(cond_value);
+ ir_graph *irg = get_irn_irg(cond_value);
+ ir_node *cond = new_r_Cond(upper_block, cond_value);
+ ir_node *proj_true = new_r_Proj(cond, mode_X, pn_Cond_true);
+ ir_node *proj_false = new_r_Proj(cond, mode_X, pn_Cond_false);
+ ir_node *in_true[1] = { proj_true };
+ ir_node *in_false[1] = { proj_false };
+ ir_node *true_block = new_r_Block(irg, ARRAY_SIZE(in_true), in_true);
+ ir_node *false_block = new_r_Block(irg, ARRAY_SIZE(in_false),in_false);
+ ir_node *true_jmp = new_r_Jmp(true_block);
+ ir_node *false_jmp = new_r_Jmp(false_block);
+ ir_node *lower_in[2] = { true_jmp, false_jmp };
+ ir_node *one = new_r_Const(irg, get_mode_one(dest_mode));
+ ir_node *zero = new_r_Const(irg, get_mode_null(dest_mode));
+ ir_node *phi_in[2] = { one, zero };
+ ir_node *phi;
+
+ set_irn_in(lower_block, ARRAY_SIZE(lower_in), lower_in);
+ phi = new_r_Phi(lower_block, ARRAY_SIZE(phi_in), phi_in, dest_mode);
+
+ /* make sure we do visit the cond_value later... */
+ ARR_APP1(ir_node*, check_later, cond_value);
+
+ return phi;
+}
+