aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/expr.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr45670.c23
4 files changed, 35 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8efea32..80f2ee3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-11-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/45670
+ * expr.c (expand_expr_real_1) <case MEM_REF>: Use EXPAND_SUM
+ instead of EXPAND_NORMAL for base expansion.
+
2010-11-05 Uros Bizjak <ubizjak@gmail.com>
* config.gcc: Support --with-fpmath=avx for x86.
diff --git a/gcc/expr.c b/gcc/expr.c
index caac0662..cb73f01 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -8754,7 +8754,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
}
align = MAX (TYPE_ALIGN (TREE_TYPE (exp)),
get_object_alignment (exp, BIGGEST_ALIGNMENT));
- op0 = expand_expr (base, NULL_RTX, VOIDmode, EXPAND_NORMAL);
+ op0 = expand_expr (base, NULL_RTX, VOIDmode, EXPAND_SUM);
op0 = convert_memory_address_addr_space (address_mode, op0, as);
if (!integer_zerop (TREE_OPERAND (exp, 1)))
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4c6ac67..debdd54 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-11-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/45670
+ * gcc.target/i386/pr45670.c: New test.
+
2010-11-05 Janus Weil <janus@gcc.gnu.org>
PR fortran/45451
diff --git a/gcc/testsuite/gcc.target/i386/pr45670.c b/gcc/testsuite/gcc.target/i386/pr45670.c
new file mode 100644
index 0000000..c50c4ba
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr45670.c
@@ -0,0 +1,23 @@
+/* PR target/45670 */
+/* { dg-do compile } */
+/* { dg-options "-Os -mtune=generic" } */
+
+struct S
+{
+ float *buf;
+ int size;
+};
+
+void
+foo (struct S *s)
+{
+ int i;
+ for (i = 0; i < s->size; ++i)
+ s->buf[i] = 0;
+}
+
+/* Ensure we don't generate
+ lea (reg1,4),reg2; add (reg3),reg2; movl $0, (reg2)
+ instead of smaller
+ mov (reg3),reg2; movl $0, (reg2,reg1,4) */
+/* { dg-final { scan-assembler-not "lea\[lq\]" } } */