diff options
author | Michael Matz <matz@suse.de> | 2012-05-09 16:08:26 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2012-05-09 16:08:26 +0000 |
commit | 0c91037894987356abfee77dfe49cd075b7126c2 (patch) | |
tree | c309a04da0f209d341aaa7749a148bd7728505fc /gcc | |
parent | b0cd199e8de7227c2fcac3cfb7f767d61678914b (diff) | |
download | gcc-0c91037894987356abfee77dfe49cd075b7126c2.zip gcc-0c91037894987356abfee77dfe49cd075b7126c2.tar.gz gcc-0c91037894987356abfee77dfe49cd075b7126c2.tar.bz2 |
re PR tree-optimization/53185 (segmentation fault in vectorizable_load)
PR tree-optimization/53185
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Disable
peeling when we see strided loads.
testsuite/
* gcc.dg/vect/pr53185.c: New test.
From-SVN: r187340
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr53185.c | 16 | ||||
-rw-r--r-- | gcc/tree-vect-data-refs.c | 11 |
4 files changed, 38 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 237ae1c..7af99fc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-09 Michael Matz <matz@suse.de> + + PR tree-optimization/53185 + * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Disable + peeling when we see strided loads. + 2012-05-09 Matthias Klose <doko@ubuntu.com> * gcc-ar.c (main): Don't check for execute bits for the plugin. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 06c1f9d..3f1b787 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-05-09 Michael Matz <matz@suse.de> + + PR tree-optimization/53185 + * gcc.dg/vect/pr53185.c: New test. + 2012-05-09 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/53249 diff --git a/gcc/testsuite/gcc.dg/vect/pr53185.c b/gcc/testsuite/gcc.dg/vect/pr53185.c new file mode 100644 index 0000000..af1efba --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr53185.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -ftree-vectorize" } */ +unsigned short a, e; +int *b, *d; +int c; +extern int fn2(); +void fn1 () { + void *f; + for (;;) { + fn2 (); + b = f; + e = 0; + for (; e < a; ++e) + b[e] = d[e * c]; + } +} diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 7464034..715e3ff 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -1507,6 +1507,17 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) && GROUP_FIRST_ELEMENT (stmt_info) != stmt) continue; + /* FORNOW: Any strided load prevents peeling. The induction + variable analysis will fail when the prologue loop is generated, + and so we can't generate the new base for the pointer. */ + if (STMT_VINFO_STRIDE_LOAD_P (stmt_info)) + { + if (vect_print_dump_info (REPORT_DETAILS)) + fprintf (vect_dump, "strided load prevents peeling"); + do_peeling = false; + break; + } + /* For invariant accesses there is nothing to enhance. */ if (integer_zerop (DR_STEP (dr))) continue; |