LLVM: lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp File Reference (original) (raw)
Go to the source code of this file.
| Namespaces | |
|---|---|
| namespace | llvm |
| This is an optimization pass for GlobalISel generic memory operations. |
| Macros | |
|---|---|
| #define | DEBUG_TYPE "loop-unroll-and-jam" |
| Variables | |
|---|---|
| static cl::opt< bool > | AllowUnrollAndJam ("allow-unroll-and-jam", cl::Hidden, cl::desc("Allows loops to be unroll-and-jammed.")) |
| static cl::opt< unsigned > | UnrollAndJamCount ("unroll-and-jam-count", cl::Hidden, cl::desc("Use this unroll count for all loops including those with " "unroll_and_jam_count pragma values, for testing purposes")) |
| static cl::opt< unsigned > | UnrollAndJamThreshold ("unroll-and-jam-threshold", cl::init(60), cl::Hidden, cl::desc("Threshold to use for inner loop when doing unroll and jam.")) |
| static cl::opt< unsigned > | PragmaUnrollAndJamThreshold ("pragma-unroll-and-jam-threshold", cl::init(1024), cl::Hidden, cl::desc("Unrolled size limit for loops with an unroll_and_jam(full) or " "unroll_count pragma.")) |
| static const char *const | LLVMLoopUnrollAndJamFollowupAll |
| static const char *const | LLVMLoopUnrollAndJamFollowupInner |
| static const char *const | LLVMLoopUnrollAndJamFollowupOuter |
| static const char *const | LLVMLoopUnrollAndJamFollowupRemainderInner |
| static const char *const | LLVMLoopUnrollAndJamFollowupRemainderOuter |
◆ DEBUG_TYPE
#define DEBUG_TYPE "loop-unroll-and-jam"
◆ computeUnrollAndJamCount()
| bool computeUnrollAndJamCount ( Loop * L, Loop * SubLoop, const TargetTransformInfo & TTI, DominatorTree & DT, LoopInfo * LI, AssumptionCache * AC, ScalarEvolution & SE, const SmallPtrSetImpl< const Value * > & EphValues, OptimizationRemarkEmitter * ORE, unsigned OuterTripCount, unsigned OuterTripMultiple, const UnrollCostEstimator & OuterUCE, unsigned InnerTripCount, unsigned InnerLoopSize, TargetTransformInfo::UnrollingPreferences & UP, TargetTransformInfo::PeelingPreferences & PP ) | static |
|---|
Definition at line 150 of file LoopUnrollAndJamPass.cpp.
References llvm::TargetTransformInfo::UnrollingPreferences::AllowRemainder, llvm::computeUnrollCount(), llvm::TargetTransformInfo::UnrollingPreferences::Count, llvm::dbgs(), llvm::dyn_cast(), llvm::TargetTransformInfo::UnrollingPreferences::Force, llvm::LoopBase< BlockT, LoopT >::getBlocks(), llvm::UnrollCostEstimator::getRolledLoopSize(), llvm::ScalarEvolution::getSCEVAtScope(), getUnrollAndJammedLoopSize(), hasUnrollAndJamEnablePragma(), I, llvm::ScalarEvolution::isLoopInvariant(), LLVM_DEBUG, PragmaUnrollAndJamThreshold, llvm::TargetTransformInfo::UnrollingPreferences::Runtime, llvm::TargetTransformInfo::UnrollingPreferences::Threshold, UnrollAndJamCount, unrollAndJamCountPragmaValue(), and llvm::TargetTransformInfo::UnrollingPreferences::UnrollAndJamInnerLoopThreshold.
Referenced by tryToUnrollAndJamLoop().
◆ getUnrollAndJammedLoopSize()
◆ getUnrollMetadataForLoop()
◆ hasAnyUnrollPragma()
◆ hasUnrollAndJamEnablePragma()
◆ tryToUnrollAndJamLoop() [1/2]
Definition at line 278 of file LoopUnrollAndJamPass.cpp.
References AllowUnrollAndJam, llvm::TargetTransformInfo::UnrollingPreferences::BEInsns, llvm::UnrollCostEstimator::canUnroll(), llvm::CodeMetrics::collectEphemeralValues(), computeUnrollAndJamCount(), llvm::UnrollCostEstimator::Convergence, llvm::TargetTransformInfo::UnrollingPreferences::Count, llvm::dbgs(), llvm::FullyUnrolled, llvm::gatherPeelingPreferences(), llvm::gatherUnrollingPreferences(), llvm::Loop::getLoopID(), llvm::LoopBase< BlockT, LoopT >::getLoopLatch(), llvm::UnrollCostEstimator::getRolledLoopSize(), llvm::ScalarEvolution::getSmallConstantTripCount(), llvm::ScalarEvolution::getSmallConstantTripMultiple(), hasAnyUnrollPragma(), llvm::hasUnrollAndJamTransformation(), llvm::isSafeToUnrollAndJam(), LLVM_DEBUG, LLVMLoopUnrollAndJamFollowupAll, LLVMLoopUnrollAndJamFollowupInner, LLVMLoopUnrollAndJamFollowupOuter, LLVMLoopUnrollAndJamFollowupRemainderInner, LLVMLoopUnrollAndJamFollowupRemainderOuter, llvm::makeFollowupLoopID(), llvm::None, llvm::UnrollCostEstimator::NumInlineCandidates, llvm::PartiallyUnrolled, llvm::Loop::setLoopID(), llvm::TM_Disable, llvm::TM_ForcedByUser, llvm::Unmodified, llvm::TargetTransformInfo::UnrollingPreferences::UnrollAndJam, llvm::TargetTransformInfo::UnrollingPreferences::UnrollAndJamInnerLoopThreshold, llvm::UnrollAndJamLoop(), UnrollAndJamThreshold, and llvm::TargetTransformInfo::UnrollingPreferences::UnrollRemainder.
Referenced by llvm::LoopUnrollAndJamPass::run(), and tryToUnrollAndJamLoop().
◆ tryToUnrollAndJamLoop() [2/2]
| bool tryToUnrollAndJamLoop ( LoopNest & LN, DominatorTree & DT, LoopInfo & LI, ScalarEvolution & SE, const TargetTransformInfo & TTI, AssumptionCache & AC, DependenceInfo & DI, OptimizationRemarkEmitter & ORE, int OptLevel, LPMUpdater & U, bool & AnyLoopRemoved ) | static |
|---|
Definition at line 423 of file LoopUnrollAndJamPass.cpp.
References llvm::appendLoopsToWorklist(), llvm::PriorityWorklist< T, VectorT, MapT >::empty(), llvm::FullyUnrolled, llvm::LoopNest::getLoops(), llvm::LoopNest::getOutermostLoop(), Loops, llvm::PriorityWorklist< T, VectorT, MapT >::pop_back_val(), tryToUnrollAndJamLoop(), and llvm::Unmodified.
◆ unrollAndJamCountPragmaValue()
◆ AllowUnrollAndJam
| cl::opt< bool > AllowUnrollAndJam("allow-unroll-and-jam", cl::Hidden, cl::desc("Allows loops to be unroll-and-jammed.")) ( "allow-unroll-and-jam" , cl::Hidden , cl::desc("Allows loops to be unroll-and-jammed.") ) | static |
|---|
◆ LLVMLoopUnrollAndJamFollowupAll
◆ LLVMLoopUnrollAndJamFollowupInner
◆ LLVMLoopUnrollAndJamFollowupOuter
◆ LLVMLoopUnrollAndJamFollowupRemainderInner
◆ LLVMLoopUnrollAndJamFollowupRemainderOuter
◆ PragmaUnrollAndJamThreshold
| cl::opt< unsigned > PragmaUnrollAndJamThreshold("pragma-unroll-and-jam-threshold", cl::init(1024), cl::Hidden, cl::desc("Unrolled size limit for loops with an unroll_and_jam(full) or " "unroll_count pragma.")) ( "pragma-unroll-and-jam-threshold" , cl::init(1024) , cl::Hidden , cl::desc("Unrolled size limit for loops with an unroll_and_jam(full) or " "unroll_count pragma.") ) | static |
|---|
◆ UnrollAndJamCount
| cl::opt< unsigned > UnrollAndJamCount("unroll-and-jam-count", cl::Hidden, cl::desc("Use this unroll count for all loops including those with " "unroll_and_jam_count pragma values, for testing purposes")) ( "unroll-and-jam-count" , cl::Hidden , cl::desc("Use this unroll count for all loops including those with " "unroll_and_jam_count pragma values, for testing purposes") ) | static |
|---|
◆ UnrollAndJamThreshold
| cl::opt< unsigned > UnrollAndJamThreshold("unroll-and-jam-threshold", cl::init(60), cl::Hidden, cl::desc("Threshold to use for inner loop when doing unroll and jam.")) ( "unroll-and-jam-threshold" , cl::init(60) , cl::Hidden , cl::desc("Threshold to use for inner loop when doing unroll and jam.") ) | static |
|---|