Skip to content

Commit

Permalink
Fixed vector.tranfer_* filechecks
Browse files Browse the repository at this point in the history
Added the (now mandatory) in_bounds property
  • Loading branch information
watermelonwolverine committed Dec 28, 2024
1 parent 5b6c700 commit a702250
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 17 deletions.
18 changes: 9 additions & 9 deletions tests/filecheck/dialects/vector/vector_transfer_read_verify.mlir
Original file line number Diff line number Diff line change
@@ -1,43 +1,43 @@
// RUN: xdsl-opt --split-input-file --verify-diagnostics %s | filecheck %s

%source, %index, %padding = "test.op"() : () -> (vector<4x3xf32>, index, f32)
"vector.transfer_read"(%source, %index, %index, %padding) <{operandSegmentSizes = array<i32: 1, 3, 1, 0>, permutation_map = affine_map<() -> (0)>}> : (vector<4x3xf32>, index, index, f32) -> vector<1x1x2x3xf32>
// CHECK: Expected tensor or memref type
"vector.transfer_read"(%source, %index, %index, %padding) <{in_bounds=[true], operandSegmentSizes = array<i32: 1, 3, 1, 0>, permutation_map = affine_map<() -> (0)>}> : (vector<4x3xf32>, index, index, f32) -> vector<1x1x2x3xf32>
// CHECK: Expected tensor or memref type, got vector<4x3xf32>

// -----

%source, %index, %padding = "test.op"() : () -> (memref<?x?xf32>, index, f32)
"vector.transfer_read"(%source, %index, %index, %index, %padding) <{operandSegmentSizes = array<i32: 1, 3, 1, 0>, permutation_map = affine_map<() -> (0)>}> : (memref<?x?xf32>, index, index, index, f32) -> vector<128xf32>
// CHECK: Expected an index for each memref/tensor dimension.
"vector.transfer_read"(%source, %index, %index, %index, %padding) <{in_bounds=[true], operandSegmentSizes = array<i32: 1, 3, 1, 0>, permutation_map = affine_map<() -> (0)>}> : (memref<?x?xf32>, index, index, index, f32) -> vector<128xf32>
// CHECK: Expected an index for each memref/tensor dimension

// -----

%source, %index, %padding = "test.op"() : () -> (memref<?x?xf32>, index, f32)
"vector.transfer_read"(%source, %index, %index, %padding) <{operandSegmentSizes = array<i32: 1, 2, 1, 0>, permutation_map = affine_map<(d0) -> (d0)>}> : (memref<?x?xf32>, index, index, f32) -> vector<128xf32>
"vector.transfer_read"(%source, %index, %index, %padding) <{in_bounds=[true], operandSegmentSizes = array<i32: 1, 2, 1, 0>, permutation_map = affine_map<(d0) -> (d0)>}> : (memref<?x?xf32>, index, index, f32) -> vector<128xf32>
// CHECK: requires a permutation_map with input dims of the same rank as the source type

// -----

%source, %index, %padding = "test.op"() : () -> (memref<?x?xf32>, index, f32)
"vector.transfer_read"(%source, %index, %index, %padding) <{operandSegmentSizes = array<i32: 1, 2, 1, 0>, permutation_map = affine_map<(d0, d1) -> (d0, d1)>}> : (memref<?x?xf32>, index, index, f32) -> vector<128xf32>
"vector.transfer_read"(%source, %index, %index, %padding) <{in_bounds=[true, true], operandSegmentSizes = array<i32: 1, 2, 1, 0>, permutation_map = affine_map<(d0, d1) -> (d0, d1)>}> : (memref<?x?xf32>, index, index, f32) -> vector<128xf32>
// CHECK: requires a permutation_map with result dims of the same rank as the vector type

// -----

