diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2010-09-14 18:12:04 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2010-09-14 11:12:04 -0700 |
commit | 2c03791b9cc3866873a7f8a2b408865beee6dbd4 (patch) | |
tree | daf8aa6a8275b6fc85fdc5760232f25527e2cf5f /gcc | |
parent | 26983c22532f0119ef77c5ad53e622a38a8de81f (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 10 |
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; |