diff options
author | Ira Rosen <irar@il.ibm.com> | 2008-04-10 05:51:59 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2008-04-10 05:51:59 +0000 |
commit | 19aec6b06c78510df5f5b81ece17881fd793d439 (patch) | |
tree | 6e3b8f33cb99d6a7acb6ad066042776276f0ba80 /gcc | |
parent | ef14b9f86db8238113d77f87bda11b5db4037021 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr35821-altivec.c | 24 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr35821-spu.c | 22 | ||||
-rw-r--r-- | gcc/tree-vect-transform.c | 8 |
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 */ |