aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2010-09-14 18:12:04 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2010-09-14 11:12:04 -0700
commit2c03791b9cc3866873a7f8a2b408865beee6dbd4 (patch)
treedaf8aa6a8275b6fc85fdc5760232f25527e2cf5f /gcc
parent26983c22532f0119ef77c5ad53e622a38a8de81f (diff)
downloadgcc-2c03791b9cc3866873a7f8a2b408865beee6dbd4.zip
gcc-2c03791b9cc3866873a7f8a2b408865beee6dbd4.tar.gz
gcc-2c03791b9cc3866873a7f8a2b408865beee6dbd4.tar.bz2
Use ADD if result isn't used in memory address.
2010-09-14 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.c (ix86_lea_for_add_ok): Return false if result isn't used in memory address. From-SVN: r164287
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c10
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index aeab688..979489b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2010-09-14 H.J. Lu <hongjiu.lu@intel.com>
+ * config/i386/i386.c (ix86_lea_for_add_ok): Return false if
+ result isn't used in memory address.
+
+2010-09-14 H.J. Lu <hongjiu.lu@intel.com>
+
* defaults.h (UNITS_PER_SIMD_WORD): Removed.
* config/arm/arm.h (UNITS_PER_SIMD_WORD): Likewise.
* config/i386/i386.h (UNITS_PER_SIMD_WORD): Likewise.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 1d4e4ae..19d6387 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -14871,15 +14871,19 @@ ix86_lea_for_add_ok (rtx insn, rtx operands[])
else
{
int dist_define, dist_use;
+
+ /* Return false if REGNO0 isn't used in memory address. */
+ dist_use = distance_agu_use (regno0, insn);
+ if (dist_use <= 0)
+ return false;
+
dist_define = distance_non_agu_define (regno1, regno2, insn);
if (dist_define <= 0)
return true;
/* If this insn has both backward non-agu dependence and forward
agu dependence, the one with short distance take effect. */
- dist_use = distance_agu_use (regno0, insn);
- if (dist_use <= 0
- || (dist_define + IX86_LEA_PRIORITY) < dist_use)
+ if ((dist_define + IX86_LEA_PRIORITY) < dist_use)
return false;
return true;