[llvm] [LV][EVL] Support call instruction with EVL-vectorization (PR #110412)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 8 01:05:37 PDT 2024
================
@@ -1665,6 +1689,74 @@ class VPWidenCallRecipe : public VPSingleDefRecipe {
#endif
};
+/// A recipe for widening Call instructions with vector-predication intrinsics
+/// with explicit vector length (EVL).
+class VPWidenCallEVLRecipe : public VPWidenCallRecipe {
+ // using VPRecipeWithIRFlags::transferFlags;
+ // Intrinsic::ID VectorIntrinsicID;
+
+public:
+ template <typename IterT>
+ VPWidenCallEVLRecipe(Value *UV, iterator_range<IterT> CallArguments,
+ Intrinsic::ID VectorIntrinsicID, DebugLoc DL,
+ VPValue &EVL)
+ : VPWidenCallRecipe(VPDef::VPWidenCallEVLSC, UV, CallArguments,
+ VectorIntrinsicID, DL) {
+ addOperand(&EVL);
+ }
+
+ VPWidenCallEVLRecipe(VPWidenCallRecipe &W, Intrinsic::ID VectorIntrinsicID,
+ DebugLoc DL, VPValue &EVL)
+ : VPWidenCallEVLRecipe(W.getUnderlyingValue(), W.operands(),
+ VectorIntrinsicID, DL, EVL) {}
+
+ ~VPWidenCallEVLRecipe() override = default;
+
+ VPWidenCallEVLRecipe *clone() override {
+ llvm_unreachable("VPWidenCallEVLRecipe cannot be cloned");
+ return nullptr;
+ }
+
+ VPValue *getEVL() { return getOperand(getNumOperands() - 1); }
+ const VPValue *getEVL() const { return getOperand(getNumOperands() - 1); }
+
+ // Intrinsic::ID getVectorIntrinsicID() {
+ // return VectorIntrinsicID;
+ // }
----------------
LiqinWeng wrote:
Implemented on this #110489
https://github.com/llvm/llvm-project/pull/110412
More information about the llvm-commits
mailing list