diff options
author | Craig Topper <craig.topper@intel.com> | 2018-07-11 22:35:28 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2018-07-11 22:35:28 +0000 |
commit | ed6acde8cf2f764fce5df495d5f2a24bc08a3e80 (patch) | |
tree | 6ecfd4f8a97bb039321735a45765faff916a0afd /lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp | |
parent | e18c2d2ce3b967b0bd495d2840cb640b95c80896 (diff) | |
download | bcm5719-llvm-ed6acde8cf2f764fce5df495d5f2a24bc08a3e80.tar.gz bcm5719-llvm-ed6acde8cf2f764fce5df495d5f2a24bc08a3e80.zip |
[LoopIdiomRecognize] Don't convert a do while loop to ctlz.
This commit suppresses turning loops like this into "(bitwidth - ctlz(input))".
unsigned foo(unsigned input) {
unsigned num = 0;
do {
++num;
input >>= 1;
} while (input != 0);
return num;
}
The loop version returns a value of 1 for both an input of 0 and an input of 1. Converting to a naive ctlz does not preserve that.
Theoretically we could do better if we checked isKnownNonZero or we could insert a select to handle the divergence. But until we have motivating cases for that, this is the easiest solution.
llvm-svn: 336864
Diffstat (limited to 'lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp')
0 files changed, 0 insertions, 0 deletions