+
+static void remove_senseless_conds(ir_node *bl, void *data)
+{
+ int i, j;
+ int n = get_irn_arity(bl);
+
+ assert(is_Block(bl));
+
+ for(i = 0; i < n; ++i) {
+ ir_node *pred_i = get_irn_n(bl, i);
+ ir_node *cond_i = skip_Proj(pred_i);
+
+ for(j = i + 1; j < n; ++j) {
+ ir_node *pred_j = get_irn_n(bl, j);
+ ir_node *cond_j = skip_Proj(pred_j);
+
+ if(cond_j == cond_i
+ && get_irn_opcode(cond_i) == iro_Cond
+ && get_irn_mode(get_Cond_selector(cond_i)) == mode_b) {
+
+ ir_node *jmp = new_r_Jmp(current_ir_graph, get_nodes_block(cond_i));
+ set_irn_n(bl, i, jmp);
+ set_irn_n(bl, j, new_Bad());
+
+ break;
+ }
+ }
+ }
+}
+
+