(build_binary_op): For TRUNC_MOD_EXPR and FLOOR_MOD_EXPR, set common.

From-SVN: r5895
This commit is contained in:
Richard Stallman 1993-10-26 17:00:09 +00:00
parent bb1106c9b5
commit 03d5b1f5a3
1 changed files with 11 additions and 8 deletions

View File

@ -1982,14 +1982,17 @@ build_binary_op (code, orig_op0, orig_op1, convert_p)
case TRUNC_MOD_EXPR:
case FLOOR_MOD_EXPR:
if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
/* Although it would be tempting to shorten always here, doing so loses
on some targets, since the modulo instruction is undefined if the
quotient can't be represented in the computation mode. We shorten
only if unsigned or if dividing by something we know != -1. */
shorten = (TREE_UNSIGNED (orig_op0)
|| (TREE_CODE (op1) == INTEGER_CST
&& (TREE_INT_CST_LOW (op1) != -1
|| TREE_INT_CST_HIGH (op1) != -1)));
{
/* Although it would be tempting to shorten always here, that loses
on some targets, since the modulo instruction is undefined if the
quotient can't be represented in the computation mode. We shorten
only if unsigned or if dividing by something we know != -1. */
shorten = (TREE_UNSIGNED (orig_op0)
|| (TREE_CODE (op1) == INTEGER_CST
&& (TREE_INT_CST_LOW (op1) != -1
|| TREE_INT_CST_HIGH (op1) != -1)));
common = 1;
}
break;
case TRUTH_ANDIF_EXPR: