]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/45670 (Less efficient x86 addressing mode selection on 4.6, causes ...
authorJakub Jelinek <jakub@redhat.com>
Fri, 5 Nov 2010 19:00:27 +0000 (20:00 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 5 Nov 2010 19:00:27 +0000 (20:00 +0100)
PR target/45670
* expr.c (expand_expr_real_1) <case MEM_REF>: Use EXPAND_SUM
instead of EXPAND_NORMAL for base expansion.

* gcc.target/i386/pr45670.c: New test.

From-SVN: r166371

gcc/ChangeLog
gcc/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr45670.c [new file with mode: 0644]

index 8efea324e9584802f2f708eb0fad6bd10f0adde4..80f2ee31a6c8ab9596ea89d3eaf70ee146def9f6 100644 (file)
@@ -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.
index caac06628871e96979553bff041e88fdf29f0b15..cb73f01f28cb8db34c1442f2fceff0d32e432d4a 100644 (file)
@@ -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)))
          {
index 4c6ac67e5c2ec6e1449d170257238e2f88e2aacb..debdd5467a3ae765f384b9db9c2e98109002ef22 100644 (file)
@@ -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 (file)
index 0000000..c50c4ba
--- /dev/null
@@ -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\]" } } */