(convert_to_integer): When optimizing LSHIFT_EXPR and

RSHIFT_EXPR, do compares at tree level.

From-SVN: r2086
This commit is contained in:
Richard Stallman 1992-09-09 06:56:35 +00:00
parent 24f8db991b
commit d434a42c5b

View File

@ -177,20 +177,20 @@ convert_to_integer (type, expr)
{
case RSHIFT_EXPR:
/* We can pass truncation down through right shifting
when the shift count is a negative constant. */
if (TREE_CODE (TREE_OPERAND (expr, 1)) != INTEGER_CST
|| TREE_INT_CST_LOW (TREE_OPERAND (expr, 1)) > 0)
break;
goto trunc1;
when the shift count is a nonpositive constant. */
if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
&& tree_int_cst_lt (TREE_OPERAND (expr, 1), integer_one_node))
goto trunc1;
break;
case LSHIFT_EXPR:
/* We can pass truncation down through left shifting
when the shift count is a positive constant. */
if (TREE_CODE (TREE_OPERAND (expr, 1)) != INTEGER_CST
|| TREE_INT_CST_LOW (TREE_OPERAND (expr, 1)) < 0)
break;
/* In this case, shifting is like multiplication. */
goto trunc1;
when the shift count is a nonnegative constant. */
if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
&& ! tree_int_cst_lt (TREE_OPERAND (expr, 1), integer_zero_node))
/* In this case, shifting is like multiplication. */
goto trunc1;
break;
case MAX_EXPR:
case MIN_EXPR: