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);