The following avoids using type_for_mode on vector modes which might
not work for all frontends. Instead we look for the inner mode
type and use build_vector_type_for_mode instead.
PR tree-optimization/107672
* tree-vect-stmts.cc (supportable_widening_operation): Avoid
type_for_mode on vector modes.
intermediate_type
= vect_halve_mask_nunits (prev_type, intermediate_mode);
else
- intermediate_type
- = lang_hooks.types.type_for_mode (intermediate_mode,
- TYPE_UNSIGNED (prev_type));
+ {
+ gcc_assert (VECTOR_MODE_P (intermediate_mode));
+ tree intermediate_element_type
+ = lang_hooks.types.type_for_mode (GET_MODE_INNER (intermediate_mode),
+ TYPE_UNSIGNED (prev_type));
+ intermediate_type
+ = build_vector_type_for_mode (intermediate_element_type,
+ intermediate_mode);
+ }
if (VECTOR_BOOLEAN_TYPE_P (intermediate_type)
&& VECTOR_BOOLEAN_TYPE_P (prev_type)