On Tue, May 31, 2011 at 2:31 PM, Ira Rosen <ira.ro...@linaro.org> wrote: > Hi, > > This patch fails vectorization for volatile data references. > > Bootstrapped on powerpc64-suse-linux and tested on > powerpc64-suse-linux and x86_64-suse-linux. > Applied to trunk. > OK for 4.6 after testing?
Ok. Thanks, Richard. > Thanks, > Ira > > ChangeLog: > > PR tree-optimization/49093 > * tree-vect-data-refs.c (vect_analyze_data_refs): Fail for volatile > data references. > > testsuite/ChangeLog: > > PR tree-optimization/49093 > * gcc.dg/vect/pr49093.c: New test. > > Index: testsuite/gcc.dg/vect/pr49093.c > =================================================================== > --- testsuite/gcc.dg/vect/pr49093.c (revision 0) > +++ testsuite/gcc.dg/vect/pr49093.c (revision 0) > @@ -0,0 +1,22 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O1 -ftree-vectorize -fdump-tree-vect-details > -fno-tree-fre" } */ > + > +volatile unsigned char g_324[4] = {0, 1, 0, 1}; > +void foo (int); > +int x, y; > +void func_81(void) > +{ > + int l_466, l_439[7] = {0}, g_97; > +lbl_473: > + if (x) { > + for (g_97 = 0; (g_97 < 4); ++g_97) { > + if (y) > + goto lbl_473; > + g_324[g_97]; > + l_466 = l_439[g_97]; > + } > + foo(l_466); > + } > +} > + > +/* { dg-final { cleanup-tree-dump "vect" } } */ > Index: tree-vect-data-refs.c > =================================================================== > --- tree-vect-data-refs.c (revision 174471) > +++ tree-vect-data-refs.c (working copy) > @@ -2584,6 +2584,16 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo, > return false; > } > > + if (TREE_THIS_VOLATILE (DR_REF (dr))) > + { > + if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS)) > + { > + fprintf (vect_dump, "not vectorized: volatile type "); > + print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM); > + } > + return false; > + } > + > base = unshare_expr (DR_BASE_ADDRESS (dr)); > offset = unshare_expr (DR_OFFSET (dr)); > init = unshare_expr (DR_INIT (dr)); >