http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51254
--- Comment #4 from rguenther at suse dot de <rguenther at suse dot de> 2011-12-13 10:27:48 UTC --- On Tue, 13 Dec 2011, duyuehai at gmail dot com wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51254 > > Yuehai Du <duyuehai at gmail dot com> changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > CC| |duyuehai at gmail dot com, > | |rguenth at gcc dot gnu.org > > --- Comment #2 from Yuehai Du <duyuehai at gmail dot com> 2011-12-13 04:15:12 > UTC --- > Hi Richard > would it be ok if i submit a patch like this to fix this bug: > > Index: gcc/tree-ssa-loop-ivopts.c > =================================================================== > --- gcc/tree-ssa-loop-ivopts.c (版本 182270) > +++ gcc/tree-ssa-loop-ivopts.c (工作副本) > @@ -102,6 +102,7 @@ along with GCC; see the file COPYING3. If not see > cost of different addressing modes. This should be moved to a TBD > interface between the GIMPLE and RTL worlds. */ > #include "expr.h" > +#include "optabs.h" > > /* The infinite cost. */ > #define INFTY 10000000 > @@ -1771,6 +1772,7 @@ find_interesting_uses_address (struct ivopts_data > } > else > { > + enum machine_mode mem_mode; > ifs_ivopts_data.ivopts_data = data; > ifs_ivopts_data.stmt = stmt; > ifs_ivopts_data.step = size_zero_node; > @@ -1786,7 +1788,9 @@ find_interesting_uses_address (struct ivopts_data > > /* Moreover, on strict alignment platforms, check that it is > sufficiently aligned. */ > - if (STRICT_ALIGNMENT && may_be_unaligned_p (base, step)) > + mem_mode = TYPE_MODE (TREE_TYPE (*op_p)); > + if (STRICT_ALIGNMENT && may_be_unaligned_p (base, step) > + && optab_handler (movmisalign_optab, mem_mode) == CODE_FOR_nothing) > goto fail; > > base = build_fold_addr_expr (base); This won't fix it - the movmisalign optab will not be used at expansion time as IVOPTs does not properly transfer the misalignment to the access type. Richard.