On Mon, Jan 11, 2016 at 11:06 AM, Yuri Rumyantsev <ysrum...@gmail.com> wrote: > Hi Richard, > > Did you have anu chance to look at updated patch?
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index acbb70b..208a752 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -5771,6 +5771,10 @@ register_edge_assert_for (tree name, edge e, gimple_stmt_iterator si, &comp_code, &val)) return; + /* VRP doesn't track ranges for vector types. */ + if (TREE_CODE (TREE_TYPE (name)) == VECTOR_TYPE) + return; + please instead fix extract_code_and_val_from_cond_with_ops with Index: gcc/tree-vrp.c =================================================================== --- gcc/tree-vrp.c (revision 232506) +++ gcc/tree-vrp.c (working copy) @@ -5067,8 +5067,9 @@ extract_code_and_val_from_cond_with_ops if (invert) comp_code = invert_tree_comparison (comp_code, 0); - /* VRP does not handle float types. */ - if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (val))) + /* VRP only handles integral and pointer types. */ + if (! INTEGRAL_TYPE_P (TREE_TYPE (val)) + && ! POINTER_TYPE_P (TREE_TYPE (val))) return false; /* Do not register always-false predicates. Ok with that change. Thanks, Richard. > Thanks. > Yuri. > > 2015-12-18 13:20 GMT+03:00 Yuri Rumyantsev <ysrum...@gmail.com>: >> Hi Richard, >> >> Here is updated patch for middle-end part of the whole patch which >> fixes all your remarks I hope. >> >> Regression testing and bootstrapping did not show any new failures. >> Is it OK for trunk? >> >> Yuri. >> >> ChangeLog: >> 2015-12-18 Yuri Rumyantsev <ysrum...@gmail.com> >> >> PR middle-end/68542 >> * fold-const.c (fold_binary_op_with_conditional_arg): Bail out for case >> of mixind vector and scalar types. >> (fold_relational_const): Add handling of vector >> comparison with boolean result. >> * tree-cfg.c (verify_gimple_comparison): Add argument CODE, allow >> comparison of vector operands with boolean result for EQ/NE only. >> (verify_gimple_assign_binary): Adjust call for verify_gimple_comparison. >> (verify_gimple_cond): Likewise. >> * tree-ssa-forwprop.c (combine_cond_expr_cond): Do not perform