@@ -1591,6 +1591,39 @@ func.func private @test_matmul7(%arg0 : tensor<5xf32>, %arg1 : tensor<5xf32>) ->
15911591
15921592// -----
15931593
1594+ // N-D x N-D
1595+ func.func private @test_matmul8 (%arg0 : tensor <?x10 x10 xf32 >) -> tensor <*xf32 > {
1596+ %0 =" onnx.MatMul" (%arg0 , %arg0 ) : (tensor <?x10 x10 xf32 >, tensor <?x10 x10 xf32 >) -> tensor <*xf32 >
1597+ " func.return" (%0 ) : (tensor <*xf32 >) -> ()
1598+
1599+ // mlir2FileCheck.py -a'["A", "B"]' -n'{"1": "RES"}'
1600+ // CHECK-LABEL: func.func private @test_matmul8
1601+ // CHECK-SAME: ([[A_:%.+]]: memref<?x10x10xf32>) -> memref<?x10x10xf32> {
1602+ // CHECK-DAG: [[CST_0_dot_000000_:%.+]] = arith.constant 0.000000e+00 : f32
1603+ // CHECK-DAG: [[CST_10_:%.+]] = arith.constant 10 : index
1604+ // CHECK-DAG: [[CST_0_:%.+]] = arith.constant 0 : index
1605+ // CHECK: [[VAR_dim_:%.+]] = memref.dim [[A_]], [[CST_0_]] : memref<?x10x10xf32>
1606+ // CHECK: [[RES_:%.+]] = memref.alloc([[VAR_dim_]]) {{.*}}: memref<?x10x10xf32>
1607+ // CHECK: krnl.memset [[RES_]], [[CST_0_dot_000000_]] : memref<?x10x10xf32>
1608+ // CHECK: [[LOOP_0_:%.+]] = krnl.define_loops 1
1609+ // CHECK: krnl.iterate([[LOOP_0_]]) with ([[LOOP_0_]] -> [[B_:%.+]] = [[CST_0_]] to [[VAR_dim_]]){
1610+ // CHECK-DAG: [[RES_1_:%.+]] = krnl.get_induction_var_value([[LOOP_0_]]) : (!krnl.loop) -> index
1611+ // CHECK-DAG: [[LOOP_1_:%.+]]:3 = krnl.define_loops 3
1612+ // CHECK: [[BLOCK_TILE__0_:%.+]], [[BLOCK_IN__0_:%.+]] = krnl.block [[LOOP_1_]]#0 4 : (!krnl.loop) -> (!krnl.loop, !krnl.loop)
1613+ // CHECK: [[BLOCK_TILE__1_:%.+]], [[BLOCK_IN__1_:%.+]] = krnl.block [[LOOP_1_]]#1 8 : (!krnl.loop) -> (!krnl.loop, !krnl.loop)
1614+ // CHECK: [[BLOCK_TILE__2_:%.+]], [[BLOCK_IN__2_:%.+]] = krnl.block [[LOOP_1_]]#2 8 : (!krnl.loop) -> (!krnl.loop, !krnl.loop)
1615+ // CHECK: krnl.permute([[BLOCK_TILE__0_]], [[BLOCK_IN__0_]], [[BLOCK_TILE__0_]]_0, [[BLOCK_IN__0_]]_1, [[BLOCK_TILE__0_]]_2, [[BLOCK_IN__0_]]_3) [0, 3, 1, 4, 2, 5] : !krnl.loop, !krnl.loop, !krnl.loop, !krnl.loop, !krnl.loop, !krnl.loop
1616+ // CHECK: krnl.iterate([[BLOCK_TILE__0_]], [[BLOCK_TILE__0_]]_0, [[BLOCK_TILE__0_]]_2) with ([[LOOP_1_]]#0 -> [[I_0_:%.+]] = [[CST_0_]] to [[CST_10_]], [[LOOP_1_]]#1 -> [[I_1_:%.+]] = [[CST_0_]] to [[CST_10_]], [[LOOP_1_]]#2 -> [[I_2_:%.+]] = [[CST_0_]] to [[CST_10_]]){
1617+ // CHECK: [[VAR_3_:%.+]]:3 = krnl.get_induction_var_value([[BLOCK_TILE__0_]], [[BLOCK_TILE__0_]]_0, [[BLOCK_TILE__0_]]_2) : (!krnl.loop, !krnl.loop, !krnl.loop) -> (index, index, index)
1618+ // CHECK: krnl.matmul [[A_]]{{.}}[[RES_1_]], [[CST_0_]], [[CST_0_]]{{.}}, [[A_]]{{.}}[[RES_1_]], [[CST_0_]], [[CST_0_]]{{.}}, [[RES_]]{{.}}[[RES_1_]], [[CST_0_]], [[CST_0_]]{{.}}, ([[BLOCK_IN__0_]], [[BLOCK_IN__0_]]_1, [[BLOCK_IN__0_]]_3), ([[VAR_3_]]#0, [[VAR_3_]]#1, [[VAR_3_]]#2), ([[CST_10_]], [[CST_10_]], [[CST_10_]]) {aTileSize = [], bTileSize = [], cTileSize = [], computeTileSize = [4, 8, 8]} : memref<?x10x10xf32>, memref<?x10x10xf32>, memref<?x10x10xf32>, (!krnl.loop, !krnl.loop, !krnl.loop)
1619+ // CHECK: }
1620+ // CHECK: }
1621+ // CHECK: return [[RES_]] : memref<?x10x10xf32>
1622+ // CHECK: }
1623+ }
1624+
1625+ // -----
1626+
15941627func.func private @test_pool_unknown_dimensions (%arg0 : tensor <1 x3 x?x32 xf32 >) -> tensor <*xf32 > {
15951628 %0 = " onnx.AveragePool" (%arg0 ) {auto_pad = " NOTSET" , kernel_shape = [2 , 2 ]} : (tensor <1 x3 x?x32 xf32 >) -> tensor <*xf32 >
15961629 " func.return" (%0 ) : (tensor <*xf32 >) -> ()
0 commit comments