llvm-project/llvm/lib/Transforms/Scalar
Craig Topper 2835278ee0 [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
2018-07-08 01:45:47 +00:00
..
ADCE.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
AlignmentFromAssumptions.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
BDCE.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
CMakeLists.txt [UnrollAndJam] New Unroll and Jam pass 2018-07-01 12:47:30 +00:00
CallSiteSplitting.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
ConstantHoisting.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
ConstantProp.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
CorrelatedValuePropagation.cpp CorrelatedValuePropagation: Preserve DT. 2018-06-16 18:57:31 +00:00
DCE.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
DeadStoreElimination.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
DivRemPairs.cpp [DivRemPairs] Fix non-determinism in use list order. 2018-04-25 02:17:56 +00:00
EarlyCSE.cpp [EarlyCSE] Fix MSVC build. NFCI. 2018-06-14 14:22:03 +00:00
FlattenCFGPass.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
Float2Int.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
GVN.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
GVNHoist.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
GVNSink.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
GuardWidening.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
IVUsersPrinter.cpp
IndVarSimplify.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
InductiveRangeCheckElimination.cpp [IRCE] Fix miscompile with range checks against negative values 2018-05-19 13:06:37 +00:00
InferAddressSpaces.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
InstSimplifyPass.cpp [instsimplify] Move the instsimplify pass to use more obvious file names 2018-06-29 23:36:03 +00:00
JumpThreading.cpp Revert r332168: "Reapply "[PR16756] Use SSAUpdaterBulk in JumpThreading."" 2018-07-05 22:10:31 +00:00
LICM.cpp Replace "Replacable" with "Replaceable". [NFC] 2018-07-02 18:53:40 +00:00
LLVMBuild.txt Another try to commit 323321 (aggressive instruction combine). 2018-01-25 12:06:32 +00:00
LoopAccessAnalysisPrinter.cpp
LoopDataPrefetch.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LoopDeletion.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LoopDistribute.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LoopIdiomRecognize.cpp [LoopIdiomRecognize] Support for converting loops that use LSHR to CTLZ. 2018-07-08 01:45:47 +00:00
LoopInstSimplify.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
LoopInterchange.cpp [LoopInterchange] Move PHI handling to adjustLoopBranches. 2018-06-19 08:03:24 +00:00
LoopLoadElimination.cpp Use SmallPtrSet explicitly for SmallSets with pointer types (NFC). 2018-06-12 11:16:56 +00:00
LoopPassManager.cpp
LoopPredication.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LoopRerollPass.cpp [LoopReroll] Rewrite induction variable rewriting. 2018-06-22 22:58:55 +00:00
LoopRotation.cpp Refine the loop rotation's API 2018-04-19 20:29:43 +00:00
LoopSimplifyCFG.cpp Generalize MergeBlockIntoPredecessor. Replace uses of MergeBasicBlockIntoOnlyPred. 2018-06-20 22:01:04 +00:00
LoopSink.cpp [LoopSink] Make the enforcement of determinism deterministic. 2018-07-06 14:20:58 +00:00
LoopStrengthReduce.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
LoopUnrollAndJamPass.cpp [UnrollAndJam] New Unroll and Jam pass 2018-07-01 12:47:30 +00:00
LoopUnrollPass.cpp [UnrollAndJam] New Unroll and Jam pass 2018-07-01 12:47:30 +00:00
LoopUnswitch.cpp [LoopUnswitch]Fix comparison for DomTree updates. 2018-06-22 17:14:35 +00:00
LoopVersioningLICM.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LowerAtomic.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00
LowerExpectIntrinsic.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
LowerGuardIntrinsic.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
MemCpyOptimizer.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
MergeICmps.cpp [MergeICmps] Don't crash when memcmp is not available 2018-05-19 12:51:59 +00:00
MergedLoadStoreMotion.cpp [STLExtras] Add size() for ranges, and remove distance() 2018-05-16 23:20:42 +00:00
NaryReassociate.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
NewGVN.cpp Revert "Extend CFGPrinter and CallPrinter with Heat Colors" 2018-06-29 17:48:58 +00:00
PartiallyInlineLibCalls.cpp [PartiallyInlineLibCalls][x86] add TTI hook to allow sqrt inlining to depend on arg rather than result 2017-11-27 21:15:43 +00:00
PlaceSafepoints.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
Reassociate.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
Reg2Mem.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
RewriteStatepointsForGC.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
SCCP.cpp Recommit r328307: [IPSCCP] Use constant range information for comparisons of parameters. 2018-07-02 12:44:04 +00:00
SROA.cpp [SROA] Preserve DebugLoc when rewriting alloca partitions 2018-06-28 18:58:30 +00:00
Scalar.cpp [UnrollAndJam] New Unroll and Jam pass 2018-07-01 12:47:30 +00:00
Scalarizer.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-20 21:47:29 +00:00
SeparateConstOffsetFromGEP.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
SimpleLoopUnswitch.cpp [PM/LoopUnswitch] Fix PR37889, producing the correct loop nest structure 2018-07-07 01:12:56 +00:00
SimplifyCFGPass.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
Sink.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
SpeculateAroundPHIs.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
SpeculativeExecution.cpp Use SmallPtrSet explicitly for SmallSets with pointer types (NFC). 2018-06-12 11:16:56 +00:00
StraightLineStrengthReduce.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
StructurizeCFG.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
TailRecursionElimination.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00