LLVM 20.0.0git
|
This is the LLVM vectorization plan. More...
#include "VPlan.h"
#include "LoopVectorizationPlanner.h"
#include "VPlanCFG.h"
#include "VPlanDominatorTree.h"
#include "VPlanPatternMatch.h"
#include "VPlanTransforms.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Analysis/DomTreeUpdater.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/GenericDomTreeConstruction.h"
#include "llvm/Support/GraphWriter.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/LoopVersioning.h"
#include "llvm/Transforms/Utils/ScalarEvolutionExpander.h"
#include <cassert>
#include <string>
#include <vector>
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 "vplan" |
Functions | |
template<typename T > | |
static T * | getPlanEntry (T *Start) |
static bool | hasConditionalTerminator (const VPBasicBlock *VPBB) |
static std::pair< VPBlockBase *, VPBlockBase * > | cloneFrom (VPBlockBase *Entry) |
static void | replaceVPBBWithIRVPBB (VPBasicBlock *VPBB, BasicBlock *IRBB) |
Replace VPBB with a VPIRBasicBlock wrapping IRBB . | |
static void | remapOperands (VPBlockBase *Entry, VPBlockBase *NewEntry, DenseMap< VPValue *, VPValue * > &Old2NewVPValues) |
Variables | |
static cl::opt< bool > | PrintVPlansInDotFormat ("vplan-print-in-dot-format", cl::Hidden, cl::desc("Use dot format instead of plain text when dumping VPlans")) |
This is the LLVM vectorization plan.
It represents a candidate for vectorization, allowing to plan and optimize how to vectorize a given loop before generating LLVM-IR. The vectorizer uses vectorization plans to estimate the costs of potential candidates and if profitable to execute the desired plan, generating vector LLVM-IR code.
Definition in file VPlan.cpp.
|
static |
Definition at line 668 of file VPlan.cpp.
References assert(), llvm::VPBlockBase::getPredecessors(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::VPBlockBase::setPredecessors(), llvm::VPBlockBase::setSuccessors(), llvm::VPBlockBase::successors(), llvm::vp_depth_first_shallow(), and llvm::zip().
Referenced by llvm::VPRegionBlock::clone(), and llvm::VPlan::duplicate().
Definition at line 135 of file VPlan.cpp.
References llvm::SetVector< T, Vector, Set, N >::insert(), llvm_unreachable, and llvm::SetVector< T, Vector, Set, N >::size().
Referenced by llvm::VPBlockBase::getPlan().
|
static |
Definition at line 590 of file VPlan.cpp.
References assert(), llvm::VPBasicBlock::back(), llvm::VPBasicBlock::empty(), llvm::VPBlockBase::getNumSuccessors(), llvm::VPBlockBase::getParent(), IsCondBranch(), llvm::VPBasicBlock::isExiting(), llvm::VPRegionBlock::isReplicator(), llvm::VPlanPatternMatch::m_BranchOnCond(), llvm::VPlanPatternMatch::m_BranchOnCount(), llvm::VPlanPatternMatch::m_VPValue(), and llvm::PatternMatch::match().
Referenced by llvm::VPBasicBlock::getTerminator().
|
static |
Definition at line 1192 of file VPlan.cpp.
References assert(), I, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), llvm::BasicBlock::size(), and llvm::zip().
Referenced by llvm::VPlan::duplicate().
|
static |
Replace VPBB
with a VPIRBasicBlock wrapping IRBB
.
All recipes from VPBB
are moved to the newly created VPIRBasicBlock. VPBB must have a single predecessor, which is rewired to the new VPIRBasicBlock. All successors of VPBB, if any, are rewired to the new VPIRBasicBlock.
Definition at line 964 of file VPlan.cpp.
References llvm::VPBlockUtils::connectBlocks(), llvm::VPBlockUtils::disconnectBlocks(), llvm::VPBasicBlock::end(), llvm::VPBlockBase::getSinglePredecessor(), llvm::VPBlockBase::getSuccessors(), llvm::make_early_inc_range(), and llvm::to_vector().
Referenced by llvm::VPlan::execute().
|
static |
Referenced by llvm::LoopVectorizationPlanner::printPlans().