https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56564

--- Comment #21 from H.J. Lu <hjl.tools at gmail dot com> ---
This bug isn't fixed in GCC 4.9.  -O3 increases alignment from
64 bits to 128 bits on the original testcase:

Hardware watchpoint 6: *(unsigned int *) 0x7fffee9b4468

Old value = 64
New value = 128
ensure_base_align (stmt_info=0x1c8f990, dr=0x1db5b20)
    at /export/gnu/import/git/gcc-release/gcc/tree-vect-stmts.c:4907
4907          DECL_USER_ALIGN (base_decl) = 1;
(gdb) bt
#0  ensure_base_align (stmt_info=0x1c8f990, dr=0x1db5b20)
    at /export/gnu/import/git/gcc-release/gcc/tree-vect-stmts.c:4907
#1  0x0000000000d33471 in vectorizable_store (stmt=0x7fffed95a280, 
    gsi=0x7fffffffd830, vec_stmt=0x7fffffffd790, slp_node=0x1d9e7a0)
    at /export/gnu/import/git/gcc-release/gcc/tree-vect-stmts.c:5131
#2  0x0000000000d38f80 in vect_transform_stmt (stmt=0x7fffed95a280, 
    gsi=0x7fffffffd830, grouped_store=0x7fffffffd84a, slp_node=0x1d9e7a0, 
    slp_node_instance=0x1cb3e10)
    at /export/gnu/import/git/gcc-release/gcc/tree-vect-stmts.c:7211
#3  0x0000000000d5a980 in vect_schedule_slp_instance (node=0x1d9e7a0, 
    instance=0x1cb3e10, vectorization_factor=1)
    at /export/gnu/import/git/gcc-release/gcc/tree-vect-slp.c:3084
#4  0x0000000000d5abd0 in vect_schedule_slp (loop_vinfo=0x0, 
    bb_vinfo=0x1ddf410)
    at /export/gnu/import/git/gcc-release/gcc/tree-vect-slp.c:3154
#5  0x0000000000d5aea7 in vect_slp_transform_bb (bb=0x7fffece8ec30)
    at /export/gnu/import/git/gcc-release/gcc/tree-vect-slp.c:3230
#6  0x0000000000d5e41b in execute_vect_slp ()
    at /export/gnu/import/git/gcc-release/gcc/tree-vectorizer.c:605
#7  0x0000000000d5e4c9 in (anonymous namespace)::pass_slp_vectorize::execute (
    this=0x1b97010)
    at /export/gnu/import/git/gcc-release/gcc/tree-vectorizer.c:649
#8  0x0000000000a7da14 in execute_one_pass (pass=0x1b97010)
---Type <return> to continue, or q <return> to quit---q
 at /export/gnu/imporQuit
(gdb) f 1
#1  0x0000000000d33471 in vectorizable_store (stmt=0x7fffed95a280, 
    gsi=0x7fffffffd830, vec_stmt=0x7fffffffd790, slp_node=0x1d9e7a0)
    at /export/gnu/import/git/gcc-release/gcc/tree-vect-stmts.c:5131
5131      ensure_base_align (stmt_info, dr);
(gdb) f 2
#2  0x0000000000d38f80 in vect_transform_stmt (stmt=0x7fffed95a280, 
    gsi=0x7fffffffd830, grouped_store=0x7fffffffd84a, slp_node=0x1d9e7a0, 
    slp_node_instance=0x1cb3e10)
    at /export/gnu/import/git/gcc-release/gcc/tree-vect-stmts.c:7211
7211          done = vectorizable_store (stmt, gsi, &vec_stmt, slp_node);
(gdb) 

This bug may be really fixed by r221268:

iff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index aa9d43f..41ff802 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -4956,8 +4956,13 @@ ensure_base_align (stmt_vec_info stmt_info, struct
data_reference *dr)
       tree vectype = STMT_VINFO_VECTYPE (stmt_info);
       tree base_decl = ((dataref_aux *)dr->aux)->base_decl;

-      DECL_ALIGN (base_decl) = TYPE_ALIGN (vectype);
-      DECL_USER_ALIGN (base_decl) = 1;
+      if (decl_in_symtab_p (base_decl))
+  symtab_node::get (base_decl)->increase_alignment (TYPE_ALIGN (vectype));
+      else
+  {
+          DECL_ALIGN (base_decl) = TYPE_ALIGN (vectype);
+          DECL_USER_ALIGN (base_decl) = 1;
+  }
       ((dataref_aux *)dr->aux)->base_misaligned = false;
     }
 }

in GCC 5.

Reply via email to