Patchwork Fix ICE (PR Tree-Vect/45847).

login
register
mail settings
Submitter tejas belagod
Date Oct. 5, 2010, 1:20 p.m.
Message ID <1286284825.22296.74.camel@e102484-lin.cambridge.arm.com>
Download mbox | patch
Permalink /patch/66826/
State New
Headers show

Comments

tejas belagod - Oct. 5, 2010, 1:20 p.m.
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?

--
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.
Richard Guenther - Oct. 5, 2010, 1:51 p.m.
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.
>

Patch

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,