LLVM  14.0.0git
Classes | Namespaces | Typedefs | Functions
VPlan.h File Reference
#include "VPlanLoopInfo.h"
#include "VPlanValue.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/GraphTraits.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallBitVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Twine.h"
#include "llvm/ADT/ilist.h"
#include "llvm/ADT/ilist_node.h"
#include "llvm/Analysis/VectorUtils.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/Support/InstructionCost.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <map>
#include <string>
Include dependency graph for VPlan.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  llvm::VFRange
 A range of powers-of-2 vectorization factors with fixed start and adjustable end. More...
 
class  llvm::VPLane
 In what follows, the term "input IR" refers to code that is fed into the vectorizer whereas the term "output IR" refers to code that is generated by the vectorizer. More...
 
struct  llvm::VPIteration
 VPIteration represents a single point in the iteration space of the output (vectorized and/or unrolled) IR loop. More...
 
struct  llvm::VPTransformState
 VPTransformState holds information passed down when "executing" a VPlan, needed for generating the output IR. More...
 
struct  llvm::VPTransformState::DataState
 
struct  llvm::VPTransformState::CFGState
 Hold state information used when constructing the CFG of the output IR, traversing the VPBasicBlocks and generating corresponding IR BasicBlocks. More...
 
struct  llvm::VPBlockUser
 VPUsers instance used by VPBlockBase to manage CondBit and the block predicate. More...
 
class  llvm::VPBlockBase
 VPBlockBase is the building block of the Hierarchical Control-Flow Graph. More...
 
class  llvm::VPRecipeBase
 VPRecipeBase is a base class modeling a sequence of one or more output IR instructions. More...
 
class  llvm::VPInstruction
 This is a concrete Recipe that models a single VPlan-level instruction. More...
 
class  llvm::VPWidenRecipe
 VPWidenRecipe is a recipe for producing a copy of vector type its ingredient. More...
 
class  llvm::VPWidenCallRecipe
 A recipe for widening Call instructions. More...
 
class  llvm::VPWidenSelectRecipe
 A recipe for widening select instructions. More...
 
class  llvm::VPWidenGEPRecipe
 A recipe for handling GEP instructions. More...
 
class  llvm::VPWidenIntOrFpInductionRecipe
 A recipe for handling phi nodes of integer and floating-point inductions, producing their vector and scalar values. More...
 
class  llvm::VPWidenPHIRecipe
 A recipe for handling first order recurrences and pointer inductions. More...
 
struct  llvm::VPFirstOrderRecurrencePHIRecipe
 A recipe for handling first-order recurrence phis. More...
 
class  llvm::VPReductionPHIRecipe
 A recipe for handling reduction phis. More...
 
class  llvm::VPBlendRecipe
 A recipe for vectorizing a phi-node as a sequence of mask-based select instructions. More...
 
class  llvm::VPInterleaveRecipe
 VPInterleaveRecipe is a recipe for transforming an interleave group of load or stores into one wide load/store and shuffles. More...
 
class  llvm::VPReductionRecipe
 A recipe to represent inloop reduction operations, performing a reduction on a vector operand into a scalar value, and adding the result to a chain. More...
 
class  llvm::VPReplicateRecipe
 VPReplicateRecipe replicates a given instruction producing multiple scalar copies of the original scalar type, one per lane, instead of producing a single copy of widened type for all lanes. More...
 
class  llvm::VPBranchOnMaskRecipe
 A recipe for generating conditional branches on the bits of a mask. More...
 
class  llvm::VPPredInstPHIRecipe
 VPPredInstPHIRecipe is a recipe for generating the phi nodes needed when control converges back from a Branch-on-Mask. More...
 
class  llvm::VPWidenMemoryInstructionRecipe
 A Recipe for widening load/store operations. More...
 
class  llvm::VPWidenCanonicalIVRecipe
 A Recipe for widening the canonical induction variable of the vector loop. More...
 
class  llvm::VPBasicBlock
 VPBasicBlock serves as the leaf of the Hierarchical Control-Flow Graph. More...
 
class  llvm::VPRegionBlock
 VPRegionBlock represents a collection of VPBasicBlocks and VPRegionBlocks which form a Single-Entry-Single-Exit subgraph of the output IR CFG. More...
 
struct  llvm::GraphTraits< VPBlockBase * >
 
struct  llvm::GraphTraits< const VPBlockBase * >
 
struct  llvm::GraphTraits< Inverse< VPBlockBase * > >
 
struct  llvm::GraphTraits< VPRegionBlock * >
 
struct  llvm::GraphTraits< const VPRegionBlock * >
 
struct  llvm::GraphTraits< Inverse< VPRegionBlock * > >
 
class  llvm::VPAllSuccessorsIterator< BlockPtrTy >
 Iterator to traverse all successors of a VPBlockBase node. More...
 
class  llvm::VPBlockRecursiveTraversalWrapper< BlockTy >
 Helper for GraphTraits specialization that traverses through VPRegionBlocks. More...
 
struct  llvm::GraphTraits< VPBlockRecursiveTraversalWrapper< VPBlockBase * > >
 GraphTraits specialization to recursively traverse VPBlockBase nodes, including traversing through VPRegionBlocks. More...
 
struct  llvm::GraphTraits< VPBlockRecursiveTraversalWrapper< const VPBlockBase * > >
 
class  llvm::VPlan
 VPlan models a candidate for vectorization, encoding various decisions take to produce efficient output IR, including which branches, basic-blocks and output IR instructions to generate, and their cost. More...
 
class  llvm::VPlanPrinter
 VPlanPrinter prints a given VPlan to a given output stream. More...
 
struct  llvm::VPlanIngredient
 
class  llvm::VPBlockUtils
 Class that provides utilities for VPBlockBases in VPlan. More...
 
class  llvm::VPInterleavedAccessInfo
 
class  llvm::VPlanSlp
 Class that maps (parts of) an existing VPlan to trees of combined VPInstructions. More...
 

Namespaces

 llvm
 ---------------------— PointerInfo ------------------------------------—
 

Typedefs

using llvm::VPlanPtr = std::unique_ptr< VPlan >
 

Functions

Valuellvm::getRuntimeVF (IRBuilder<> &B, Type *Ty, ElementCount VF)
 Return the runtime value for VF. More...
 
raw_ostream & llvm::operator<< (raw_ostream &OS, const VPlanIngredient &I)
 
raw_ostream & llvm::operator<< (raw_ostream &OS, const VPlan &Plan)
 

Detailed Description

This file contains the declarations of the Vectorization Plan base classes:

  1. VPBasicBlock and VPRegionBlock that inherit from a common pure virtual VPBlockBase, together implementing a Hierarchical CFG;
  2. Specializations of GraphTraits that allow VPBlockBase graphs to be treated as proper graphs for generic algorithms;
  3. Pure virtual VPRecipeBase serving as the base class for recipes contained within VPBasicBlocks;
  4. VPInstruction, a concrete Recipe and VPUser modeling a single planned instruction;
  5. The VPlan class holding a candidate for vectorization;
  6. The VPlanPrinter class providing a way to print a plan in dot format; These are documented in docs/VectorizationPlan.rst.

Definition in file VPlan.h.