Lines Matching defs:VPlan

1 //===- VPlan.h - Represent A Vectorizer Plan --------------------*- C++ -*-===//
19 /// 5. The VPlan class holding a candidate for vectorization;
64 class VPlan;
147 using VPlanPtr = std::unique_ptr<VPlan>;
253 /// VPTransformState holds information passed down when "executing" a VPlan,
258 InnerLoopVectorizer *ILV, VPlan *Plan, LLVMContext &Ctx);
414 /// Pointer to the VPlan code is generated for.
415 VPlan *Plan;
431 /// VPlan-based type analysis.
455 /// VPlan containing the block. Can only be set on the entry block of the
457 VPlan *Plan = nullptr;
513 VPlan *getPlan();
514 const VPlan *getPlan() const;
517 /// entry block into the VPlan.
518 void setPlan(VPlan *ParentPlan);
645 /// VPBlockBase, thereby "executing" the VPlan.
674 /// Note that the numbering is applied to the whole VPlan, so printing
675 /// individual blocks is consistent with the whole VPlan printing.
679 /// Print plain-text dump of this VPlan to \p O.
699 /// A value that is used outside the VPlan. The operand of the user needs to be
700 /// added to the associated phi node. The incoming block from VPlan is
719 void fixPhi(VPlan &Plan, VPTransformState &State);
749 /// fallback until computing the cost of all recipes migrates to VPlan.
793 /// this VPRecipe, thereby "executing" the VPlan.
1162 // TODO(gep_nowrap): Track the full GEPNoWrapFlags in VPlan.
1225 /// This is a concrete Recipe that models a single VPlan-level instruction.
1233 /// VPlan opcodes, extending LLVM IR with idiomatics instructions.
1243 /// Creates a scalar phi in a leaf VPBB with a single predecessor in VPlan.
1244 /// The first operand is the incoming value from the predecessor in VPlan,
1246 /// (which are currently not modeled in VPlan).
1892 /// In the VPlan native path, all incoming VPValues & VPBasicBlock pairs are
1895 /// List of incoming blocks. Only used in the VPlan native path.
3036 assert(!Recipe->Parent && "Recipe already in VPlan");
3046 /// this VPBasicBlock, thereby "executing" the VPlan.
3073 /// Note that the numbering is applied to the whole VPlan, so printing
3074 /// individual blocks is consistent with the whole VPlan printing.
3110 /// Note: At the moment, VPIRBasicBlock can only be used to wrap VPlan's
3128 /// this VPBasicBlock, thereby "executing" the VPlan.
3223 /// this VPRegionBlock, thereby "executing" the VPlan.
3236 /// Note that the numbering is applied to the whole VPlan, so printing
3237 /// individual regions is consistent with the whole VPlan printing.
3248 /// VPlan models a candidate for vectorization, encoding various decisions take
3250 /// output IR instructions to generate, and their cost. VPlan holds a
3253 class VPlan {
3257 /// Hold the single entry to the Hierarchical CFG of the VPlan, i.e. the
3263 /// rest of VPlan execution.
3266 /// Holds the VFs applicable to this VPlan.
3269 /// Holds the UFs applicable to this VPlan. If empty, the VPlan is valid for
3273 /// Holds the name of the VPlan, for printing.
3291 /// VPlan.
3294 /// Contains all the external definitions created for this VPlan. External
3299 /// live-out that is fixed outside VPlan needs to be removed. The remaining
3305 /// been modeled in VPlan directly.
3309 /// Construct a VPlan with original preheader \p Preheader, trip count \p TC
3312 /// VPlan.
3313 VPlan(VPBasicBlock *Preheader, VPValue *TC, VPBasicBlock *Entry)
3314 : VPlan(Preheader, Entry) {
3318 /// Construct a VPlan with original preheader \p Preheader and \p Entry to
3321 /// VPlan.
3322 VPlan(VPBasicBlock *Preheader, VPBasicBlock *Entry)
3331 ~VPlan();
3333 /// Create initial VPlan, having an "entry" VPBasicBlock (wrapping
3349 /// Generate the IR code for this VPlan.
3364 /// Resets the trip count for the VPlan. The caller must make sure all uses of
3427 assert(!Value2VPValue.count(V) && "Value already exists in VPlan");
3431 assert(Value2VPValue.count(V) && "Value does not exist in VPlan");
3441 /// Print the live-ins of this VPlan to \p O.
3444 /// Print this VPlan to \p O.
3447 /// Print this VPlan in DOT format to \p O.
3466 // VPlan native path.
3496 /// Clone the current VPlan, update all VPValues of the new VPlan and cloned
3498 VPlan *duplicate();
3502 /// VPlanPrinter prints a given VPlan to a given output stream. The printing is
3506 const VPlan &Plan;
3545 VPlanPrinter(raw_ostream &O, const VPlan &P)
3564 inline raw_ostream &operator<<(raw_ostream &OS, const VPlan &Plan) {
3571 // VPlan Utilities
3574 /// Class that provides utilities for VPBlockBases in VPlan.
3666 /// Recursively \p Region and populate VPlan based interleave groups based on
3670 /// Recursively traverse \p Block and populate VPlan based interleave groups
3676 VPInterleavedAccessInfo(VPlan &Plan, InterleavedAccessInfo &IAI);
3696 /// Class that maps (parts of) an existing VPlan to trees of combined
3722 /// Mapping of values in the original VPlan to a combined VPInstruction.
3804 VPValue *getOrCreateVPValueForSCEVExpr(VPlan &Plan, const SCEV *Expr,
3825 bool isHeaderMask(VPValue *V, VPlan &Plan);