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

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

#include "VPlan.h"
#include "VPlanAnalysis.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/IVDescriptors.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/IR/VectorBuilder.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/ScalarEvolutionExpander.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 ValuegetStepVector (Value *Val, Value *Step, Instruction::BinaryOps BinOp, ElementCount VF, IRBuilderBase &Builder)
 This function adds (0 * Step, 1 * Step, 2 * Step, ...) to each vector element of Val.
 
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, unsigned CurrentPart, IRBuilderBase &Builder)
 
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.
 

Variables

cl::opt< unsignedForceTargetInstructionCost
 

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 49 of file VPlanRecipes.cpp.

◆ LV_NAME

#define LV_NAME   "loop-vectorize"

Definition at line 48 of file VPlanRecipes.cpp.

Typedef Documentation

◆ VectorParts

using VectorParts = SmallVector<Value *, 2>

Definition at line 41 of file VPlanRecipes.cpp.

Function Documentation

◆ createBitOrPointerCast()

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

◆ 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 2602 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().

◆ getGEPIndexTy()

static Type * getGEPIndexTy ( bool  IsScalable,
bool  IsReverse,
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 1707 of file VPlanRecipes.cpp.

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

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

◆ getStepVector()

static Value * getStepVector ( Value Val,
Value Step,
Instruction::BinaryOps  BinOp,
ElementCount  VF,
IRBuilderBase Builder 
)
static

◆ interleaveVectors()

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

Variable Documentation

◆ ForceTargetInstructionCost

cl::opt<unsigned> ForceTargetInstructionCost
extern