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

Reply via email to