diff options
author | Chris Lattner <sabre@nondot.org> | 2006-04-28 01:46:50 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-04-28 01:46:50 +0000 |
commit | addc55af6c7f8b71eedd68d48f6a93ceecff2840 (patch) | |
tree | ae3eb4453c7bf91a58959f6f0ea1256f0f8ae42d /utils/TableGen | |
parent | f18764f25ff8075b49143b6e2d8f1b7052d5a494 (diff) | |
download | llvm-addc55af6c7f8b71eedd68d48f6a93ceecff2840.tar.gz llvm-addc55af6c7f8b71eedd68d48f6a93ceecff2840.tar.bz2 llvm-addc55af6c7f8b71eedd68d48f6a93ceecff2840.tar.xz |
When we have a two-address instruction where the input cannot be clobbered
and is already available, instead of falling back to emitting a load, fall
back to emitting a reg-reg copy. This generates significantly better code
for some SSE testcases, as SSE has lots of two-address instructions and
none of them are read/modify/write. As one example, this change does:
pshufd %XMM5, XMMWORD PTR [%ESP + 84], 255
xorps %XMM2, %XMM5
cmpltps %XMM1, %XMM0
- movaps XMMWORD PTR [%ESP + 52], %XMM0
- movapd %XMM6, XMMWORD PTR [%ESP + 52]
+ movaps %XMM6, %XMM0
cmpltps %XMM6, XMMWORD PTR [%ESP + 68]
movapd XMMWORD PTR [%ESP + 52], %XMM6
movaps %XMM6, %XMM0
cmpltps %XMM6, XMMWORD PTR [%ESP + 36]
cmpltps %XMM3, %XMM0
- movaps XMMWORD PTR [%ESP + 20], %XMM0
- movapd %XMM7, XMMWORD PTR [%ESP + 20]
+ movaps %XMM7, %XMM0
cmpltps %XMM7, XMMWORD PTR [%ESP + 4]
movapd XMMWORD PTR [%ESP + 20], %XMM7
cmpltps %XMM4, %XMM0
... which is far better than a store followed by a load!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28001 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen')
0 files changed, 0 insertions, 0 deletions