(expand_divmod): prefer divmod in same mode over div in wider mode.

From-SVN: r13638
This commit is contained in:
Richard Kenner 1997-02-15 08:42:02 -05:00
parent 2d20490118
commit dc38b29226
1 changed files with 12 additions and 5 deletions

View File

@ -3661,11 +3661,18 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
return gen_lowpart (mode, remainder);
}
/* Produce the quotient. */
/* Try a quotient insn, but not a library call. */
quotient = sign_expand_binop (compute_mode, udiv_optab, sdiv_optab,
op0, op1, rem_flag ? NULL_RTX : target,
unsignedp, OPTAB_WIDEN);
/* Produce the quotient. Try a quotient insn, but not a library call.
If we have a divmod in this mode, use it in preference to widening
the div (for this test we assume it will not fail). Note that optab2
is set to the one of the two optabs that the call below will use. */
quotient
= sign_expand_binop (compute_mode, udiv_optab, sdiv_optab,
op0, op1, rem_flag ? NULL_RTX : target,
unsignedp,
((optab2->handlers[(int) compute_mode].insn_code
!= CODE_FOR_nothing)
? OPTAB_DIRECT : OPTAB_WIDEN));
if (quotient == 0)
{
/* No luck there. Try a quotient-and-remainder insn,