+2004-09-12 David Edelsohn <edelsohn@gnu.org>
+
+ 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 <apinski@apple.com>
* darwin.h (ASM_OUTPUT_COMMON): Make sure we do not have a
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. */