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.