From: Richard Stallman Date: Wed, 9 Sep 1992 06:56:35 +0000 (+0000) Subject: (convert_to_integer): When optimizing LSHIFT_EXPR and X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d434a42c5be6bce27fb525dedc2dd5b5f6a3e17f;p=gcc.git (convert_to_integer): When optimizing LSHIFT_EXPR and RSHIFT_EXPR, do compares at tree level. From-SVN: r2086 --- diff --git a/gcc/c-convert.c b/gcc/c-convert.c index afc3ad1dfc9..b160fd1b1ac 100644 --- a/gcc/c-convert.c +++ b/gcc/c-convert.c @@ -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: