[Mlir-commits] [mlir] [mlir][vector] Add verification for incorrect vector.extract (PR #115824)
Andrzej WarzyĆski
llvmlistbot at llvm.org
Wed Nov 13 04:48:31 PST 2024
================
@@ -1339,6 +1339,50 @@ bool ExtractOp::isCompatibleReturnTypes(TypeRange l, TypeRange r) {
return l == r;
}
+// Common verification rules for `InsertOp` and `ExtractOp` involving indices.
+// `indexedType` is the vector type being indexed in the operation, i.e., the
+// destination type in InsertOp and the source type in ExtractOp.
+// `vecOrScalarType` is the type that is not indexed in the op and can be
+// either a scalar or a vector, i.e., the source type in InsertOp and the
+// return type in ExtractOp.
+static LogicalResult verifyInsertExtractIndices(Operation *op,
+ VectorType indexedType,
+ int64_t numIndices,
+ Type vecOrScalarType) {
+ int64_t indexedRank = indexedType.getRank();
+ if (numIndices > indexedRank)
+ return op->emitOpError(
+ "expected a number of indices no greater than the indexed vector rank");
+
+ if (auto nonIndexedVecType = dyn_cast<VectorType>(vecOrScalarType)) {
+ // Vector case, including:
+ // * 0-D vector:
+ // * vector.extract %src[2]: vector<f32> from vector<8xf32)
----------------
banach-space wrote:
This particular comment seems inconsistent with the following test that's added in this PR:
```mlir
func.func @extract_from_1d_to_0d(%arg0: vector<1xf32>) {
// expected-error at +2 {{'vector.extract' op inferred type(s) 'f32' are incompatible with return type(s) of operation 'vector<f32>'}}
// expected-error at +1 {{failed to infer returned types}}
%4 = vector.extract %arg0[0] : vector<f32> from vector<1xf32>
}
```
https://github.com/llvm/llvm-project/pull/115824
More information about the Mlir-commits
mailing list