LLVM 22.0.0git
|
VPTransformState holds information passed down when "executing" a VPlan, needed for generating the output IR. More...
#include "Transforms/Vectorize/VPlanHelpers.h"
Classes | |
struct | CFGState |
Hold state information used when constructing the CFG of the output IR, traversing the VPBasicBlocks and generating corresponding IR BasicBlocks. More... | |
struct | DataState |
Public Member Functions | |
VPTransformState (const TargetTransformInfo *TTI, ElementCount VF, LoopInfo *LI, DominatorTree *DT, AssumptionCache *AC, IRBuilderBase &Builder, VPlan *Plan, Loop *CurrentParentLoop, Type *CanonicalIVTy) | |
Value * | get (const VPValue *Def, bool IsScalar=false) |
Get the generated vector Value for a given VPValue Def if IsScalar is false, otherwise return the generated scalar. | |
Value * | get (const VPValue *Def, const VPLane &Lane) |
Get the generated Value for a given VPValue and given Part and Lane. | |
bool | hasVectorValue (const VPValue *Def) |
bool | hasScalarValue (const VPValue *Def, VPLane Lane) |
void | set (const VPValue *Def, Value *V, bool IsScalar=false) |
Set the generated vector Value for a given VPValue, if IsScalar is false. | |
void | reset (const VPValue *Def, Value *V) |
Reset an existing vector value for Def and a given Part . | |
void | set (const VPValue *Def, Value *V, const VPLane &Lane) |
Set the generated scalar V for Def and the given Lane . | |
void | reset (const VPValue *Def, Value *V, const VPLane &Lane) |
Reset an existing scalar value for Def and a given Lane . | |
void | setDebugLocFrom (DebugLoc DL) |
Set the debug location in the builder using the debug location DL . | |
Value * | packScalarIntoVectorizedValue (const VPValue *Def, Value *WideValue, const VPLane &Lane) |
Insert the scalar value of Def at Lane into Lane of WideValue and return the resulting value. | |
Public Attributes | |
const TargetTransformInfo * | TTI |
Target Transform Info. | |
ElementCount | VF |
The chosen Vectorization Factor of the loop being vectorized. | |
std::optional< VPLane > | Lane |
Hold the index to generate specific scalar instructions. | |
struct llvm::VPTransformState::DataState | Data |
struct llvm::VPTransformState::CFGState | CFG |
LoopInfo * | LI |
Hold a pointer to LoopInfo to register new basic blocks in the loop. | |
AssumptionCache * | AC |
Hold a pointer to AssumptionCache to register new assumptions after replicating assume calls. | |
IRBuilderBase & | Builder |
Hold a reference to the IRBuilder used to generate output IR code. | |
VPlan * | Plan |
Pointer to the VPlan code is generated for. | |
Loop * | CurrentParentLoop = nullptr |
The parent loop object for the current scope, or nullptr. | |
VPTypeAnalysis | TypeAnalysis |
VPlan-based type analysis. | |
VPDominatorTree | VPDT |
VPlan-based dominator tree. | |
VPTransformState holds information passed down when "executing" a VPlan, needed for generating the output IR.
Definition at line 205 of file VPlanHelpers.h.
VPTransformState::VPTransformState | ( | const TargetTransformInfo * | TTI, |
ElementCount | VF, | ||
LoopInfo * | LI, | ||
DominatorTree * | DT, | ||
AssumptionCache * | AC, | ||
IRBuilderBase & | Builder, | ||
VPlan * | Plan, | ||
Loop * | CurrentParentLoop, | ||
Type * | CanonicalIVTy | ||
) |
Get the generated vector Value for a given VPValue Def
if IsScalar
is false, otherwise return the generated scalar.
\See set.
Definition at line 283 of file VPlan.cpp.
References assert(), B, Builder, llvm::IRBuilderBase::CreateVectorSplat(), Data, get(), llvm::PoisonValue::get(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), hasScalarValue(), hasVectorValue(), llvm::isa(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable(), llvm::ElementCount::isScalar(), llvm::vputils::isSingleScalar(), Lane, llvm::vputils::onlyFirstLaneUsed(), packScalarIntoVectorizedValue(), llvm::IRBuilderBase::saveIP(), set(), llvm::IRBuilderBase::SetInsertPoint(), llvm::toVectorizedTy(), VF, llvm::VPTransformState::DataState::VPV2Scalars, and llvm::VPTransformState::DataState::VPV2Vector.
Referenced by llvm::VPInstructionWithType::execute(), llvm::VPPhi::execute(), llvm::VPIRPhi::execute(), llvm::VPWidenRecipe::execute(), llvm::VPWidenCastRecipe::execute(), llvm::VPWidenIntrinsicRecipe::execute(), llvm::VPWidenCallRecipe::execute(), llvm::VPHistogramRecipe::execute(), llvm::VPWidenSelectRecipe::execute(), llvm::VPWidenGEPRecipe::execute(), llvm::VPVectorEndPointerRecipe::execute(), llvm::VPVectorPointerRecipe::execute(), llvm::VPWidenPHIRecipe::execute(), llvm::VPReductionPHIRecipe::execute(), llvm::VPInterleaveRecipe::execute(), llvm::VPReductionRecipe::execute(), llvm::VPPartialReductionRecipe::execute(), llvm::VPReductionEVLRecipe::execute(), llvm::VPReplicateRecipe::execute(), llvm::VPBranchOnMaskRecipe::execute(), llvm::VPPredInstPHIRecipe::execute(), llvm::VPWidenLoadRecipe::execute(), llvm::VPWidenLoadEVLRecipe::execute(), llvm::VPWidenStoreRecipe::execute(), llvm::VPWidenStoreEVLRecipe::execute(), llvm::VPActiveLaneMaskPHIRecipe::execute(), llvm::VPWidenCanonicalIVRecipe::execute(), llvm::VPDerivedIVRecipe::execute(), llvm::VPScalarIVStepsRecipe::execute(), llvm::VPlan::execute(), llvm::InnerLoopVectorizer::fixNonInductionPHIs(), fixReductionScalarResumeWhenVectorizingEpilog(), get(), llvm::VPUnrollPartAccessor< 1 >::getUnrollPart(), packScalarIntoVectorizedValue(), and scalarizeInstruction().
Get the generated Value for a given VPValue and given Part and Lane.
Definition at line 251 of file VPlan.cpp.
References assert(), Builder, llvm::IRBuilderBase::CreateExtractElement(), Data, llvm::VPLane::First, get(), llvm::VPLane::getFirstLane(), hasScalarValue(), hasVectorValue(), llvm::vputils::isSingleScalar(), Lane, llvm::VPlanPatternMatch::m_BuildVector(), llvm::PatternMatch::match(), VF, llvm::VPTransformState::DataState::VPV2Scalars, and llvm::VPTransformState::DataState::VPV2Vector.
Definition at line 240 of file VPlanHelpers.h.
References Data, I, Lane, VF, and llvm::VPTransformState::DataState::VPV2Scalars.
Referenced by llvm::VPPredInstPHIRecipe::execute(), and get().
Definition at line 236 of file VPlanHelpers.h.
References Data, and llvm::VPTransformState::DataState::VPV2Vector.
Referenced by llvm::VPPredInstPHIRecipe::execute(), and get().
Value * VPTransformState::packScalarIntoVectorizedValue | ( | const VPValue * | Def, |
Value * | WideValue, | ||
const VPLane & | Lane | ||
) |
Insert the scalar value of Def
at Lane
into Lane
of WideValue
and return the resulting value.
Definition at line 393 of file VPlan.cpp.
References Builder, llvm::IRBuilderBase::CreateExtractValue(), llvm::IRBuilderBase::CreateInsertElement(), llvm::IRBuilderBase::CreateInsertValue(), get(), llvm::Value::getType(), I, Lane, and VF.
Referenced by llvm::VPReplicateRecipe::execute(), and get().
Reset an existing vector value for Def
and a given Part
.
Definition at line 261 of file VPlanHelpers.h.
References assert(), Data, and llvm::VPTransformState::DataState::VPV2Vector.
Referenced by llvm::VPPredInstPHIRecipe::execute().
Reset an existing scalar value for Def
and a given Lane
.
Definition at line 277 of file VPlanHelpers.h.
References assert(), Data, Lane, VF, and llvm::VPTransformState::DataState::VPV2Scalars.
Set the generated vector Value for a given VPValue, if IsScalar
is false.
If IsScalar
is true, set the scalar in lane 0.
Definition at line 250 of file VPlanHelpers.h.
References assert(), Data, llvm::ElementCount::isScalar(), llvm::isVectorizedTy(), set(), VF, and llvm::VPTransformState::DataState::VPV2Vector.
Referenced by llvm::VPInstruction::execute(), llvm::VPInstructionWithType::execute(), llvm::VPPhi::execute(), llvm::VPWidenRecipe::execute(), llvm::VPWidenCastRecipe::execute(), llvm::VPWidenIntrinsicRecipe::execute(), llvm::VPWidenCallRecipe::execute(), llvm::VPWidenSelectRecipe::execute(), llvm::VPWidenGEPRecipe::execute(), llvm::VPVectorEndPointerRecipe::execute(), llvm::VPVectorPointerRecipe::execute(), llvm::VPWidenPHIRecipe::execute(), llvm::VPFirstOrderRecurrencePHIRecipe::execute(), llvm::VPReductionPHIRecipe::execute(), llvm::VPReductionRecipe::execute(), llvm::VPPartialReductionRecipe::execute(), llvm::VPReductionEVLRecipe::execute(), llvm::VPReplicateRecipe::execute(), llvm::VPPredInstPHIRecipe::execute(), llvm::VPWidenLoadRecipe::execute(), llvm::VPWidenLoadEVLRecipe::execute(), llvm::VPActiveLaneMaskPHIRecipe::execute(), llvm::VPWidenCanonicalIVRecipe::execute(), llvm::VPDerivedIVRecipe::execute(), llvm::VPScalarIVStepsRecipe::execute(), get(), scalarizeInstruction(), and set().
Set the generated scalar V
for Def
and the given Lane
.
Definition at line 267 of file VPlanHelpers.h.
References assert(), Data, Lane, VF, and llvm::VPTransformState::DataState::VPV2Scalars.
void VPTransformState::setDebugLocFrom | ( | DebugLoc | DL | ) |
Set the debug location in the builder using the debug location DL
.
Definition at line 371 of file VPlan.cpp.
References Builder, llvm::DILocation::cloneByMultiplyingDuplicationFactor(), llvm::dbgs(), DL, llvm::EnableFSDiscriminator, llvm::IRBuilderBase::GetInsertBlock(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::BasicBlock::getParent(), llvm::VPlan::getUF(), LLVM_DEBUG, Plan, llvm::IRBuilderBase::SetCurrentDebugLocation(), llvm::Function::shouldEmitDebugInfoForProfiling(), and VF.
Referenced by llvm::VPInstructionWithType::execute(), llvm::VPPhi::execute(), llvm::VPBasicBlock::executeRecipes(), and scalarizeInstruction().
AssumptionCache* llvm::VPTransformState::AC |
Hold a pointer to AssumptionCache to register new assumptions after replicating assume calls.
Definition at line 325 of file VPlanHelpers.h.
Referenced by scalarizeInstruction().
IRBuilderBase& llvm::VPTransformState::Builder |
Hold a reference to the IRBuilder used to generate output IR code.
Definition at line 328 of file VPlanHelpers.h.
Referenced by createCondBranch(), llvm::VPInstruction::execute(), llvm::VPInstructionWithType::execute(), llvm::VPPhi::execute(), llvm::VPIRInstruction::execute(), llvm::VPIRPhi::execute(), llvm::VPWidenRecipe::execute(), llvm::VPWidenCastRecipe::execute(), llvm::VPWidenIntrinsicRecipe::execute(), llvm::VPWidenCallRecipe::execute(), llvm::VPHistogramRecipe::execute(), llvm::VPWidenSelectRecipe::execute(), llvm::VPWidenGEPRecipe::execute(), llvm::VPVectorEndPointerRecipe::execute(), llvm::VPVectorPointerRecipe::execute(), llvm::VPWidenPHIRecipe::execute(), llvm::VPFirstOrderRecurrencePHIRecipe::execute(), llvm::VPInterleaveRecipe::execute(), llvm::VPReductionRecipe::execute(), llvm::VPPartialReductionRecipe::execute(), llvm::VPReductionEVLRecipe::execute(), llvm::VPBranchOnMaskRecipe::execute(), llvm::VPPredInstPHIRecipe::execute(), llvm::VPWidenLoadRecipe::execute(), llvm::VPWidenLoadEVLRecipe::execute(), llvm::VPWidenStoreRecipe::execute(), llvm::VPWidenStoreEVLRecipe::execute(), llvm::VPActiveLaneMaskPHIRecipe::execute(), llvm::VPDerivedIVRecipe::execute(), llvm::VPScalarIVStepsRecipe::execute(), llvm::VPBasicBlock::execute(), llvm::VPIRBasicBlock::execute(), get(), packScalarIntoVectorizedValue(), scalarizeInstruction(), and setDebugLocFrom().
struct llvm::VPTransformState::CFGState llvm::VPTransformState::CFG |
Referenced by llvm::VPBasicBlock::connectToPredecessors(), createCondBranch(), llvm::VPPhi::execute(), llvm::VPIRPhi::execute(), llvm::VPFirstOrderRecurrencePHIRecipe::execute(), llvm::VPReductionPHIRecipe::execute(), llvm::VPBranchOnMaskRecipe::execute(), llvm::VPActiveLaneMaskPHIRecipe::execute(), llvm::VPWidenCanonicalIVRecipe::execute(), llvm::VPlan::execute(), llvm::VPBasicBlock::execute(), llvm::VPIRBasicBlock::execute(), llvm::LoopVectorizationPlanner::executePlan(), llvm::VPBasicBlock::executeRecipes(), llvm::InnerLoopVectorizer::fixNonInductionPHIs(), and llvm::InnerLoopVectorizer::fixVectorizedLoop().
Loop* llvm::VPTransformState::CurrentParentLoop = nullptr |
The parent loop object for the current scope, or nullptr.
Definition at line 334 of file VPlanHelpers.h.
Referenced by llvm::VPBasicBlock::connectToPredecessors(), llvm::VPReductionPHIRecipe::execute(), and llvm::VPBasicBlock::execute().
struct llvm::VPTransformState::DataState llvm::VPTransformState::Data |
Referenced by get(), hasScalarValue(), hasVectorValue(), reset(), and set().
std::optional<VPLane> llvm::VPTransformState::Lane |
Hold the index to generate specific scalar instructions.
Null indicates that all instances are to be generated, using either scalar or vector instructions.
Definition at line 219 of file VPlanHelpers.h.
Referenced by llvm::VPInstruction::execute(), llvm::VPInterleaveRecipe::execute(), llvm::VPReductionRecipe::execute(), llvm::VPReductionEVLRecipe::execute(), llvm::VPReplicateRecipe::execute(), llvm::VPBranchOnMaskRecipe::execute(), llvm::VPPredInstPHIRecipe::execute(), llvm::VPDerivedIVRecipe::execute(), llvm::VPScalarIVStepsRecipe::execute(), llvm::VPBasicBlock::execute(), llvm::VPRegionBlock::execute(), get(), hasScalarValue(), packScalarIntoVectorizedValue(), reset(), and set().
LoopInfo* llvm::VPTransformState::LI |
Hold a pointer to LoopInfo to register new basic blocks in the loop.
Definition at line 321 of file VPlanHelpers.h.
Referenced by llvm::VPBasicBlock::connectToPredecessors(), and llvm::VPBasicBlock::execute().
VPlan* llvm::VPTransformState::Plan |
Pointer to the VPlan code is generated for.
Definition at line 331 of file VPlanHelpers.h.
Referenced by llvm::VPBasicBlock::connectToPredecessors(), llvm::InnerLoopVectorizer::fixVectorizedLoop(), and setDebugLocFrom().
const TargetTransformInfo* llvm::VPTransformState::TTI |
Target Transform Info.
Definition at line 211 of file VPlanHelpers.h.
Referenced by llvm::VPWidenIntrinsicRecipe::execute().
VPTypeAnalysis llvm::VPTransformState::TypeAnalysis |
VPlan-based type analysis.
Definition at line 337 of file VPlanHelpers.h.
Referenced by llvm::VPPhi::execute(), llvm::VPWidenRecipe::execute(), llvm::VPPredInstPHIRecipe::execute(), and scalarizeInstruction().
ElementCount llvm::VPTransformState::VF |
The chosen Vectorization Factor of the loop being vectorized.
Definition at line 214 of file VPlanHelpers.h.
Referenced by llvm::VPInstruction::execute(), llvm::VPInstructionWithType::execute(), llvm::VPIRPhi::execute(), llvm::VPWidenRecipe::execute(), llvm::VPWidenCastRecipe::execute(), llvm::VPWidenIntrinsicRecipe::execute(), llvm::VPWidenCallRecipe::execute(), llvm::VPWidenGEPRecipe::execute(), llvm::VPVectorEndPointerRecipe::execute(), llvm::VPVectorPointerRecipe::execute(), llvm::VPFirstOrderRecurrencePHIRecipe::execute(), llvm::VPReductionPHIRecipe::execute(), llvm::VPInterleaveRecipe::execute(), llvm::VPReductionRecipe::execute(), llvm::VPReductionEVLRecipe::execute(), llvm::VPReplicateRecipe::execute(), llvm::VPWidenLoadRecipe::execute(), llvm::VPWidenLoadEVLRecipe::execute(), llvm::VPWidenStoreEVLRecipe::execute(), llvm::VPWidenCanonicalIVRecipe::execute(), llvm::VPScalarIVStepsRecipe::execute(), llvm::VPlan::execute(), llvm::VPRegionBlock::execute(), get(), llvm::VPUnrollPartAccessor< 1 >::getUnrollPart(), hasScalarValue(), packScalarIntoVectorizedValue(), reset(), set(), and setDebugLocFrom().
VPDominatorTree llvm::VPTransformState::VPDT |
VPlan-based dominator tree.
Definition at line 340 of file VPlanHelpers.h.
Referenced by llvm::VPBasicBlock::connectToPredecessors(), llvm::VPlan::execute(), llvm::VPBasicBlock::execute(), llvm::LoopVectorizationPlanner::executePlan(), and llvm::InnerLoopVectorizer::fixVectorizedLoop().