From d434a42c5be6bce27fb525dedc2dd5b5f6a3e17f Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Wed, 9 Sep 1992 06:56:35 +0000 Subject: [PATCH] (convert_to_integer): When optimizing LSHIFT_EXPR and RSHIFT_EXPR, do compares at tree level. From-SVN: r2086 --- gcc/c-convert.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) 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: