diff options
author | Richard Stallman <rms@gnu.org> | 1992-09-09 06:56:35 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-09-09 06:56:35 +0000 |
commit | d434a42c5be6bce27fb525dedc2dd5b5f6a3e17f (patch) | |
tree | bec7c424c0de2b6767359141ab50160cbaedab45 /gcc/c-convert.c | |
parent | 24f8db991baf42e6e5b0a3f76e5425e72e9fb41f (diff) | |
download | gcc-d434a42c5be6bce27fb525dedc2dd5b5f6a3e17f.zip gcc-d434a42c5be6bce27fb525dedc2dd5b5f6a3e17f.tar.gz gcc-d434a42c5be6bce27fb525dedc2dd5b5f6a3e17f.tar.bz2 |
(convert_to_integer): When optimizing LSHIFT_EXPR and
RSHIFT_EXPR, do compares at tree level.
From-SVN: r2086
Diffstat (limited to 'gcc/c-convert.c')
-rw-r--r-- | gcc/c-convert.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/gcc/c-convert.c b/gcc/c-convert.c index afc3ad1..b160fd1 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: |