This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/51254] Missed Optimization: IVOPTS don't handle unaligned memory access.
- From: "duyuehai at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 13 Dec 2011 04:15:12 +0000
- Subject: [Bug tree-optimization/51254] Missed Optimization: IVOPTS don't handle unaligned memory access.
- Auto-submitted: auto-generated
- References: <bug-51254-4@http.gcc.gnu.org/bugzilla/>
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);