LLVM 19.0.0git
Macros | Functions | Variables
LoopDistribute.cpp File Reference
#include "llvm/Transforms/Scalar/LoopDistribute.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/EquivalenceClasses.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/LoopAccessAnalysis.h"
#include "llvm/Analysis/LoopAnalysisManager.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include "llvm/Transforms/Utils/LoopUtils.h"
#include "llvm/Transforms/Utils/LoopVersioning.h"
#include "llvm/Transforms/Utils/ValueMapper.h"
#include <cassert>
#include <functional>
#include <list>
#include <tuple>
#include <utility>

Go to the source code of this file.

Macros

#define LDIST_NAME   "loop-distribute"
 
#define DEBUG_TYPE   LDIST_NAME
 

Functions

 STATISTIC (NumLoopsDistributed, "Number of loops distributed")
 
static bool runImpl (Function &F, LoopInfo *LI, DominatorTree *DT, ScalarEvolution *SE, OptimizationRemarkEmitter *ORE, LoopAccessInfoManager &LAIs)
 Shared implementation between new and old PMs.
 

Variables

static cl::opt< boolLDistVerify ("loop-distribute-verify", cl::Hidden, cl::desc("Turn on DominatorTree and LoopInfo verification " "after Loop Distribution"), cl::init(false))
 
static cl::opt< boolDistributeNonIfConvertible ("loop-distribute-non-if-convertible", cl::Hidden, cl::desc("Whether to distribute into a loop that may not be " "if-convertible by the loop vectorizer"), cl::init(false))
 
static cl::opt< unsignedDistributeSCEVCheckThreshold ("loop-distribute-scev-check-threshold", cl::init(8), cl::Hidden, cl::desc("The maximum number of SCEV checks allowed for Loop " "Distribution"))
 
static cl::opt< unsignedPragmaDistributeSCEVCheckThreshold ("loop-distribute-scev-check-threshold-with-pragma", cl::init(128), cl::Hidden, cl::desc("The maximum number of SCEV checks allowed for Loop " "Distribution for loop marked with #pragma clang loop " "distribute(enable)"))
 
static cl::opt< boolEnableLoopDistribute ("enable-loop-distribute", cl::Hidden, cl::desc("Enable the new, experimental LoopDistribution Pass"), cl::init(false))
 
static const char *const LLVMLoopDistributeFollowupAll
 
static const char *const LLVMLoopDistributeFollowupCoincident
 
static const char *const LLVMLoopDistributeFollowupSequential
 
static const char *const LLVMLoopDistributeFollowupFallback
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   LDIST_NAME

Definition at line 73 of file LoopDistribute.cpp.

◆ LDIST_NAME

#define LDIST_NAME   "loop-distribute"

Definition at line 72 of file LoopDistribute.cpp.

Function Documentation

◆ runImpl()

static bool runImpl ( Function F,
LoopInfo LI,
DominatorTree DT,
ScalarEvolution SE,
OptimizationRemarkEmitter ORE,
LoopAccessInfoManager LAIs 
)
static

Shared implementation between new and old PMs.

Definition at line 966 of file LoopDistribute.cpp.

References llvm::depth_first(), EnableLoopDistribute, F, and llvm::SmallVectorTemplateBase< T, bool >::push_back().

◆ STATISTIC()

STATISTIC ( NumLoopsDistributed  ,
"Number of loops distributed"   
)

Variable Documentation

◆ DistributeNonIfConvertible

cl::opt< bool > DistributeNonIfConvertible("loop-distribute-non-if-convertible", cl::Hidden, cl::desc("Whether to distribute into a loop that may not be " "if-convertible by the loop vectorizer"), cl::init(false)) ( "loop-distribute-non-if-convertible"  ,
cl::Hidden  ,
cl::desc("Whether to distribute into a loop that may not be " "if-convertible by the loop vectorizer")  ,
cl::init(false)   
)
static

◆ DistributeSCEVCheckThreshold

cl::opt< unsigned > DistributeSCEVCheckThreshold("loop-distribute-scev-check-threshold", cl::init(8), cl::Hidden, cl::desc("The maximum number of SCEV checks allowed for Loop " "Distribution")) ( "loop-distribute-scev-check-threshold"  ,
cl::init(8)  ,
cl::Hidden  ,
cl::desc("The maximum number of SCEV checks allowed for Loop " "Distribution")   
)
static

◆ EnableLoopDistribute

cl::opt< bool > EnableLoopDistribute("enable-loop-distribute", cl::Hidden, cl::desc("Enable the new, experimental LoopDistribution Pass"), cl::init(false)) ( "enable-loop-distribute"  ,
cl::Hidden  ,
cl::desc("Enable the new, experimental LoopDistribution Pass")  ,
cl::init(false)   
)
static

Referenced by runImpl().

◆ LDistVerify

cl::opt< bool > LDistVerify("loop-distribute-verify", cl::Hidden, cl::desc("Turn on DominatorTree and LoopInfo verification " "after Loop Distribution"), cl::init(false)) ( "loop-distribute-verify"  ,
cl::Hidden  ,
cl::desc("Turn on DominatorTree and LoopInfo verification " "after Loop Distribution")  ,
cl::init(false)   
)
static

◆ LLVMLoopDistributeFollowupAll

const char* const LLVMLoopDistributeFollowupAll
static
Initial value:
=
"llvm.loop.distribute.followup_all"

Metadata attribute names

Definition at line 77 of file LoopDistribute.cpp.

◆ LLVMLoopDistributeFollowupCoincident

const char* const LLVMLoopDistributeFollowupCoincident
static
Initial value:
=
"llvm.loop.distribute.followup_coincident"

Definition at line 79 of file LoopDistribute.cpp.

◆ LLVMLoopDistributeFollowupFallback

const char* const LLVMLoopDistributeFollowupFallback
static
Initial value:
=
"llvm.loop.distribute.followup_fallback"

Definition at line 83 of file LoopDistribute.cpp.

◆ LLVMLoopDistributeFollowupSequential

const char* const LLVMLoopDistributeFollowupSequential
static
Initial value:
=
"llvm.loop.distribute.followup_sequential"

Definition at line 81 of file LoopDistribute.cpp.

◆ PragmaDistributeSCEVCheckThreshold

cl::opt< unsigned > PragmaDistributeSCEVCheckThreshold("loop-distribute-scev-check-threshold-with-pragma", cl::init(128), cl::Hidden, cl::desc("The maximum number of SCEV checks allowed for Loop " "Distribution for loop marked with #pragma clang loop " "distribute(enable)")) ( "loop-distribute-scev-check-threshold-with-pragma"  ,
cl::init(128)  ,
cl::Hidden  ,
cl::desc("The maximum number of SCEV checks allowed for Loop " "Distribution for loop marked with #pragma clang loop " "distribute(enable)")   
)
static