diff options
author | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-15 00:18:37 +0000 |
---|---|---|
committer | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-15 00:18:37 +0000 |
commit | faab57e3cef4a6034b2336ac1a015b11733a370d (patch) | |
tree | 8a20893a5c5c0b8de8fe5ddf927281ae604e7f1d /gcc/tree-ssa-loop-niter.c | |
parent | 2eaea01e7a391c5d44b15592423011f1fd2b59e0 (diff) | |
download | gcc-faab57e3cef4a6034b2336ac1a015b11733a370d.tar.gz |
PR tree-optimization/18431
* fold-const.c (associate_trees): Do not produce x + 0.
(fold_widened_comparison, fold_sign_changed_comparison): New functions.
(fold): Use them.
* tree-ssa-loop-niter.c (upper_bound_in_type, lower_bound_in_type):
Moved ...
* tree.c (upper_bound_in_type, lower_bound_in_type): Here.
* tree.h (upper_bound_in_type, lower_bound_in_type): Declare.
* testsuite/gcc.c-torture/execute/20041114-1.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@90646 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-loop-niter.c')
-rw-r--r-- | gcc/tree-ssa-loop-niter.c | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index 6352ba0345e..3d4d4c0dec4 100644 --- a/gcc/tree-ssa-loop-niter.c +++ b/gcc/tree-ssa-loop-niter.c @@ -1103,78 +1103,6 @@ compare_trees (tree a, tree b) return 2; } -/* Returns the largest value obtainable by casting something in INNER type to - OUTER type. */ - -static tree -upper_bound_in_type (tree outer, tree inner) -{ - unsigned HOST_WIDE_INT lo, hi; - unsigned bits = TYPE_PRECISION (inner); - - if (TYPE_UNSIGNED (outer) || TYPE_UNSIGNED (inner)) - { - /* Zero extending in these cases. */ - if (bits <= HOST_BITS_PER_WIDE_INT) - { - hi = 0; - lo = (~(unsigned HOST_WIDE_INT) 0) - >> (HOST_BITS_PER_WIDE_INT - bits); - } - else - { - hi = (~(unsigned HOST_WIDE_INT) 0) - >> (2 * HOST_BITS_PER_WIDE_INT - bits); - lo = ~(unsigned HOST_WIDE_INT) 0; - } - } - else - { - /* Sign extending in these cases. */ - if (bits <= HOST_BITS_PER_WIDE_INT) - { - hi = 0; - lo = (~(unsigned HOST_WIDE_INT) 0) - >> (HOST_BITS_PER_WIDE_INT - bits) >> 1; - } - else - { - hi = (~(unsigned HOST_WIDE_INT) 0) - >> (2 * HOST_BITS_PER_WIDE_INT - bits) >> 1; - lo = ~(unsigned HOST_WIDE_INT) 0; - } - } - - return fold_convert (outer, - build_int_cst_wide (inner, lo, hi)); -} - -/* Returns the smallest value obtainable by casting something in INNER type to - OUTER type. */ - -static tree -lower_bound_in_type (tree outer, tree inner) -{ - unsigned HOST_WIDE_INT lo, hi; - unsigned bits = TYPE_PRECISION (inner); - - if (TYPE_UNSIGNED (outer) || TYPE_UNSIGNED (inner)) - lo = hi = 0; - else if (bits <= HOST_BITS_PER_WIDE_INT) - { - hi = ~(unsigned HOST_WIDE_INT) 0; - lo = (~(unsigned HOST_WIDE_INT) 0) << (bits - 1); - } - else - { - hi = (~(unsigned HOST_WIDE_INT) 0) << (bits - HOST_BITS_PER_WIDE_INT - 1); - lo = 0; - } - - return fold_convert (outer, - build_int_cst_wide (inner, lo, hi)); -} - /* Returns true if statement S1 dominates statement S2. */ static bool |