[llvm-branch-commits] [llvm] [LV][REVEC] Initial support for re-vectorisation (PR #208213)

Andrei Elovikov via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Aug 13 11:54:14 PDT 2026


=?utf-8?q?Gaëtan?= Bossu <gaetan.bossu at arm.com>,
=?utf-8?q?Gaëtan?= Bossu <gaetan.bossu at arm.com>,
=?utf-8?q?Gaëtan?= Bossu <gaetan.bossu at arm.com>,
=?utf-8?q?Gaëtan?= Bossu <gaetan.bossu at arm.com>,
=?utf-8?q?Gaëtan?= Bossu <gaetan.bossu at arm.com>,
=?utf-8?q?Gaëtan?= Bossu <gaetan.bossu at arm.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/208213 at github.com>


================
@@ -14,19 +14,40 @@
 
 namespace llvm {
 
-/// A helper function for converting Scalar types to vector types. If
+/// A helper function for converting scalar or vector types to vector types. If
 /// the incoming type is void, we return void. If the EC represents a
-/// scalar, we return the scalar type.
+/// scalar, we return the input type. For vector inputs, the existing vector
+/// element count is multiplied by EC.
 inline Type *toVectorTy(Type *Scalar, ElementCount EC) {
   if (Scalar->isVoidTy() || Scalar->isMetadataTy() || EC.isScalar())
     return Scalar;
+  if (auto *VTy = dyn_cast<VectorType>(Scalar)) {
+    assert(!(VTy->getElementCount().isScalable() && EC.isScalable()) &&
+           "Attempt to create <vscale x vscale x N x elt>!");
+
+    if (auto *FVTy = dyn_cast<FixedVectorType>(VTy))
+      return VectorType::get(VTy->getElementType(),
+                             EC * FVTy->getNumElements());
+
+    return VectorType::get(VTy->getElementType(),
+                           VTy->getElementCount() * EC.getKnownMinValue());
----------------
eas wrote:

What is the reason to even support such scenario?

https://github.com/llvm/llvm-project/pull/208213


More information about the llvm-branch-commits mailing list