aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.cc
diff options
context:
space:
mode:
authorAndrew Pinski <quic_apinski@quicinc.com>2024-09-03 18:50:37 -0700
committerAndrew Pinski <quic_apinski@quicinc.com>2024-09-03 22:38:21 -0700
commitdbd0eb39c690f80e7a9bb7697aaa3f85ff4dbadd (patch)
treecc81eea7d11db91d7ecc2bd0ae1b3386d3309ca0 /gcc/expr.cc
parent62dd893ff8a12a1d28f595b4e5bc43cf9f7d1c07 (diff)
downloadgcc-dbd0eb39c690f80e7a9bb7697aaa3f85ff4dbadd.zip
gcc-dbd0eb39c690f80e7a9bb7697aaa3f85ff4dbadd.tar.gz
gcc-dbd0eb39c690f80e7a9bb7697aaa3f85ff4dbadd.tar.bz2
expand: Add dump for costing of positive divides
While trying to understand PR 115910 I found it was useful to print out the two costs of doing a signed and unsigned division just like was added in r15-3272-g3c89c41991d8e8 for popcount==1. Bootstrapped and tested on x86_64-linux-gnu. gcc/ChangeLog: * expr.cc (expand_expr_divmod): Add dump of the two costs for positive division. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
Diffstat (limited to 'gcc/expr.cc')
-rw-r--r--gcc/expr.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/expr.cc b/gcc/expr.cc
index 320be8b..7a471f2 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);