This patch came out of a discussion held in the gcc mailing list
(https://gcc.gnu.org/ml/gcc/2015-11/msg00067.html).
The patch restricts folding of conditional exprs with lhs previously
set by a type conversion to occur only if the source of the type
conversion's mode is word mode or smaller.
Bootstrapped and reg tested on x86_64 (with --enable-languages=c,c++).
If ok, could you commit please? I don't have commit access.
Regards
Senthil
gcc/ChangeLog
2015-11-11 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* tree-vrp.c (simplify_cond_using_ranges): Fold only
if innerop's mode is word_mode or smaller.
diff --git gcc/tree-vrp.c gcc/tree-vrp.c
index e2393e4..c139bc6 100644
--- gcc/tree-vrp.c
+++ gcc/tree-vrp.c
@@ -9467,6 +9467,8 @@ simplify_cond_using_ranges (gcond *stmt)
innerop = gimple_assign_rhs1 (def_stmt);
if (TREE_CODE (innerop) == SSA_NAME
+ && (GET_MODE_SIZE(TYPE_MODE(TREE_TYPE(innerop)))
+ <= GET_MODE_SIZE(word_mode))
&& !POINTER_TYPE_P (TREE_TYPE (innerop)))
{
value_range *vr = get_value_range (innerop);