[llvm] [LV] Support binary and unary operations with EVL-vectorization (PR #93854)
Kolya Panchenko via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 1 14:23:51 PDT 2024
================
@@ -1405,11 +1407,16 @@ class VPInstruction : public VPRecipeWithIRFlags {
class VPWidenRecipe : public VPRecipeWithIRFlags {
unsigned Opcode;
+protected:
+ template <typename IterT>
+ VPWidenRecipe(unsigned VPDefOpcode, Instruction &I,
+ iterator_range<IterT> Operands)
+ : VPRecipeWithIRFlags(VPDefOpcode, Operands, I), Opcode(I.getOpcode()) {}
+
public:
template <typename IterT>
VPWidenRecipe(Instruction &I, iterator_range<IterT> Operands)
- : VPRecipeWithIRFlags(VPDef::VPWidenSC, Operands, I),
- Opcode(I.getOpcode()) {}
+ : VPWidenRecipe(VPDef::VPWidenSC, I, Operands) {}
----------------
nikolaypanchenko wrote:
I assume than you really meant to introduce base class for `VPWidenRecipe` and `VPWidenEVLRecipe` that will return true for both of them, right ? In this case class hierarchy will be similar to `VPWiden[Load|Store][|EVL]`.
If so, same should go to all future EVL-recipes:
```
VPSomeRecipeBase
/ \
VPSomeRecipe VPSomeEVLRecipe
```
```
VPSomeRecipeBase::classof(...) { return Opcode == VPSomeRecipeSC || Opcode == VPSomeEVLRecipeSC; }
```
https://github.com/llvm/llvm-project/pull/93854
More information about the llvm-commits
mailing list