[Mlir-commits] [mlir] [mlir][vector] Add build method for vector.to_elements (PR #145114)
James Newling
llvmlistbot at llvm.org
Fri Jun 20 15:54:47 PDT 2025
https://github.com/newling updated https://github.com/llvm/llvm-project/pull/145114
>From 8c4d2014f86c44adf379dbf1641851d7a6476f94 Mon Sep 17 00:00:00 2001
From: James Newling <james.newling at gmail.com>
Date: Fri, 20 Jun 2025 15:44:40 -0700
Subject: [PATCH 1/2] add to_elements builder that infers the scalar type(s)
---
mlir/include/mlir/Dialect/Vector/IR/VectorOps.td | 11 +++++++++--
mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 8 ++++++++
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
index aef156c5f1d05..fc99a8e30ef1f 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
@@ -798,7 +798,7 @@ def Vector_ToElementsOp : Vector_Op<"to_elements", [
This operation decomposes all the scalar elements from a vector. The
decomposed scalar elements are returned in row-major order. The number of
scalar results must match the number of elements in the input vector type.
- All the result elements have the same result type, which must match the
+ All the result elements have the same type, which must match the
element type of the input vector. Scalable vectors are not supported.
Examples:
@@ -813,7 +813,7 @@ def Vector_ToElementsOp : Vector_Op<"to_elements", [
// %0#0 = %v1[0]
// %0#1 = %v1[1]
- // Decompose a 2-D.
+ // Decompose a 2-D vector.
%0:6 = vector.to_elements %v2 : vector<2x3xf32>
// %0#0 = %v2[0, 0]
// %0#1 = %v2[0, 1]
@@ -835,6 +835,13 @@ def Vector_ToElementsOp : Vector_Op<"to_elements", [
let arguments = (ins AnyVectorOfAnyRank:$source);
let results = (outs Variadic<AnyType>:$elements);
+
+
+ let builders = [
+ // Build method that infers the result types from `elements`.
+ OpBuilder<(ins "Value":$elements)>,
+ ];
+
let assemblyFormat = "$source attr-dict `:` type($source)";
let hasFolder = 1;
}
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 6f0ac6bb58282..a2921d3c89d14 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -2417,6 +2417,14 @@ LogicalResult ToElementsOp::fold(FoldAdaptor adaptor,
return foldToElementsFromElements(*this, results);
}
+void vector::ToElementsOp::build(OpBuilder &builder, OperationState &result, Value elements) {
+ auto vectorType = cast<VectorType>(elements.getType());
+ Type elementType = vectorType.getElementType();
+ int64_t nbElements = vectorType.getNumElements();
+ SmallVector<Type> scalarTypes(nbElements, elementType);
+ build(builder, result, scalarTypes, elements);
+}
+
//===----------------------------------------------------------------------===//
// FromElementsOp
//===----------------------------------------------------------------------===//
>From cb8453bc2e234184066012a32606e7bb5453eb07 Mon Sep 17 00:00:00 2001
From: James Newling <james.newling at gmail.com>
Date: Fri, 20 Jun 2025 15:55:36 -0700
Subject: [PATCH 2/2] clang-format
---
mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index a2921d3c89d14..cd0516c80377b 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -2417,7 +2417,8 @@ LogicalResult ToElementsOp::fold(FoldAdaptor adaptor,
return foldToElementsFromElements(*this, results);
}
-void vector::ToElementsOp::build(OpBuilder &builder, OperationState &result, Value elements) {
+void vector::ToElementsOp::build(OpBuilder &builder, OperationState &result,
+ Value elements) {
auto vectorType = cast<VectorType>(elements.getType());
Type elementType = vectorType.getElementType();
int64_t nbElements = vectorType.getNumElements();
More information about the Mlir-commits
mailing list