Lines Matching defs:VPRecipeBase
13 /// 2. Pure virtual VPRecipeBase serving as the base class for recipes contained
357 BasicBlock *getPreheaderBBFor(VPRecipeBase *R);
704 /// VPRecipeBase is a base class modeling a sequence of one or more output IR
705 /// instructions. VPRecipeBase owns the VPValues it defines through VPDef
708 /// VPRecipeBase and VPValue separately.
709 class VPRecipeBase : public ilist_node_with_parent<VPRecipeBase, VPBasicBlock>,
722 VPRecipeBase(const unsigned char SC, ArrayRef<VPValue *> Operands,
727 VPRecipeBase(const unsigned char SC, iterator_range<IterT> Operands,
730 virtual ~VPRecipeBase() = default;
733 virtual VPRecipeBase *clone() = 0;
750 void insertBefore(VPRecipeBase *InsertPos);
753 void insertBefore(VPBasicBlock &BB, iplist<VPRecipeBase>::iterator IP);
757 void insertAfter(VPRecipeBase *InsertPos);
761 void moveAfter(VPRecipeBase *MovePos);
766 void moveBefore(VPBasicBlock &BB, iplist<VPRecipeBase>::iterator I);
775 iplist<VPRecipeBase>::iterator eraseFromParent();
825 auto *R = dyn_cast<VPRecipeBase>(U); \
828 static inline bool classof(const VPRecipeBase *R) { \
837 /// Note that VPRecipeBase must be inherited from before VPValue.
838 class VPSingleDefRecipe : public VPRecipeBase, public VPValue {
842 : VPRecipeBase(SC, Operands, DL), VPValue(this) {}
846 : VPRecipeBase(SC, Operands, DL), VPValue(this) {}
851 : VPRecipeBase(SC, Operands, DL), VPValue(this, UV) {}
853 static inline bool classof(const VPRecipeBase *R) {
855 case VPRecipeBase::VPDerivedIVSC:
856 case VPRecipeBase::VPEVLBasedIVPHISC:
857 case VPRecipeBase::VPExpandSCEVSC:
858 case VPRecipeBase::VPInstructionSC:
859 case VPRecipeBase::VPReductionEVLSC:
860 case VPRecipeBase::VPReductionSC:
861 case VPRecipeBase::VPReplicateSC:
862 case VPRecipeBase::VPScalarIVStepsSC:
863 case VPRecipeBase::VPVectorPointerSC:
864 case VPRecipeBase::VPReverseVectorPointerSC:
865 case VPRecipeBase::VPWidenCallSC:
866 case VPRecipeBase::VPWidenCanonicalIVSC:
867 case VPRecipeBase::VPWidenCastSC:
868 case VPRecipeBase::VPWidenGEPSC:
869 case VPRecipeBase::VPWidenIntrinsicSC:
870 case VPRecipeBase::VPWidenSC:
871 case VPRecipeBase::VPWidenEVLSC:
872 case VPRecipeBase::VPWidenSelectSC:
873 case VPRecipeBase::VPBlendSC:
874 case VPRecipeBase::VPPredInstPHISC:
875 case VPRecipeBase::VPCanonicalIVPHISC:
876 case VPRecipeBase::VPActiveLaneMaskPHISC:
877 case VPRecipeBase::VPFirstOrderRecurrencePHISC:
878 case VPRecipeBase::VPWidenPHISC:
879 case VPRecipeBase::VPWidenIntOrFpInductionSC:
880 case VPRecipeBase::VPWidenPointerInductionSC:
881 case VPRecipeBase::VPReductionPHISC:
882 case VPRecipeBase::VPScalarCastSC:
883 case VPRecipeBase::VPPartialReductionSC:
885 case VPRecipeBase::VPBranchOnMaskSC:
886 case VPRecipeBase::VPInterleaveSC:
887 case VPRecipeBase::VPIRInstructionSC:
888 case VPRecipeBase::VPWidenLoadEVLSC:
889 case VPRecipeBase::VPWidenLoadSC:
890 case VPRecipeBase::VPWidenStoreEVLSC:
891 case VPRecipeBase::VPWidenStoreSC:
892 case VPRecipeBase::VPHistogramSC:
901 auto *R = dyn_cast<VPRecipeBase>(U);
1055 static inline bool classof(const VPRecipeBase *R) {
1056 return R->getVPDefID() == VPRecipeBase::VPInstructionSC ||
1057 R->getVPDefID() == VPRecipeBase::VPWidenSC ||
1058 R->getVPDefID() == VPRecipeBase::VPWidenEVLSC ||
1059 R->getVPDefID() == VPRecipeBase::VPWidenGEPSC ||
1060 R->getVPDefID() == VPRecipeBase::VPWidenCastSC ||
1061 R->getVPDefID() == VPRecipeBase::VPReplicateSC ||
1062 R->getVPDefID() == VPRecipeBase::VPReverseVectorPointerSC ||
1063 R->getVPDefID() == VPRecipeBase::VPVectorPointerSC;
1067 auto *R = dyn_cast<VPRecipeBase>(U);
1377 class VPIRInstruction : public VPRecipeBase {
1382 : VPRecipeBase(VPDef::VPIRInstructionSC, ArrayRef<VPValue *>()), I(I) {}
1459 static inline bool classof(const VPRecipeBase *R) {
1460 return R->getVPDefID() == VPRecipeBase::VPWidenSC ||
1461 R->getVPDefID() == VPRecipeBase::VPWidenEVLSC;
1465 auto *R = dyn_cast<VPRecipeBase>(U);
1783 class VPHistogramRecipe : public VPRecipeBase {
1791 : VPRecipeBase(VPDef::VPHistogramSC, Operands, DL), Opcode(Opcode) {}
2046 static inline bool classof(const VPRecipeBase *B) {
2052 return B && B->getVPDefID() >= VPRecipeBase::VPFirstHeaderPHISC &&
2053 B->getVPDefID() <= VPRecipeBase::VPLastHeaderPHISC;
2087 virtual VPRecipeBase &getBackedgeRecipe() {
2106 static inline bool classof(const VPRecipeBase *R) {
2117 return classof(static_cast<const VPRecipeBase *>(R));
2138 VPRecipeBase &getBackedgeRecipe() override {
2566 class VPInterleaveRecipe : public VPRecipeBase {
2581 : VPRecipeBase(VPDef::VPInterleaveSC, {Addr}), IG(IG),
2696 static inline bool classof(const VPRecipeBase *R) {
2697 return R->getVPDefID() == VPRecipeBase::VPReductionSC ||
2698 R->getVPDefID() == VPRecipeBase::VPReductionEVLSC;
2702 auto *R = dyn_cast<VPRecipeBase>(U);
2859 class VPBranchOnMaskRecipe : public VPRecipeBase {
2862 : VPRecipeBase(VPDef::VPBranchOnMaskSC, {}) {
2955 class VPWidenMemoryRecipe : public VPRecipeBase {
2979 : VPRecipeBase(SC, Operands, DL), Ingredient(I), Consecutive(Consecutive),
2989 static inline bool classof(const VPRecipeBase *R) {
2990 return R->getVPDefID() == VPRecipeBase::VPWidenLoadSC ||
2991 R->getVPDefID() == VPRecipeBase::VPWidenStoreSC ||
2992 R->getVPDefID() == VPRecipeBase::VPWidenLoadEVLSC ||
2993 R->getVPDefID() == VPRecipeBase::VPWidenStoreEVLSC;
2997 auto *R = dyn_cast<VPRecipeBase>(U);
3545 VPBasicBlock(const Twine &Name = "", VPRecipeBase *Recipe = nullptr)
3552 using RecipeListTy = iplist<VPRecipeBase>;
3588 inline const VPRecipeBase &front() const { return Recipes.front(); }
3589 inline VPRecipeBase &front() { return Recipes.front(); }
3590 inline const VPRecipeBase &back() const { return Recipes.back(); }
3591 inline VPRecipeBase &back() { return Recipes.back(); }
3597 static RecipeListTy VPBasicBlock::*getSublistAccess(VPRecipeBase *) {
3607 void insert(VPRecipeBase *Recipe, iterator InsertPt) {
3616 void appendRecipe(VPRecipeBase *Recipe) { insert(Recipe, end()); }
3654 VPRecipeBase *getTerminator();
3655 const VPRecipeBase *getTerminator() const;
4101 VPRecipeBase *Recipe = nullptr) {