From 3d520aaf7d3b6812a46efb99b20063b89d1bb524 Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Sun, 12 Sep 2004 20:05:30 +0000 Subject: [PATCH] re PR middle-end/16795 (PowerPC - Divide sequences by negative power of two could be more efficient) PR target/16795 * expmed.c (expand_divmod): If cheap power of 2 divide is available, use it for negative constant as well. From-SVN: r87403 --- gcc/ChangeLog | 6 ++++++ gcc/expmed.c | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c7d9ee14081..1c3b7affc1d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-09-12 David Edelsohn + + PR target/16795 + * expmed.c (expand_divmod): If cheap power of 2 divide is + available, use it for negative constant as well. + 2004-09-12 Andrew Pinski * darwin.h (ASM_OUTPUT_COMMON): Make sure we do not have a diff --git a/gcc/expmed.c b/gcc/expmed.c index fe9aeb5c4c9..eb8226da75f 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -3764,7 +3764,19 @@ expand_divmod (int rem_flag, enum tree_code code, enum machine_mode mode, if (remainder) return gen_lowpart (mode, remainder); } - quotient = expand_sdiv_pow2 (compute_mode, op0, abs_d); + + if (sdiv_pow2_cheap[compute_mode] + && ((sdiv_optab->handlers[compute_mode].insn_code + != CODE_FOR_nothing) + || (sdivmod_optab->handlers[compute_mode].insn_code + != CODE_FOR_nothing))) + quotient = expand_divmod (0, TRUNC_DIV_EXPR, + compute_mode, op0, + gen_int_mode (abs_d, + compute_mode), + NULL_RTX, 0); + else + quotient = expand_sdiv_pow2 (compute_mode, op0, abs_d); /* We have computed OP0 / abs(OP1). If OP1 is negative, negate the quotient. */ -- 2.30.2