%source, %index, %padding = "test.op"() : () -> (memref<?x?xf32>, index, f32)
"vector.transfer_read"(%source, %index, %index, %padding) <{operandSegmentSizes = array<i32: 1, 2, 1, 0>, permutation_map = affine_map<(d0, d1) -> (d0 + d1)>}> : (memref<?x?xf32>, index, index, f32) -> vector<128xf32>
"vector.transfer_read"(%source, %index, %index, %padding) <{in_bounds=[true, true], operandSegmentSizes = array<i32: 1, 2, 1, 0>, permutation_map = affine_map<(d0, d1) -> (d0 + d1)>}> : (memref<?x?xf32>, index, index, f32) -> vector<128xf32>
// CHECK: requires a projected permutation_map (at most one dim or the zero constant can appear in each result

// -----

%source, %index, %padding = "test.op"() : () -> (memref<?x?xf32>, index, f32)
"vector.transfer_read"(%source, %index, %index, %padding) <{operandSegmentSizes = array<i32: 1, 2, 1, 0>, permutation_map = affine_map<(d0, d1) -> (d0 + 1)>}> : (memref<?x?xf32>, index, index, f32) -> vector<128xf32>
"vector.transfer_read"(%source, %index, %index, %padding) <{in_bounds=[true], operandSegmentSizes = array<i32: 1, 2, 1, 0>, permutation_map = affine_map<(d0, d1) -> (d0 + 1)>}> : (memref<?x?xf32>, index, index, f32) -> vector<128xf32>
// CHECK: requires a projected permutation_map (at most one dim or the zero constant can appear in each result)

// -----

%source, %index, %padding = "test.op"() : () -> (memref<?x?x?xf32>, index, f32)
"vector.transfer_read"(%source, %index, %index, %index, %padding) <{operandSegmentSizes = array<i32: 1, 3, 1, 0>, permutation_map = affine_map<(d0, d1, d2) -> (d0, d0)>}> : (memref<?x?x?xf32>, index, index, index, f32) -> vector<3x7xf32>
"vector.transfer_read"(%source, %index, %index, %index, %padding) <{in_bounds=[true, true], operandSegmentSizes = array<i32: 1, 3, 1, 0>, permutation_map = affine_map<(d0, d1, d2) -> (d0, d0)>}> : (memref<?x?x?xf32>, index, index, index, f32) -> vector<3x7xf32>
// CHECK: requires a permutation_map that is a permutation (found one dim used more than once)

// TODO transfer other tests from mlir/test/Dialect/Vector/invalid.mlir once verification for vector element types is implemented
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
// RUN: xdsl-opt --split-input-file --verify-diagnostics %s | filecheck %s

%source, %index = "test.op"() : () -> (vector<4x3xf32>, index)
"vector.transfer_write"(%source, %source, %index, %index) <{operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<() -> (0)>}> : (vector<4x3xf32>, vector<4x3xf32>, index, index) -> ()
"vector.transfer_write"(%source, %source, %index, %index) <{in_bounds=[true], operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<() -> (0)>}> : (vector<4x3xf32>, vector<4x3xf32>, index, index) -> ()
// CHECK: Expected tensor or memref type

// -----

%source, %vector, %index = "test.op"() : () -> (memref<?x?xf32>, vector<128xf32>, index)
"vector.transfer_write"(%vector, %source, %index, %index, %index) <{operandSegmentSizes = array<i32: 1, 1, 3, 0>, permutation_map = affine_map<() -> (0)>}> : (vector<128xf32>, memref<?x?xf32>, index, index, index) -> ()
"vector.transfer_write"(%vector, %source, %index, %index, %index) <{in_bounds=[true], operandSegmentSizes = array<i32: 1, 1, 3, 0>, permutation_map = affine_map<() -> (0)>}> : (vector<128xf32>, memref<?x?xf32>, index, index, index) -> ()
// CHECK: Expected an index for each memref/tensor dimension

// -----

%source, %vector, %index = "test.op"() : () -> (memref<?x?xf32>, vector<128xf32>, index)
"vector.transfer_write"(%vector, %source, %index, %index) <{operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<(d0) -> (d0)>}> : (vector<128xf32>, memref<?x?xf32>, index, index) -> ()
"vector.transfer_write"(%vector, %source, %index, %index) <{in_bounds=[true], operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<(d0) -> (d0)>}> : (vector<128xf32>, memref<?x?xf32>, index, index) -> ()
// CHECK: requires a permutation_map with input dims of the same rank as the source type

