]> granicus.if.org Git - llvm/commit
The patch adds CTLZ idiom recognition.
authorEvgeny Stupachenko <evstupac@gmail.com>
Mon, 15 May 2017 19:08:56 +0000 (19:08 +0000)
committerEvgeny Stupachenko <evstupac@gmail.com>
Mon, 15 May 2017 19:08:56 +0000 (19:08 +0000)
commit8b48b0420b9443d56a589ac8d4e90545771cffec
tree2ebee5af3dc890ee3a5252d25af0a7f9b77d05f3
parent297d728cd59a0590c3ad0d874ca72a6f8939b592
The patch adds CTLZ idiom recognition.

Summary:

The following loops should be recognized:
i = 0;
while (n) {
  n = n >> 1;
  i++;
  body();
}
use(i);

And replaced with builtin_ctlz(n) if body() is empty or
for CPUs that have CTLZ instruction converted to countable:

for (j = 0; j < builtin_ctlz(n); j++) {
  n = n >> 1;
  i++;
  body();
}
use(builtin_ctlz(n));

Reviewers: rengolin, joerg

Differential Revision: http://reviews.llvm.org/D32605

From: Evgeny Stupachenko <evstupac@gmail.com>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303102 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/LoopIdiomRecognize.cpp
test/Transforms/LoopIdiom/ARM/ctlz.ll [new file with mode: 0644]
test/Transforms/LoopIdiom/X86/ctlz.ll [new file with mode: 0644]