LLVM  8.0.0svn
Classes | Namespaces | Typedefs | Functions
VPlan.h File Reference

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

#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/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/IR/IRBuilder.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.


struct  llvm::VFRange
 A range of powers-of-2 vectorization factors with fixed start and adjustable end. More...
struct  llvm::VPIteration
 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::VectorizerValueMap
 This is a helper struct for maintaining vectorization state. More...
struct  llvm::VPCallback
 This class is used to enable the VPlan to invoke a method of ILV. 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...
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 for each Instruction in its ingredients independently, in order. 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 all phi nodes except for integer and FP inductions. 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::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::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...
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
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::VPBlockUtils
 Class that provides utilities for VPBlockBases in VPlan. More...


 Compute iterated dominance frontiers using a linear time algorithm.


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


raw_ostream & llvm::operator<< (raw_ostream &OS, const VPlanIngredient &I)
raw_ostream & llvm::operator<< (raw_ostream &OS, 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.