diff options
author | Sanjay Patel <spatel@rotateright.com> | 2017-06-22 23:47:15 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2017-06-22 23:47:15 +0000 |
commit | 359ae44fb45205cea2a9a8f12bae9d3748f4e2ad (patch) | |
tree | a63014479ceec85805a42805be2191103aa87f7a /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 8456411e3bd4d50c807cc6b785cb49d344081dd3 (diff) | |
download | llvm-359ae44fb45205cea2a9a8f12bae9d3748f4e2ad.zip llvm-359ae44fb45205cea2a9a8f12bae9d3748f4e2ad.tar.gz llvm-359ae44fb45205cea2a9a8f12bae9d3748f4e2ad.tar.bz2 |
[x86] add/sub (X==0) --> sbb(cmp X, 1)
This is very similar to the transform in:
https://reviews.llvm.org/rL306040
...but in this case, we use cmp X, 1 to set the carry bit as needed.
Again, we can show that all of these are logically equivalent (although
InstCombine currently canonicalizes to a form not seen here), and if
we believe IACA, then this is the smallest/fastest code. Eg, with SNB:
| Num Of | Ports pressure in cycles | |
| Uops | 0 - DV | 1 | 2 - D | 3 - D | 4 | 5 | |
---------------------------------------------------------------------
| 1 | 1.0 | | | | | | | cmp edi, 0x1
| 2 | | 1.0 | | | | 1.0 | CP | sbb eax, eax
The larger motivation is to clean up all select-of-constants combining/lowering
because we're missing some common cases.
llvm-svn: 306072
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions