fold-const.c (fold_convertible_p): Don't return true for conversion of VECTOR_TYPE to same sized integral type.

* fold-const.c (fold_convertible_p): Don't return true
	for conversion of VECTOR_TYPE to same sized integral type.
	(fold_convert_loc): Fix up formatting.  Fold conversion of
	VECTOR_TYPE to same sized integral type using VIEW_CONVERT_EXPR
	instead of NOP_EXPR.

From-SVN: r232236
This commit is contained in:
Jakub Jelinek 2016-01-11 18:57:43 +01:00 committed by Jakub Jelinek
parent 1ebd5558eb
commit 5a32af0ec5
2 changed files with 11 additions and 8 deletions

View File

@ -1,5 +1,11 @@
2016-01-11 Jakub Jelinek <jakub@redhat.com> 2016-01-11 Jakub Jelinek <jakub@redhat.com>
* fold-const.c (fold_convertible_p): Don't return true
for conversion of VECTOR_TYPE to same sized integral type.
(fold_convert_loc): Fix up formatting. Fold conversion of
VECTOR_TYPE to same sized integral type using VIEW_CONVERT_EXPR
instead of NOP_EXPR.
PR tree-optimization/69214 PR tree-optimization/69214
* tree-vrp.c (simplify_cond_using_ranges): Don't propagate * tree-vrp.c (simplify_cond_using_ranges): Don't propagate
innerop into a comparison if SSA_NAME_OCCURS_IN_ABNORMAL_PHI. innerop into a comparison if SSA_NAME_OCCURS_IN_ABNORMAL_PHI.

View File

@ -2182,11 +2182,8 @@ fold_convertible_p (const_tree type, const_tree arg)
case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE: case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
case POINTER_TYPE: case REFERENCE_TYPE: case POINTER_TYPE: case REFERENCE_TYPE:
case OFFSET_TYPE: case OFFSET_TYPE:
if (INTEGRAL_TYPE_P (orig) || POINTER_TYPE_P (orig) return (INTEGRAL_TYPE_P (orig) || POINTER_TYPE_P (orig)
|| TREE_CODE (orig) == OFFSET_TYPE) || TREE_CODE (orig) == OFFSET_TYPE);
return true;
return (TREE_CODE (orig) == VECTOR_TYPE
&& tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (orig)));
case REAL_TYPE: case REAL_TYPE:
case FIXED_POINT_TYPE: case FIXED_POINT_TYPE:
@ -2241,11 +2238,11 @@ fold_convert_loc (location_t loc, tree type, tree arg)
return fold_build1_loc (loc, NOP_EXPR, type, arg); return fold_build1_loc (loc, NOP_EXPR, type, arg);
if (TREE_CODE (orig) == COMPLEX_TYPE) if (TREE_CODE (orig) == COMPLEX_TYPE)
return fold_convert_loc (loc, type, return fold_convert_loc (loc, type,
fold_build1_loc (loc, REALPART_EXPR, fold_build1_loc (loc, REALPART_EXPR,
TREE_TYPE (orig), arg)); TREE_TYPE (orig), arg));
gcc_assert (TREE_CODE (orig) == VECTOR_TYPE gcc_assert (TREE_CODE (orig) == VECTOR_TYPE
&& tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (orig))); && tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (orig)));
return fold_build1_loc (loc, NOP_EXPR, type, arg); return fold_build1_loc (loc, VIEW_CONVERT_EXPR, type, arg);
case REAL_TYPE: case REAL_TYPE:
if (TREE_CODE (arg) == INTEGER_CST) if (TREE_CODE (arg) == INTEGER_CST)