aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2011-10-07 08:43:17 +0200
committerUros Bizjak <uros@gcc.gnu.org>2011-10-07 08:43:17 +0200
commit10c1a3e722533d837ace718ccef0fd74fae1233f (patch)
tree9829127fd3e18bd3d1dfe0f55201d02fdf33be0b /gcc
parente7912e12dd28e84c96760107d3d552800beaaa30 (diff)
downloadgcc-10c1a3e722533d837ace718ccef0fd74fae1233f.zip
gcc-10c1a3e722533d837ace718ccef0fd74fae1233f.tar.gz
gcc-10c1a3e722533d837ace718ccef0fd74fae1233f.tar.bz2
re PR target/50603 ([x32] Unnecessary lea)
PR target/50603 * config/i386/i386.c (ix86_fixup_binary_operands): Force src2 of integer PLUS RTX to a register to improve address combine. testsuite/ChangeLog: PR target/50603 * gcc.target/i386/pr50603.c: New test. From-SVN: r179646
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/config/i386/i386.c6
-rw-r--r--gcc/testsuite/ChangeLog23
-rw-r--r--gcc/testsuite/gcc.target/i386/pr50603.c11
4 files changed, 39 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2af56eb..21e7ee3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2011-10-07 Uros Bizjak <ubizjak@gmail.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/50603
+ * config/i386/i386.c (ix86_fixup_binary_operands): Force src2 of
+ integer PLUS RTX to a register to improve address combine.
+
2011-10-06 Richard Henderson <rth@redhat.com>
* combine-stack-adjust.c (maybe_move_args_size_note): Add after
@@ -31,9 +38,8 @@
2011-10-06 Bernd Schmidt <bernds@codesourcery.com>
- * function.c (thread_prologue_and_epilogue_insns): Emit split
- prologue on the orig_entry_edge. Don't account for it in
- prologue_clobbered.
+ * function.c (thread_prologue_and_epilogue_insns): Emit split prologue
+ on the orig_entry_edge. Don't account for it in prologue_clobbered.
2011-10-06 Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 2fdf540..85dccf9 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -15798,6 +15798,12 @@ ix86_fixup_binary_operands (enum rtx_code code, enum machine_mode mode,
if (MEM_P (src1) && !rtx_equal_p (dst, src1))
src1 = force_reg (mode, src1);
+ /* Improve address combine. */
+ if (code == PLUS
+ && GET_MODE_CLASS (mode) == MODE_INT
+ && MEM_P (src2))
+ src2 = force_reg (mode, src2);
+
operands[1] = src1;
operands[2] = src2;
return dst;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 97dac17..23065b8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2011-10-07 Uros Bizjak <ubizjak@gmail.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/50603
+ * gcc.target/i386/pr50603.c: New test.
+
2011-10-06 Jason Merrill <jason@redhat.com>
PR c++/39164
@@ -144,8 +150,7 @@
2011-10-04 Artem Shinkarov <artyom.shinkaroff@gmail.com>
- * gcc.c-torture/execute/vector-compare-1.c: Fix trailing white
- spaces.
+ * gcc.c-torture/execute/vector-compare-1.c: Fix trailing white spaces.
(main): Use __typeof to get result type of comparison.
2011-10-04 Ira Rosen <ira.rosen@linaro.org>
@@ -298,8 +303,8 @@
PR testsuite/50485
* gcc.target/i386/sse4_1-blendps.c: Include <stdlib.h>.
(TEST): Initialize src3 with random floats.
- * gcc.target/i386/sse4_1-blendps-2.c (sse4_1_test): Remove field i from
- union src3. Initialize src3 with random floats.
+ * gcc.target/i386/sse4_1-blendps-2.c (sse4_1_test): Remove field i
+ from union src3. Initialize src3 with random floats.
2011-09-27 Oleg Endo <oleg.endo@t-online.de>
@@ -659,8 +664,7 @@
2011-09-20 H.J. Lu <hongjiu.lu@intel.com>
PR testsuite/50469
- * gfortran.dg/storage_size_2.f08: Replace "must be be" with
- "must be".
+ * gfortran.dg/storage_size_2.f08: Replace "must be be" with "must be".
2011-09-20 Jason Merrill <jason@redhat.com>
@@ -1046,8 +1050,7 @@
gcc.dg/vect/vect-54.c, gcc.dg/vect/vect-46.c, gcc.dg/vect/vect-48.c,
gcc.dg/vect/vect-96.c, gcc.dg/vect/vect-multitypes-3.c,
gcc.dg/vect/vect-40.c: Likewise.
- * gcc.dg/vect/vect-outer-5.c: Remove quad-vectors option as
- redundant.
+ * gcc.dg/vect/vect-outer-5.c: Remove quad-vectors option as redundant.
* gcc.dg/vect/vect-109.c, gcc.dg/vect/vect-peel-1.c,
gcc.dg/vect/vect-peel-2.c, gcc.dg/vect/slp-25.c,
gcc.dg/vect/vect-multitypes-1.c, gcc.dg/vect/slp-3.c,
@@ -1104,8 +1107,8 @@
2011-09-05 Georg-Johann Lay <avr@gjlay.de>
- * gcc.dg/ipa/ipcp-3.c (mark_cell): Use mask 1 << 14 instead of 1
- << 18 to avoid warning on int=16 platforms..
+ * gcc.dg/ipa/ipcp-3.c (mark_cell): Use mask 1 << 14 instead of 1 << 18
+ to avoid warning on int=16 platforms..
2011-09-05 Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/testsuite/gcc.target/i386/pr50603.c b/gcc/testsuite/gcc.target/i386/pr50603.c
new file mode 100644
index 0000000..101ef85
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr50603.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern int *foo;
+
+int
+bar (int x)
+{
+ return foo[x];
+}
+/* { dg-final { scan-assembler-not "lea\[lq\]" } } */