LLVM  8.0.1
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/Optional.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/AliasAnalysis.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/InstrTypes.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/Pass.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/Scalar.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, std::function< const LoopAccessInfo &(Loop &)> &GetLAA)
 Shared implementation between new and old PMs. More...
 
 INITIALIZE_PASS_BEGIN (LoopDistributeLegacy, LDIST_NAME, ldist_name, false, false) FunctionPass *llvm
 

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 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 ldist_name [] = "Loop Distribution"
 
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 79 of file LoopDistribute.cpp.

◆ LDIST_NAME

#define LDIST_NAME   "loop-distribute"

Definition at line 78 of file LoopDistribute.cpp.

Function Documentation

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( LoopDistributeLegacy  ,
LDIST_NAME  ,
ldist_name  ,
false  ,
false   
)

Definition at line 1067 of file LoopDistribute.cpp.

◆ runImpl()

static bool runImpl ( Function F,
LoopInfo LI,
DominatorTree DT,
ScalarEvolution SE,
OptimizationRemarkEmitter ORE,
std::function< const LoopAccessInfo &(Loop &)> &  GetLAA 
)
static

◆ 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))
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"))
static

◆ EnableLoopDistribute

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

Referenced by runImpl().

◆ ldist_name

const char ldist_name[] = "Loop Distribution"
static

Definition at line 1065 of file LoopDistribute.cpp.

◆ LDistVerify

cl::opt<bool> LDistVerify("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 83 of file LoopDistribute.cpp.

◆ LLVMLoopDistributeFollowupCoincident

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

Definition at line 85 of file LoopDistribute.cpp.

◆ LLVMLoopDistributeFollowupFallback

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

Definition at line 89 of file LoopDistribute.cpp.

◆ LLVMLoopDistributeFollowupSequential

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

Definition at line 87 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 loop distribute(enable)"))
static