Skip to content

Commit 2f88268

Browse files
committed
[mlir] Add vectorization tests for linalg.map,reduce,transpose.
Differential Revision: https://reviews.llvm.org/D136688
1 parent 33601f4 commit 2f88268

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

mlir/test/Dialect/Linalg/vectorization.mlir

+68
Original file line numberDiff line numberDiff line change
@@ -1522,3 +1522,71 @@ transform.sequence failures(propagate) {
15221522
%1 = get_closest_isolated_parent %0 : (!pdl.operation) -> !pdl.operation
15231523
%2 = transform.structured.vectorize %1
15241524
}
1525+
1526+
// -----
1527+
1528+
func.func @vectorize_map(%arg0: memref<64xf32>,
1529+
%arg1: memref<64xf32>, %arg2: memref<64xf32>) {
1530+
linalg.map ins(%arg0, %arg1 : memref<64xf32>, memref<64xf32>)
1531+
outs(%arg2 : memref<64xf32>)
1532+
(%in: f32, %in_0: f32) {
1533+
%0 = arith.addf %in, %in_0 : f32
1534+
linalg.yield %0 : f32
1535+
}
1536+
return
1537+
}
1538+
// CHECK-LABEL: func @vectorize_map
1539+
// CHECK: %[[LHS:.*]] = vector.transfer_read
1540+
// CHECK-NEXT: %[[RHS:.*]] = vector.transfer_read
1541+
// CHECK-NEXT: arith.addf %[[LHS]], %[[RHS]] : vector<64xf32>
1542+
1543+
transform.sequence failures(propagate) {
1544+
^bb1(%arg1: !pdl.operation):
1545+
%0 = transform.structured.match ops{["linalg.map"]} in %arg1
1546+
%1 = get_closest_isolated_parent %0 : (!pdl.operation) -> !pdl.operation
1547+
%2 = transform.structured.vectorize %1
1548+
}
1549+
1550+
// -----
1551+
1552+
func.func @vectorize_transpose(%arg0: memref<16x32x64xf32>,
1553+
%arg1: memref<32x64x16xf32>) {
1554+
linalg.transpose ins(%arg0 : memref<16x32x64xf32>)
1555+
outs(%arg1 : memref<32x64x16xf32>) permutation = [1, 2, 0]
1556+
return
1557+
}
1558+
// CHECK-LABEL: func @vectorize_transpose
1559+
// CHECK: %[[FIRST:.*]] = vector.transpose
1560+
// CHECK-SAME: [2, 0, 1] : vector<32x64x16xf32> to vector<16x32x64xf32>
1561+
// CHECK-NEXT: vector.transpose %[[FIRST]]
1562+
// CHECK-SAME: [1, 2, 0] : vector<16x32x64xf32> to vector<32x64x16xf32>
1563+
1564+
transform.sequence failures(propagate) {
1565+
^bb1(%arg1: !pdl.operation):
1566+
%0 = transform.structured.match ops{["linalg.transpose"]} in %arg1
1567+
%1 = get_closest_isolated_parent %0 : (!pdl.operation) -> !pdl.operation
1568+
%2 = transform.structured.vectorize %1
1569+
}
1570+
1571+
// -----
1572+
1573+
func.func @vectorize_reduce(%arg0: memref<16x32x64xf32>,
1574+
%arg1: memref<16x64xf32>) {
1575+
linalg.reduce ins(%arg0 : memref<16x32x64xf32>)
1576+
outs(%arg1 : memref<16x64xf32>) dimensions = [1]
1577+
(%in: f32, %init: f32) {
1578+
%0 = arith.addf %in, %init : f32
1579+
linalg.yield %0 : f32
1580+
}
1581+
return
1582+
}
1583+
// CHECK-LABEL: func @vectorize_reduce
1584+
// CHECK: vector.multi_reduction <add>
1585+
// CHECK-SAME: : vector<16x32x64xf32> to vector<16x64xf32>
1586+
1587+
transform.sequence failures(propagate) {
1588+
^bb1(%arg1: !pdl.operation):
1589+
%0 = transform.structured.match ops{["linalg.reduce"]} in %arg1
1590+
%1 = get_closest_isolated_parent %0 : (!pdl.operation) -> !pdl.operation
1591+
%2 = transform.structured.vectorize %1
1592+
}

0 commit comments

Comments
 (0)