[LoopIdiomRecognize] Support for converting loops that use LSHR to CTLZ.
authorCraig Topper <craig.topper@intel.com>
Sun, 8 Jul 2018 01:45:47 +0000 (01:45 +0000)
committerCraig Topper <craig.topper@intel.com>
Sun, 8 Jul 2018 01:45:47 +0000 (01:45 +0000)
commit2835278ee08fcfb9e3dad56c7c24496f9aaaeeaf
tree9d733a10ebf099b0816784074ceb5947c7475e3a
parentf1a981c7052cc16523b31e2afd72390d9e00276e
[LoopIdiomRecognize] Support for converting loops that use LSHR to CTLZ.

In the 'detectCTLZIdiom' function support for loops that use LSHR instruction instead of ASHR has been added.

This supports creating ctlz from the following code.

int lzcnt(int x) {
     int count = 0;
     while (x > 0)  {
          count++;
          x = x >> 1;
     }
    return count;
}

Patch by Olga Moldovanova

Differential Revision: https://reviews.llvm.org/D48354

llvm-svn: 336509
llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
llvm/test/Transforms/LoopIdiom/X86/ctlz.ll