http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54713
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-28 08:36:28 UTC --- (In reply to comment #4) > Created attachment 28293 [details] > gcc48-pr54713.patch > > Updated patch. I had to make the CONSTRUCTOR checking less strict, in > particular there are CONSTRUCTORS with (consecutive) indexes as well as NULL > indexes, there are CONSTRUCTORS with less than nunits elements even when the > elements are scalar. Ugh, less than nunits is probably ok for GENERIC but in GIMPLE we really want trailing zeros explicit ... :/ Thus, if we need to "gimplify" vector constructors we can as well clear their indexes? > But even with all this I'm still getting gfortran.dg/loc_2.f90 -O3 ICEs, > apparently SLP creates vector CONSTRUCTOR with type integer(kind=4) vector, > but > elements logical(kind=4) (i.e. same TYPE_MODE, but INTEGER_TYPE vs. > BOOLEAN_TYPE. Shall I make the verification even less strict (check TYPE_MODE > instead of useless_type_conversion?), or shall we fix the vectorizer? The vectorizer needs to be fixed. See the comment in get_vectype_for_scalar_type_and_size: /* For vector types of elements whose mode precision doesn't match their types precision we use a element type of mode precision. The vectorization routines will have to make sure they support the proper result truncation/extension. We also make sure to build vector types with INTEGER_TYPE component type only. */ > Shouldn't I split the patch into the bugfixes + testcases and submit it before > the verification, so that the latter can be done more slowly? Yes, I think separate patches would be prefered.