aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Rosen <irar@il.ibm.com>2008-04-10 05:51:59 +0000
committerIra Rosen <irar@gcc.gnu.org>2008-04-10 05:51:59 +0000
commit19aec6b06c78510df5f5b81ece17881fd793d439 (patch)
tree6e3b8f33cb99d6a7acb6ad066042776276f0ba80
parentef14b9f86db8238113d77f87bda11b5db4037021 (diff)
downloadgcc-19aec6b06c78510df5f5b81ece17881fd793d439.zip
gcc-19aec6b06c78510df5f5b81ece17881fd793d439.tar.gz
gcc-19aec6b06c78510df5f5b81ece17881fd793d439.tar.bz2
re PR tree-optimization/35821 (Internal compiler error: segmentation fault)
PR tree-optimization/35821 * tree-vect-transform.c (vect_create_data_ref_ptr): Add check that NEW_STMT_LIST is not NULL. From-SVN: r134162
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr35821-altivec.c24
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr35821-spu.c22
-rw-r--r--gcc/tree-vect-transform.c8
5 files changed, 64 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ce31ffd..8daa766 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-10 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/35821
+ * tree-vect-transform.c (vect_create_data_ref_ptr): Add check that
+ NEW_STMT_LIST is not NULL.
+
2008-04-09 David Edelsohn <edelsohn@gnu.org>
PR libstdc++/35597
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c82950a..1eab06b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-10 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/35821
+ * gcc.dg/vect/pr35821-altivec.c: New.
+ * gcc.dg/vect/pr35821-spu.c: New.
+
2008-04-09 Andy Hutchinson <hutchinsonandy@aim.com>
PR testsuite/34894
diff --git a/gcc/testsuite/gcc.dg/vect/pr35821-altivec.c b/gcc/testsuite/gcc.dg/vect/pr35821-altivec.c
new file mode 100644
index 0000000..79fa926
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr35821-altivec.c
@@ -0,0 +1,24 @@
+/* { dg-do compile { target { powerpc_altivec_ok } } } */
+
+#include "altivec.h"
+
+void
+foo (float f_gain1, int n_tail, float * __restrict__ f_in_hptr,
+ float * __restrict__ f_out_hptr)
+{
+ int i;
+ vector float *v_f_in_hptr, *v_f_out_hptr;
+
+ f_in_hptr = ( float* )v_f_in_hptr;
+ f_out_hptr = ( float* )v_f_out_hptr;
+
+ for( i = 0 ; i < n_tail ; i++ ) {
+ f_out_hptr[0] = f_in_hptr[0] * f_gain1;
+ f_in_hptr++;
+ f_out_hptr++;
+ }
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr35821-spu.c b/gcc/testsuite/gcc.dg/vect/pr35821-spu.c
new file mode 100644
index 0000000..4cc255f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr35821-spu.c
@@ -0,0 +1,22 @@
+/* { dg-do compile { target { spu-*-* } } } */
+
+void
+foo (float f_gain1, int n_tail, float * __restrict__ f_in_hptr,
+ float * __restrict__ f_out_hptr)
+{
+ int i;
+ __attribute__((__spu_vector__)) float *v_f_in_hptr, *v_f_out_hptr;
+
+ f_in_hptr = ( float* )v_f_in_hptr;
+ f_out_hptr = ( float* )v_f_out_hptr;
+
+ for( i = 0 ; i < n_tail ; i++ ) {
+ f_out_hptr[0] = f_in_hptr[0] * f_gain1;
+ f_in_hptr++;
+ f_out_hptr++;
+ }
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c
index 59fa6d5..6168fda 100644
--- a/gcc/tree-vect-transform.c
+++ b/gcc/tree-vect-transform.c
@@ -1102,8 +1102,12 @@ vect_create_data_ref_ptr (tree stmt, struct loop *at_loop,
new_temp = vect_create_addr_base_for_vector_ref (stmt, &new_stmt_list,
offset, loop);
pe = loop_preheader_edge (loop);
- new_bb = bsi_insert_on_edge_immediate (pe, new_stmt_list);
- gcc_assert (!new_bb);
+ if (new_stmt_list)
+ {
+ new_bb = bsi_insert_on_edge_immediate (pe, new_stmt_list);
+ gcc_assert (!new_bb);
+ }
+
*initial_address = new_temp;
/* Create: p = (vectype *) initial_base */