// -----

%source, %vector, %index = "test.op"() : () -> (memref<?x?xf32>, vector<128xf32>, index)
"vector.transfer_write"(%vector, %source, %index, %index) <{operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<(d0, d1) -> (d0, d1)>}> : (vector<128xf32>, memref<?x?xf32>, index, index) -> ()
"vector.transfer_write"(%vector, %source, %index, %index) <{in_bounds=[true, true], operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<(d0, d1) -> (d0, d1)>}> : (vector<128xf32>, memref<?x?xf32>, index, index) -> ()
// CHECK: requires a permutation_map with result dims of the same rank as the vector type

// -----

%source, %vector, %index = "test.op"() : () -> (memref<?x?xf32>, vector<128xf32>, index)
"vector.transfer_write"(%vector, %source, %index, %index) <{operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<(d0, d1) -> (d0 + d1)>}> : (vector<128xf32>, memref<?x?xf32>, index, index) -> ()
"vector.transfer_write"(%vector, %source, %index, %index) <{in_bounds=[true, true], operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<(d0, d1) -> (d0 + d1)>}> : (vector<128xf32>, memref<?x?xf32>, index, index) -> ()
// CHECK: requires a projected permutation_map (at most one dim or the zero constant can appear in each result)

// -----

%source, %vector, %index = "test.op"() : () -> (memref<?x?xf32>, vector<128xf32>, index)
"vector.transfer_write"(%vector, %source, %index, %index) <{operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<(d0, d1) -> (d0 + 1)>}> : (vector<128xf32>, memref<?x?xf32>, index, index) -> ()
"vector.transfer_write"(%vector, %source, %index, %index) <{in_bounds=[true], operandSegmentSizes = array<i32: 1, 1, 2, 0>, permutation_map = affine_map<(d0, d1) -> (d0 + 1)>}> : (vector<128xf32>, memref<?x?xf32>, index, index) -> ()
// CHECK: requires a projected permutation_map (at most one dim or the zero constant can appear in each result)

// -----

%source, %vector, %index = "test.op"() : () -> (memref<?x?x?xf32>, vector<3x7xf32>, index)
"vector.transfer_write"(%vector, %source, %index, %index, %index) <{operandSegmentSizes = array<i32: 1, 1, 3, 0>, permutation_map = affine_map<(d0, d1, d2) -> (d0, d0)>}> : (vector<3x7xf32>, memref<?x?x?xf32>, index, index, index) -> ()
"vector.transfer_write"(%vector, %source, %index, %index, %index) <{in_bounds=[true, true], operandSegmentSizes = array<i32: 1, 1, 3, 0>, permutation_map = affine_map<(d0, d1, d2) -> (d0, d0)>}> : (vector<3x7xf32>, memref<?x?x?xf32>, index, index, index) -> ()
// CHECK: requires a permutation_map that is a permutation (found one dim used more than once)

// -----

%source, %vector, %index = "test.op"() : () -> (memref<?xf32>, vector<7xf32>, index)
"vector.transfer_write"(%vector, %source, %index) <{operandSegmentSizes = array<i32: 1, 1, 1, 0>, permutation_map = affine_map<(d0) -> (0)>}> : (vector<7xf32>, memref<?xf32>, index) -> ()
"vector.transfer_write"(%vector, %source, %index) <{in_bounds=[true], operandSegmentSizes = array<i32: 1, 1, 1, 0>, permutation_map = affine_map<(d0) -> (0)>}> : (vector<7xf32>, memref<?xf32>, index) -> ()
// CHECK: requires a permutation_map that is a permutation (found one dim used more than once)

// TODO transfer other tests from mlir/test/Dialect/Vector/invalid.mlir once verification for vector element types is implemented

0 comments on commit a702250

Please sign in to comment.