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.