LLVM 22.0.0git
Namespaces | Macros | Typedefs | Functions
VPlanRecipes.cpp File Reference

This file contains implementations for different VPlan recipes. More...

#include "LoopVectorizationPlanner.h"
#include "VPlan.h"
#include "VPlanAnalysis.h"
#include "VPlanHelpers.h"
#include "VPlanPatternMatch.h"
#include "VPlanUtils.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/IVDescriptors.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.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/raw_ostream.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/LoopUtils.h"
#include "llvm/Transforms/Utils/LoopVersioning.h"
#include <cassert>

Go to the source code of this file.

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 

Macros

#define LV_NAME   "loop-vectorize"
 
#define DEBUG_TYPE   LV_NAME
 

Typedefs

using VectorParts = SmallVector< Value *, 2 >
 

Functions

static BranchInstcreateCondBranch (Value *Cond, VPBasicBlock *VPBB, VPTransformState &State)
 Create a conditional branch using Cond branching to the successors of VPBB.
 
static InstructionCost getCostForIntrinsics (Intrinsic::ID ID, ArrayRef< const VPValue * > Operands, const VPRecipeWithIRFlags &R, ElementCount VF, VPCostContext &Ctx)
 Compute the cost for the intrinsic ID with Operands, produced by R.
 
static ConstantgetSignedIntOrFpConstant (Type *Ty, int64_t C)
 A helper function that returns an integer or floating-point constant with value C.
 
static TypegetGEPIndexTy (bool IsScalable, bool IsReverse, bool IsUnitStride, unsigned CurrentPart, IRBuilderBase &Builder)
 
static void scalarizeInstruction (const Instruction *Instr, VPReplicateRecipe *RepRecipe, const VPLane &Lane, VPTransformState &State)
 A helper function to scalarize a single Instruction in the innermost loop.
 
static InstructioncreateReverseEVL (IRBuilderBase &Builder, Value *Operand, Value *EVL, const Twine &Name)
 Use all-true mask for reverse rather than actual mask, as it avoids a dependence w/o affecting the result.
 
static ValuecreateBitOrPointerCast (IRBuilderBase &Builder, Value *V, VectorType *DstVTy, const DataLayout &DL)
 
static ValueinterleaveVectors (IRBuilderBase &Builder, ArrayRef< Value * > Vals, const Twine &Name)
 Return a vector containing interleaved elements from multiple smaller input vectors.
 

Detailed Description

This file contains implementations for different VPlan recipes.

Definition in file VPlanRecipes.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   LV_NAME

Definition at line 47 of file VPlanRecipes.cpp.

◆ LV_NAME

#define LV_NAME   "loop-vectorize"

Definition at line 46 of file VPlanRecipes.cpp.

Typedef Documentation

◆ VectorParts

using VectorParts = SmallVector<Value *, 2>

Definition at line 44 of file VPlanRecipes.cpp.

Function Documentation

◆ createBitOrPointerCast()

static Value * createBitOrPointerCast ( IRBuilderBase Builder,
Value V,
VectorType DstVTy,
const DataLayout DL 
)
static

◆ createCondBranch()

static BranchInst * createCondBranch ( Value Cond,
VPBasicBlock VPBB,
VPTransformState State 
)
static

Create a conditional branch using Cond branching to the successors of VPBB.

Note that the first successor is always forward (i.e. not created yet) while the second successor may already have been created (if it is a header block and VPBB is a latch).

Definition at line 542 of file VPlanRecipes.cpp.

References llvm::VPTransformState::Builder, llvm::VPTransformState::CFG, Cond, llvm::IRBuilderBase::CreateCondBr(), llvm::Instruction::eraseFromParent(), llvm::VPBlockBase::getSuccessors(), llvm::BasicBlock::getTerminator(), llvm::BranchInst::setSuccessor(), and llvm::VPTransformState::CFGState::VPBB2IRBB.

◆ createReverseEVL()

static Instruction * createReverseEVL ( IRBuilderBase Builder,
Value Operand,
Value EVL,
const Twine Name 
)
static

Use all-true mask for reverse rather than actual mask, as it avoids a dependence w/o affecting the result.

Definition at line 3366 of file VPlanRecipes.cpp.

References llvm::IRBuilderBase::CreateIntrinsic(), llvm::IRBuilderBase::CreateVectorSplat(), llvm::IRBuilderBase::getTrue(), llvm::Value::getType(), and Name.

Referenced by llvm::VPWidenLoadEVLRecipe::execute(), and llvm::VPWidenStoreEVLRecipe::execute().

◆ getCostForIntrinsics()

static InstructionCost getCostForIntrinsics ( Intrinsic::ID  ID,
ArrayRef< const VPValue * >  Operands,
const VPRecipeWithIRFlags R,
ElementCount  VF,
VPCostContext Ctx 
)
static

◆ getGEPIndexTy()

static Type * getGEPIndexTy ( bool  IsScalable,
bool  IsReverse,
bool  IsUnitStride,
unsigned  CurrentPart,
IRBuilderBase Builder 
)
static

◆ getSignedIntOrFpConstant()

static Constant * getSignedIntOrFpConstant ( Type Ty,
int64_t  C 
)
static

A helper function that returns an integer or floating-point constant with value C.

Definition at line 2286 of file VPlanRecipes.cpp.

References llvm::CallingConv::C, llvm::ConstantInt::getSigned(), and llvm::Type::isIntegerTy().

Referenced by llvm::VPScalarIVStepsRecipe::execute().

◆ interleaveVectors()

static Value * interleaveVectors ( IRBuilderBase Builder,
ArrayRef< Value * >  Vals,
const Twine Name 
)
static

Return a vector containing interleaved elements from multiple smaller input vectors.

Definition at line 3585 of file VPlanRecipes.cpp.

References assert(), llvm::concatenateVectors(), llvm::createInterleaveMask(), llvm::IRBuilderBase::CreateShuffleVector(), llvm::IRBuilderBase::CreateVectorInterleave(), getType(), Name, and llvm::ArrayRef< T >::size().

Referenced by llvm::VPInterleaveRecipe::execute().

◆ scalarizeInstruction()

static void scalarizeInstruction ( const Instruction Instr,
VPReplicateRecipe RepRecipe,
const VPLane Lane,
VPTransformState State 
)
static