Deal with vector typed operands in conversions
The following avoids using TYPE_PRECISION on VECTOR_TYPE when looking for bit-precision changes in vectorizable_assignment. We didn't anticipate a stmt like _21 = VIEW_CONVERT_EXPR<unsigned int>(vect__1.7_28); and the following makes sure to handle that. * tree-vect-stmts.cc (vectorizable_assignment): Properly handle non-integral operands when analyzing conversions.
This commit is contained in:
parent
85d8e0d8d5
commit
96854fd753
1 changed files with 8 additions and 5 deletions
|
@ -5833,12 +5833,15 @@ vectorizable_assignment (vec_info *vinfo,
|
|||
/* We do not handle bit-precision changes. */
|
||||
if ((CONVERT_EXPR_CODE_P (code)
|
||||
|| code == VIEW_CONVERT_EXPR)
|
||||
&& INTEGRAL_TYPE_P (TREE_TYPE (scalar_dest))
|
||||
&& (!type_has_mode_precision_p (TREE_TYPE (scalar_dest))
|
||||
|| !type_has_mode_precision_p (TREE_TYPE (op)))
|
||||
&& ((INTEGRAL_TYPE_P (TREE_TYPE (scalar_dest))
|
||||
&& !type_has_mode_precision_p (TREE_TYPE (scalar_dest)))
|
||||
|| (INTEGRAL_TYPE_P (TREE_TYPE (op))
|
||||
&& !type_has_mode_precision_p (TREE_TYPE (op))))
|
||||
/* But a conversion that does not change the bit-pattern is ok. */
|
||||
&& !((TYPE_PRECISION (TREE_TYPE (scalar_dest))
|
||||
> TYPE_PRECISION (TREE_TYPE (op)))
|
||||
&& !(INTEGRAL_TYPE_P (TREE_TYPE (scalar_dest))
|
||||
&& INTEGRAL_TYPE_P (TREE_TYPE (op))
|
||||
&& (TYPE_PRECISION (TREE_TYPE (scalar_dest))
|
||||
> TYPE_PRECISION (TREE_TYPE (op)))
|
||||
&& TYPE_UNSIGNED (TREE_TYPE (op))))
|
||||
{
|
||||
if (dump_enabled_p ())
|
||||
|
|
Loading…
Add table
Reference in a new issue