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"
Functions
static MDNode * getUnrollMetadataForLoop (const Loop *L, StringRef Name)
static bool hasAnyUnrollPragma (const Loop *L, StringRef Prefix)
static bool hasUnrollAndJamEnablePragma (const Loop *L)
static unsigned unrollAndJamCountPragmaValue (const Loop *L)
static uint64_t getUnrollAndJammedLoopSize (unsigned LoopSize, TargetTransformInfo::UnrollingPreferences &UP)
static 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 LoopUnrollResult tryToUnrollAndJamLoop (Loop *L, DominatorTree &DT, LoopInfo *LI, ScalarEvolution &SE, const TargetTransformInfo &TTI, AssumptionCache &AC, DependenceInfo &DI, OptimizationRemarkEmitter &ORE, int OptLevel)
static 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)
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