Use add for a = a + b and a = b + a when possible.
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 17 Dec 2019 01:29:09 +0000 (17:29 -0800)
committerHongtao Liu <liuhongt@gcc.gnu.org>
Tue, 17 Dec 2019 01:29:09 +0000 (01:29 +0000)
commit62dd2904f05ee752bbeff43a196b90ecd7b94616
tree6a5a2ca8520fd7b5c84211a45d663e981d1173fc
parentd187dab3873eb9737eb80ba02bb1ae11eae4e133
Use add for a = a + b and a = b + a when possible.

Since except for Bonnell,

01 fb                   add    %edi,%ebx

is faster and shorter than

8d 1c 1f                lea    (%rdi,%rbx,1),%ebx

we should use add for a = a + b and a = b + a when possible if not
optimizing for Bonnell.

Tested on x86-64.

2019-12-17  H.J. Lu  <hjl.tools@gmail.com>

gcc/

PR target/92807
* config/i386/i386.c (ix86_lea_outperforms): Check !TARGET_BONNELL.
(ix86_avoid_lea_for_addr): When not optimizing for Bonnell, use add
for a = a + b and a = b + a.

gcc/testsuite/

PR target/92807
* gcc.target/i386/pr92807-1.c: New test.

From-SVN: r279451
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr92807-1.c [new file with mode: 0644]