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

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

#include "VPlan.h"
#include "VPlanAnalysis.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/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/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 *StartIdx, Value *Step, Instruction::BinaryOps BinOp, ElementCount VF, IRBuilderBase &Builder)
 This function adds (StartIdx * Step, (StartIdx + 1) * Step, (StartIdx + 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 ValuegetRuntimeVFAsFloat (IRBuilderBase &B, Type *FTy, ElementCount VF)
 
static bool isUniformAcrossVFsAndUFs (VPScalarCastRecipe *C)
 Checks if C is uniform across all VFs and UFs.
 

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

◆ LV_NAME

#define LV_NAME   "loop-vectorize"

Definition at line 43 of file VPlanRecipes.cpp.

Typedef Documentation

◆ VectorParts

using VectorParts = SmallVector<Value *, 2>

Definition at line 37 of file VPlanRecipes.cpp.

Function Documentation

◆ getRuntimeVFAsFloat()

static Value * getRuntimeVFAsFloat ( IRBuilderBase B,
Type FTy,
ElementCount  VF 
)
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 1074 of file VPlanRecipes.cpp.

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

Referenced by llvm::VPWidenIntOrFpInductionRecipe::execute(), and llvm::VPScalarIVStepsRecipe::execute().

◆ getStepVector()

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

◆ isUniformAcrossVFsAndUFs()

static bool isUniformAcrossVFsAndUFs ( VPScalarCastRecipe C)
static

Checks if C is uniform across all VFs and UFs.

It is considered as such if it is either defined outside the vector region or its operand is known to be uniform across all VFs and UFs (e.g. VPDerivedIV or VPCanonicalIVPHI). TODO: Uniformity should be associated with a VPValue and there should be a generic way to check.

Definition at line 1649 of file VPlanRecipes.cpp.

References llvm::CallingConv::C.

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