diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-04-25 13:35:38 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-04-25 13:35:38 +0200 |
commit | 0ea62d936f1915759660b1a4e6ed124f73ac37ee (patch) | |
tree | 2c516d8bbd1d94a9cea0ff4574eb770c8f256524 /gcc/tree-vrp.c | |
parent | 228f466fd61238fb74283b6b7d85cba483ce51ef (diff) | |
download | gcc-0ea62d936f1915759660b1a4e6ed124f73ac37ee.zip gcc-0ea62d936f1915759660b1a4e6ed124f73ac37ee.tar.gz gcc-0ea62d936f1915759660b1a4e6ed124f73ac37ee.tar.bz2 |
re PR tree-optimization/53058 (Another ice in remove_range_assertions)
PR tree-optimization/53058
* double-int.h (double_int_max_value, double_int_min_value): New
prototypes.
* double-int.c (double_int_max_value, double_int_min_value): New
functions.
* tree-vrp.c (register_edge_assert_for_2): Compare mask
for LE_EXPR or GT_EXPR with double_int_max_value
instead of double_int_mask.
* gcc.c-torture/compile/pr53058.c: New test.
From-SVN: r186816
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 73b3bb4..9066096 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -4565,6 +4565,7 @@ register_edge_assert_for_2 (tree name, edge e, gimple_stmt_iterator bsi, && INTEGRAL_TYPE_P (TREE_TYPE (name2)) && IN_RANGE (tree_low_cst (cst2, 1), 1, prec - 1) && prec <= 2 * HOST_BITS_PER_WIDE_INT + && prec == GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (val))) && live_on_edge (e, name2) && !has_single_use (name2)) { @@ -4598,8 +4599,10 @@ register_edge_assert_for_2 (tree name, edge e, gimple_stmt_iterator bsi, new_val = val2; else { + double_int maxval + = double_int_max_value (prec, TYPE_UNSIGNED (TREE_TYPE (val))); mask = double_int_ior (tree_to_double_int (val2), mask); - if (double_int_minus_one_p (double_int_sext (mask, prec))) + if (double_int_equal_p (mask, maxval)) new_val = NULL_TREE; else new_val = double_int_to_tree (TREE_TYPE (val2), mask); |