diff options
author | Davide Italiano <davide@freebsd.org> | 2015-08-13 20:34:26 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2015-08-13 20:34:26 +0000 |
commit | a195386ca1412a422b1f0ce6c5f7dc9be59dda1d (patch) | |
tree | ec9c9b693f980781429b37466799707594f276b4 /llvm/docs/WritingAnLLVMBackend.rst | |
parent | ff1ca4af4b7437b96eda9bf263b0d817fa64d189 (diff) | |
download | bcm5719-llvm-a195386ca1412a422b1f0ce6c5f7dc9be59dda1d.tar.gz bcm5719-llvm-a195386ca1412a422b1f0ce6c5f7dc9be59dda1d.zip |
[SimplifyLibCalls] Correctly set the is_zero_undef flag for llvm.cttz
If <src> is non-zero we can safely set the flag to true, and this
results in less code generated for, e.g. ffs(x) + 1 on FreeBSD.
Thanks to majnemer for suggesting the fix and reviewing.
Code generated before the patch was applied:
0: 0f bc c7 bsf %edi,%eax
3: b9 20 00 00 00 mov $0x20,%ecx
8: 0f 45 c8 cmovne %eax,%ecx
b: 83 c1 02 add $0x2,%ecx
e: b8 01 00 00 00 mov $0x1,%eax
13: 85 ff test %edi,%edi
15: 0f 45 c1 cmovne %ecx,%eax
18: c3 retq
Code generated after the patch was applied:
0: 0f bc cf bsf %edi,%ecx
3: 83 c1 02 add $0x2,%ecx
6: 85 ff test %edi,%edi
8: b8 01 00 00 00 mov $0x1,%eax
d: 0f 45 c1 cmovne %ecx,%eax
10: c3 retq
It seems we can still use cmove and save another 'test' instruction, but
that can be tackled separately.
Differential Revision: http://reviews.llvm.org/D11989
llvm-svn: 244947
Diffstat (limited to 'llvm/docs/WritingAnLLVMBackend.rst')
0 files changed, 0 insertions, 0 deletions