Message ID | 1286284825.22296.74.camel@e102484-lin.cambridge.arm.com |
---|---|
State | New |
Headers | show |
On Tue, Oct 5, 2010 at 3:20 PM, Tejas Belagod <tejas.belagod@arm.com> wrote: > Hi, > > The attached patch fixes Bugzilla 45847 > (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45847). When compiling > without -mvectorize-with-neon-quad and vectorizing scalar widening > operations that widen words to double words, there are no corresponding > vector types for DI scalar types. For this scenario, a call to > get_vect_type_for_scalar_type() returns NULL and an absent NULL-check > caused this segfault. The attached patch adds this NULL-check. Also, > this is consistent with all the other places where a NULL-check follows > a call to get_vect_type_for_scalar_type() in tree-vect-patterns.c. > > Regression tested with arm-linux-gnueabi. OK? Ok. Thanks, Richard. > -- > Tejas Belagod > ARM. > > gcc/ > > 2010-10-05 Tejas Belagod <tejas.belagod@arm.com> > > * tree-vect-patterns.c (vect_recog_widen_mult_pattern): Add NULL > check for vectype_out returned by get_vectype_for_scalar_type(). > > testsuite/ > > 2010-10-05 Tejas Belagod <tejas.belagod@arm.com> > > * gcc.dg/vect/pr45847.c: New test. >
diff --git a/gcc/testsuite/gcc.dg/vect/pr45847.c b/gcc/testsuite/gcc.dg/vect/pr45847.c new file mode 100644 index 0000000..f34caa1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr45847.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ + + +long long foo (long long *__restrict a, int *__restrict b, int *__restrict c ) +{ + int i; + long long sum=0; + for (i=0;i<256;i++) + sum += (long long)b[i] * c[i]; + + return sum; +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 0d5824c..ebe00d6 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -413,6 +413,7 @@ vect_recog_widen_mult_pattern (gimple last_stmt, vectype = get_vectype_for_scalar_type (half_type0); vectype_out = get_vectype_for_scalar_type (type); if (!vectype + || !vectype_out || !supportable_widening_operation (WIDEN_MULT_EXPR, last_stmt, vectype_out, vectype, &dummy, &dummy, &dummy_code,