diff --git a/gcc/expr.cc b/gcc/expr.cc index 320be8b17a13e3b9a81369f50ddfbce0961b96d6..7a471f20e794a9ca08b2f37d40c5bedcdd032721 100644 --- a/gcc/expr.cc +++ b/gcc/expr.cc @@ -9648,6 +9648,7 @@ expand_expr_divmod (tree_code code, machine_mode mode, tree treeop0, end_sequence (); unsigned uns_cost = seq_cost (uns_insns, speed_p); unsigned sgn_cost = seq_cost (sgn_insns, speed_p); + bool was_tie = false; /* If costs are the same then use as tie breaker the other other factor. */ @@ -9655,8 +9656,14 @@ expand_expr_divmod (tree_code code, machine_mode mode, tree treeop0, { uns_cost = seq_cost (uns_insns, !speed_p); sgn_cost = seq_cost (sgn_insns, !speed_p); + was_tie = true; } + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf(dump_file, "positive division:%s unsigned cost: %u; " + "signed cost: %u\n", was_tie ? "(needed tie breaker)":"", + uns_cost, sgn_cost); + if (uns_cost < sgn_cost || (uns_cost == sgn_cost && unsignedp)) { emit_insn (uns_insns);