+/**
+ * creates a "set" node that produces a 0 or 1 based on a Cmp result
+ */
+static ir_node *create_set(ir_node *node)
+{
+ ir_graph *irg = current_ir_graph;
+ dbg_info *dbgi = get_irn_dbg_info(node);
+ ir_mode *mode = config.lowered_set_mode;
+ tarval *tv_one = get_tarval_one(mode);
+ ir_node *one = new_d_Const(dbgi, mode, tv_one);
+ ir_node *block = get_nodes_block(node);
+ tarval *tv_zero = get_tarval_null(mode);
+ ir_node *zero = new_d_Const(dbgi, mode, tv_zero);
+
+ ir_node *set = new_rd_Mux(dbgi, irg, block, node, zero, one, mode);
+
+ if (mode != config.lowered_mode) {
+ set = new_r_Conv(irg, block, set, config.lowered_mode);
+ }
+
+ return set;
+}
+
+static void adjust_method_type(ir_type *method_type)
+{
+ int i;
+ int n_params;
+ int n_res;
+
+ n_params = get_method_n_params(method_type);
+ for(i = 0; i < n_params; ++i) {
+ ir_type *param = get_method_param_type(method_type, i);
+ if(get_type_mode(param) == mode_b) {
+ set_method_param_type(method_type, i, create_lowered_type());
+ }
+ }
+
+ n_res = get_method_n_ress(method_type);
+ for(i = 0; i < n_res; ++i) {
+ ir_type *res_type = get_method_res_type(method_type, i);
+ if(get_type_mode(res_type) == mode_b) {
+ set_method_res_type(method_type, i, create_lowered_type());
+ }
+ }