Deleted Added
full compact
256a257,260
> /* Nonzero means allow implicit conversions between vectors with
> differing numbers of subparts and/or differing element types. */
> int flag_lax_vector_conversions;
>
1098,1101c1102,1109
< /* Nonzero if vector types T1 and T2 can be converted to each other
< without an explicit cast. */
< int
< vector_types_convertible_p (tree t1, tree t2)
---
>
> /* True if vector types T1 and T2 can be converted to each other
> without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
> can only be converted with -flax-vector-conversions yet that is not
> in effect, emit a note telling the user about that option if such
> a note has not previously been emitted. */
> bool
> vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note)
1103,1109c1111,1140
< return targetm.vector_opaque_p (t1)
< || targetm.vector_opaque_p (t2)
< || (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
< && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
< TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
< && INTEGRAL_TYPE_P (TREE_TYPE (t1))
< == INTEGRAL_TYPE_P (TREE_TYPE (t2)));
---
> static bool emitted_lax_note = false;
> bool convertible_lax;
>
> if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
> && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
> return true;
>
> convertible_lax =
> (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
> && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
> TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
> && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
> == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
>
> if (!convertible_lax || flag_lax_vector_conversions)
> return convertible_lax;
>
> if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
> && comptypes (TREE_TYPE (t1), TREE_TYPE (t2)))
> return true;
>
> if (emit_lax_note && !emitted_lax_note)
> {
> emitted_lax_note = true;
> inform ("use -flax-vector-conversions to permit "
> "conversions between vectors with differing "
> "element types or numbers of subparts");
> }
>
> return false;