From ad4f3f5d4eb21c886b168a092cc7e5860e3b3119 Mon Sep 17 00:00:00 2001 From: Yury Gribov Date: Wed, 23 May 2018 07:40:43 +0000 Subject: re PR tree-optimization/85822 (Maybe wrong code in VRP since r249150) PR tree-optimization/85822 From-SVN: r260566 --- gcc/tree-vrp.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'gcc/tree-vrp.c') diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index aa53db6..6c482dd 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -3844,10 +3844,10 @@ register_edge_assert_for_1 (tree op, enum tree_code code, Such comparison can yield assertions like X >= XX...X00...0 X <= XX...X11...1 - in case of COND_OP being NE_EXPR or + in case of COND_OP being EQ_EXPR or X < XX...X00...0 X > XX...X11...1 - in case of EQ_EXPR. */ + in case of NE_EXPR. */ static bool is_masked_range_test (tree name, tree valt, enum tree_code cond_code, @@ -3867,6 +3867,10 @@ is_masked_range_test (tree name, tree valt, enum tree_code cond_code, wi::tree_to_wide_ref mask = wi::to_wide (maskt); wide_int inv_mask = ~mask; + /* Must have been removed by now so don't bother optimizing. */ + if (mask == 0 || inv_mask == 0) + return false; + /* Assume VALT is INTEGER_CST. */ wi::tree_to_wide_ref val = wi::to_wide (valt); @@ -3907,9 +3911,6 @@ is_masked_range_test (tree name, tree valt, enum tree_code cond_code, *low = wide_int_to_tree (type, val); *high = wide_int_to_tree (type, val | inv_mask); - if (wi::neg_p (val, TYPE_SIGN (type))) - std::swap (*low, *high); - return true; } -- cgit v1.1