LLVM 20.0.0git
Namespaces | Macros | Functions
VPlan.cpp File Reference

This is the LLVM vectorization plan. More...

#include "VPlan.h"
#include "LoopVectorizationPlanner.h"
#include "VPlanCFG.h"
#include "VPlanDominatorTree.h"
#include "VPlanPatternMatch.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 TgetPlanEntry (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)
 

Detailed Description

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.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "vplan"

Definition at line 58 of file VPlan.cpp.

Function Documentation

◆ cloneFrom()

static std::pair< VPBlockBase *, VPBlockBase * > cloneFrom ( VPBlockBase Entry)
static

◆ getPlanEntry()

template<typename T >
static T * getPlanEntry ( T Start)
static

◆ hasConditionalTerminator()

static bool hasConditionalTerminator ( const VPBasicBlock VPBB)
static

◆ remapOperands()

static void remapOperands ( VPBlockBase Entry,
VPBlockBase NewEntry,
DenseMap< VPValue *, VPValue * > &  Old2NewVPValues 
)
static

◆ replaceVPBBWithIRVPBB()

static void replaceVPBBWithIRVPBB ( VPBasicBlock VPBB,
BasicBlock IRBB 
)
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 959 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().