]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-optimization/107896 - allow v2si to dimode unpacks
authorRichard Biener <rguenther@suse.de>
Mon, 28 Nov 2022 16:26:15 +0000 (17:26 +0100)
committerRichard Biener <rguenther@suse.de>
Mon, 28 Nov 2022 18:41:24 +0000 (19:41 +0100)
The following avoids ICEing for V2SI -> DImode vec_unpacks_lo.

PR tree-optimization/107896
* tree-vect-stmts.cc (supportable_widening_operation):
Handle non-vector mode intermediate mode.

gcc/tree-vect-stmts.cc

index b35b986889d30b1fde6d7ba2debe40f26646dd1e..5485da58b38a0db2ea1a357ee8647ae47b563a8f 100644 (file)
@@ -12194,9 +12194,8 @@ supportable_widening_operation (vec_info *vinfo,
       if (VECTOR_BOOLEAN_TYPE_P (prev_type))
        intermediate_type
          = vect_halve_mask_nunits (prev_type, intermediate_mode);
-      else
+      else if (VECTOR_MODE_P (intermediate_mode))
        {
-         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));
@@ -12204,6 +12203,10 @@ supportable_widening_operation (vec_info *vinfo,
            = build_vector_type_for_mode (intermediate_element_type,
                                          intermediate_mode);
        }
+      else
+       intermediate_type
+         = lang_hooks.types.type_for_mode (intermediate_mode,
+                                           TYPE_UNSIGNED (prev_type));
 
       if (VECTOR_BOOLEAN_TYPE_P (intermediate_type)
          && VECTOR_BOOLEAN_TYPE_P (prev_type)