LLVM 22.0.0git
VPlanConstruction.cpp File Reference

This file implements transforms for initial VPlan construction. More...

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "vplan"

Functions

static bool isHeaderBB (BasicBlock *BB, Loop *L)
static bool canonicalHeaderAndLatch (VPBlockBase *HeaderVPB, const VPDominatorTree &VPDT)
 Checks if HeaderVPB is a loop header block in the plain CFG; that is, it has exactly 2 predecessors (preheader and latch), where the block dominates the latch and the preheader dominates the block.
static void createLoopRegion (VPlan &Plan, VPBlockBase *HeaderVPB)
 Create a new VPRegionBlock for the loop starting at HeaderVPB.
static void addCanonicalIVRecipes (VPlan &Plan, VPBasicBlock *HeaderVPBB, VPBasicBlock *LatchVPBB, Type *IdxTy, DebugLoc DL)
static void createExtractsForLiveOuts (VPlan &Plan, VPBasicBlock *MiddleVPBB)
 Creates extracts for values in Plan defined in a loop region and used outside a loop region.
static void addInitialSkeleton (VPlan &Plan, Type *InductionTy, DebugLoc IVDL, PredicatedScalarEvolution &PSE, Loop *TheLoop)
template<typename MatchT>
static VPRecipeBasefindUserOf (VPValue *V, const MatchT &P)
 If V is used by a recipe matching pattern P, return it.
template<unsigned Opcode>
static VPInstructionfindUserOf (VPValue *V)
 If V is used by a VPInstruction with Opcode, return it.

Variables

static constexpr uint32_t CheckBypassWeights [] = {1, 127}

Detailed Description

This file implements transforms for initial VPlan construction.

Definition in file VPlanConstruction.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "vplan"

Definition at line 28 of file VPlanConstruction.cpp.

Function Documentation

◆ addCanonicalIVRecipes()

◆ addInitialSkeleton()

◆ canonicalHeaderAndLatch()

bool canonicalHeaderAndLatch ( VPBlockBase * HeaderVPB,
const VPDominatorTree & VPDT )
static

Checks if HeaderVPB is a loop header block in the plain CFG; that is, it has exactly 2 predecessors (preheader and latch), where the block dominates the latch and the preheader dominates the block.

If it is a header block return true and canonicalize the predecessors of the header (making sure the preheader appears first and the latch second) and the successors of the latch (making sure the loop exit comes first). Otherwise return false.

Definition at line 377 of file VPlanConstruction.cpp.

References assert(), llvm::VPInstruction::BranchOnCond, llvm::cast(), llvm::DominatorTreeBase< NodeT, IsPostDom >::dominates(), getOpcode(), llvm::VPBlockBase::getPredecessors(), llvm::VPInstruction::Not, llvm::ArrayRef< T >::size(), std::swap(), and llvm::VPBlockBase::swapPredecessors().

Referenced by addInitialSkeleton(), and llvm::VPlanTransforms::createLoopRegions().

◆ createExtractsForLiveOuts()

void createExtractsForLiveOuts ( VPlan & Plan,
VPBasicBlock * MiddleVPBB )
static

Creates extracts for values in Plan defined in a loop region and used outside a loop region.

Definition at line 486 of file VPlanConstruction.cpp.

References assert(), B(), llvm::cast(), llvm::VPlan::getExitBlocks(), and llvm::VPBasicBlock::getFirstNonPhi().

Referenced by addInitialSkeleton().

◆ createLoopRegion()

◆ findUserOf() [1/2]

template<unsigned Opcode>
VPInstruction * findUserOf ( VPValue * V)
static

If V is used by a VPInstruction with Opcode, return it.

Otherwise return nullptr.

Definition at line 841 of file VPlanConstruction.cpp.

References llvm::cast_or_null(), findUserOf(), and llvm::VPlanPatternMatch::m_VPInstruction().

◆ findUserOf() [2/2]

template<typename MatchT>
VPRecipeBase * findUserOf ( VPValue * V,
const MatchT & P )
static

If V is used by a recipe matching pattern P, return it.

Otherwise return nullptr;

Definition at line 834 of file VPlanConstruction.cpp.

References llvm::cast(), llvm::find_if(), llvm::PatternMatch::match_fn(), and P.

Referenced by findUserOf(), llvm::VPlanTransforms::handleMaxMinNumReductions(), and llvm::VPlanTransforms::handleMultiUseReductions().

◆ isHeaderBB()

bool isHeaderBB ( BasicBlock * BB,
Loop * L )
static

Definition at line 91 of file VPlanConstruction.cpp.

Variable Documentation

◆ CheckBypassWeights

uint32_t CheckBypassWeights[] = {1, 127}
staticconstexpr

Definition at line 673 of file VPlanConstruction.cpp.

Referenced by llvm::VPlanTransforms::attachCheckBlock().