-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[mlir][vector] Disable from_elements
for scalable vectors
#117868
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[mlir][vector] Disable from_elements
for scalable vectors
#117868
Conversation
Disables `vector.from_elements` for scalable vectors. Given that the length of scalable vectors is unknown at compile time, the semantics of this Op are unclear in this context.
@llvm/pr-subscribers-mlir-vector @llvm/pr-subscribers-mlir Author: Andrzej Warzyński (banach-space) ChangesDisables Full diff: https://github.com/llvm/llvm-project/pull/117868.diff 2 Files Affected:
diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
index 88c1b94412241e..a1c2dad8c2b8b3 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
@@ -806,10 +806,12 @@ def Vector_FromElementsOp : Vector_Op<"from_elements", [
// [[[%f1, %f2]], [[%f3, %f4]], [[%f5, %f6]]]
%3 = vector.from_elements %f1, %f2, %f3, %f4, %f5, %f6 : vector<3x1x2xf32>
```
+
+ Note, scalable vectors are not supported.
}];
let arguments = (ins Variadic<AnyType>:$elements);
- let results = (outs AnyVectorOfAnyRank:$result);
+ let results = (outs AnyFixedVectorOfAnyRank:$result);
let assemblyFormat = "$elements attr-dict `:` type($result)";
let hasCanonicalizer = 1;
}
diff --git a/mlir/test/Dialect/Vector/invalid.mlir b/mlir/test/Dialect/Vector/invalid.mlir
index 00aea3b42841a5..c244fe7df3e94b 100644
--- a/mlir/test/Dialect/Vector/invalid.mlir
+++ b/mlir/test/Dialect/Vector/invalid.mlir
@@ -1803,6 +1803,14 @@ func.func @invalid_from_elements(%a: f32, %b: i32) {
// -----
+func.func @invalid_from_elements_scalable(%a: f32, %b: i32) {
+ // expected-error @+1 {{'result' must be fixed-length vector of any type values, but got 'vector<[2]xf32>'}}
+ vector.from_elements %a, %b : vector<[2]xf32>
+ return
+}
+
+// -----
+
func.func @invalid_step_0d() {
// expected-error @+1 {{vector.step' op result #0 must be vector of index values of ranks 1, but got 'vector<f32>'}}
vector.step : vector<f32>
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
I didn't realize we have this op in the vector dialect, I haven't seen it used anywhere |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
It's a very recent addition: That might explain why we haven’t seen it used much yet. |
Disables
vector.from_elements
for scalable vectors. Given that thelength of scalable vectors is unknown at compile time, the semantics of
this Op are unclear in this context.