LLVM 18.0.0git
Static Public Member Functions | List of all members
llvm::VPlanTransforms Struct Reference

#include "Transforms/Vectorize/VPlanTransforms.h"

Static Public Member Functions

static void VPInstructionsToVPRecipes (VPlanPtr &Plan, function_ref< const InductionDescriptor *(PHINode *)> GetIntOrFpInductionDescriptor, ScalarEvolution &SE, const TargetLibraryInfo &TLI)
 Replaces the VPInstructions in Plan with corresponding widen recipes.
 
static bool adjustFixedOrderRecurrences (VPlan &Plan, VPBuilder &Builder)
 Sink users of fixed-order recurrences after the recipe defining their previous value.
 
static void clearReductionWrapFlags (VPlan &Plan)
 Clear NSW/NUW flags from reduction instructions if necessary.
 
static void optimizeForVFAndUF (VPlan &Plan, ElementCount BestVF, unsigned BestUF, PredicatedScalarEvolution &PSE)
 Optimize Plan based on BestVF and BestUF.
 
static void optimize (VPlan &Plan, ScalarEvolution &SE)
 Apply VPlan-to-VPlan optimizations to Plan, including induction recipe optimizations, dead recipe removal, replicate region optimizations and block merging.
 
static void createAndOptimizeReplicateRegions (VPlan &Plan)
 Wrap predicated VPReplicateRecipes with a mask operand in an if-then region block and remove the mask operand.
 
static void addActiveLaneMask (VPlan &Plan, bool UseActiveLaneMaskForControlFlow, bool DataAndControlFlowWithoutRuntimeCheck)
 Replace (ICMP_ULE, wide canonical IV, backedge-taken-count) checks with an (active-lane-mask recipe, wide canonical IV, trip-count).
 
static void truncateToMinimalBitwidths (VPlan &Plan, const MapVector< Instruction *, uint64_t > &MinBWs, LLVMContext &Ctx)
 Insert truncates and extends for any truncated recipe.
 

Detailed Description

Definition at line 31 of file VPlanTransforms.h.

Member Function Documentation

◆ addActiveLaneMask()

void VPlanTransforms::addActiveLaneMask ( VPlan Plan,
bool  UseActiveLaneMaskForControlFlow,
bool  DataAndControlFlowWithoutRuntimeCheck 
)
static

Replace (ICMP_ULE, wide canonical IV, backedge-taken-count) checks with an (active-lane-mask recipe, wide canonical IV, trip-count).

If UseActiveLaneMaskForControlFlow is true, introduce an VPActiveLaneMaskPHIRecipe. If DataAndControlFlowWithoutRuntimeCheck is true, no minimum-iteration runtime check will be created (during skeleton creation) and instead it is handled using active-lane-mask. DataAndControlFlowWithoutRuntimeCheck implies UseActiveLaneMaskForControlFlow.

Definition at line 1110 of file VPlanTransforms.cpp.

References llvm::VPInstruction::ActiveLaneMask, addVPLaneMaskPhiAndUpdateExitBranch(), assert(), llvm::DataAndControlFlowWithoutRuntimeCheck, llvm::find_if(), llvm::VPlan::getCanonicalIV(), llvm::VPlan::getOrCreateBackedgeTakenCount(), llvm::VPlan::getTripCount(), llvm::VPDef::getVPSingleValue(), llvm::CmpInst::ICMP_ULE, llvm::VPRecipeBase::insertAfter(), and llvm::VPValue::users().

◆ adjustFixedOrderRecurrences()

bool VPlanTransforms::adjustFixedOrderRecurrences ( VPlan Plan,
VPBuilder Builder 
)
static

Sink users of fixed-order recurrences after the recipe defining their previous value.

Then introduce FirstOrderRecurrenceSplice VPInstructions to combine the value from the recurrence phis and previous values. The current implementation assumes all users can be sunk after the previous value, which is enforced by earlier legality checks.

Returns
true if all users of fixed-order recurrences could be re-arranged as needed or false if it is not possible. In the latter case, Plan is not valid.

Definition at line 707 of file VPlanTransforms.cpp.

References assert(), llvm::VPBuilder::createNaryOp(), llvm::VPInstruction::FirstOrderRecurrenceSplice, llvm::VPRegionBlock::getEntry(), llvm::VPBlockBase::getEntryBasicBlock(), llvm::VPBasicBlock::getFirstNonPhi(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::VPRecipeBase::getParent(), llvm::VPlan::getVectorLoopRegion(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::VPBasicBlock::phis(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::DominatorTreeBase< NodeT, IsPostDom >::recalculate(), llvm::VPBuilder::setInsertPoint(), and sinkRecurrenceUsersAfterPrevious().

◆ clearReductionWrapFlags()

void VPlanTransforms::clearReductionWrapFlags ( VPlan Plan)
static

◆ createAndOptimizeReplicateRegions()

void VPlanTransforms::createAndOptimizeReplicateRegions ( VPlan Plan)
static

Wrap predicated VPReplicateRecipes with a mask operand in an if-then region block and remove the mask operand.

Optimize the created regions by iteratively sinking scalar operands into the region, followed by merging regions until no improvements are remaining.

Definition at line 360 of file VPlanTransforms.cpp.

References addReplicateRegions(), mergeReplicateRegionsIntoSuccessors(), and sinkScalarOperands().

Referenced by optimize().

◆ optimize()

void VPlanTransforms::optimize ( VPlan Plan,
ScalarEvolution SE 
)
static

Apply VPlan-to-VPlan optimizations to Plan, including induction recipe optimizations, dead recipe removal, replicate region optimizations and block merging.

Definition at line 992 of file VPlanTransforms.cpp.

References createAndOptimizeReplicateRegions(), llvm::ScalarEvolution::getContext(), and simplifyRecipes().

◆ optimizeForVFAndUF()

void VPlanTransforms::optimizeForVFAndUF ( VPlan Plan,
ElementCount  BestVF,
unsigned  BestUF,
PredicatedScalarEvolution PSE 
)
static

◆ truncateToMinimalBitwidths()

void VPlanTransforms::truncateToMinimalBitwidths ( VPlan Plan,
const MapVector< Instruction *, uint64_t > &  MinBWs,
LLVMContext Ctx 
)
static

◆ VPInstructionsToVPRecipes()

void VPlanTransforms::VPInstructionsToVPRecipes ( VPlanPtr Plan,
function_ref< const InductionDescriptor *(PHINode *)>  GetIntOrFpInductionDescriptor,
ScalarEvolution SE,
const TargetLibraryInfo TLI 
)
static

The documentation for this struct was generated from the following files: