Skip to content

Commit

Permalink
Useful error when input dim is unused by LHS/RHS.
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D128925
  • Loading branch information
bjacob committed Jun 30, 2022
1 parent b46ad1b commit 030b36a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
5 changes: 3 additions & 2 deletions mlir/lib/Dialect/Vector/IR/VectorOps.cpp
Expand Up @@ -698,8 +698,9 @@ static LogicalResult verifyOutputShape(
extents[pos] = getAffineConstantExpr(v.getShape()[idx], ctx);
}
}
assert(llvm::all_of(extents, [](AffineExpr e) { return e; }) &&
"expected extent along all dimensions.");
if (!llvm::all_of(extents, [](AffineExpr e) { return e; }))
return op.emitOpError("expected all input dimensions to be used by "
"either the LHS or the RHS");

AffineMap resMap = op.getIndexingMaps()[2];
auto extentsMap = AffineMap::get(/*dimCount=*/extents.size(),
Expand Down
15 changes: 15 additions & 0 deletions mlir/test/Dialect/Vector/invalid.mlir
Expand Up @@ -874,6 +874,21 @@ func.func @contraction(%arg0: vector<2x1xf32>, %arg1: vector<1x3xf32>, %arg2: ve

// -----

func.func @contract_with_dim_unused_by_lhs_and_rhs(%arg0 : vector<1x2xi32>, %arg1 : vector<2xi32>, %arg2 : vector<1xi32>) -> vector<1xi32> {
// expected-error@+1 {{'vector.contract' op expected all input dimensions to be used by either the LHS or the RHS}}
%result = vector.contract {
indexing_maps = [
affine_map<(d0, d1, d2) -> (d0, d2)>,
affine_map<(d0, d1, d2) -> (d2)>,
affine_map<(d0, d1, d2) -> (d1)>
],
iterator_types = ["reduction", "parallel", "reduction"],
kind = #vector.kind<add>} %arg0, %arg1, %arg2 : vector<1x2xi32>, vector<2xi32> into vector<1xi32>
return %result : vector<1xi32>
}

// -----

func.func @create_mask_0d_no_operands() {
%c1 = arith.constant 1 : index
// expected-error@+1 {{must specify exactly one operand for 0-D create_mask}}
Expand Down

0 comments on commit 030b36a

Please sign in to comment.