From: Jack Howarth Date: Fri, 10 Feb 2012 12:34:17 +0000 (+0000) Subject: Backport the fix for PR tree-optimization/49536 from mainline. X-Git-Tag: releases/gcc-4.6.3~96 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9575e3b7266222a1e8b01a9c5d699d3dd4745df5;p=thirdparty%2Fgcc.git Backport the fix for PR tree-optimization/49536 from mainline. Patch by Jack Howarth, approved by Richard Guenther. From-SVN: r184090 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6540af709841..36afb4283b4b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2012-02-09 Jack Howarth + + Backported from mainline + 2011-06-27 Richard Guenther + + PR tree-optimization/49536 + * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): + For non-scalar inner types use a scalar type according to + the scalar inner mode. + 2012-02-09 Jakub Jelinek Backported from mainline diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index ee3492945627..b5ecd3f24eee 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -5117,6 +5117,15 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size) && GET_MODE_CLASS (inner_mode) != MODE_FLOAT) return NULL_TREE; + /* We shouldn't end up building VECTOR_TYPEs of non-scalar components. + When the component mode passes the above test simply use a type + corresponding to that mode. The theory is that any use that + would cause problems with this will disable vectorization anyway. */ + if (!SCALAR_FLOAT_TYPE_P (scalar_type) + && !INTEGRAL_TYPE_P (scalar_type) + && !POINTER_TYPE_P (scalar_type)) + scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1); + /* If no size was supplied use the mode the target prefers. Otherwise lookup a vector mode of the specified size. */ if (size == 0)