• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// RUN: mlir-opt %s -linalg-tile="linalg-tile-sizes=2,3,4" | FileCheck %s
2
3//  CHECK-DAG: #[[MAP0:.*]] = affine_map<(d0)[s0] -> (2, -d0 + s0)>
4//  CHECK-DAG: #[[MAP1:.*]] = affine_map<(d0)[s0, s1] -> (s0 + 2, -d0 + s1)>
5//  CHECK-DAG: #[[MAP2:.*]] = affine_map<(d0)[s0, s1] -> (s0 + 3, -d0 + s1)>
6//  CHECK-DAG: #[[MAP4:.*]] = affine_map<(d0)[s0] -> (3, -d0 + s0)>
7//  CHECK-DAG: #[[MAP5:.*]] = affine_map<(d0)[s0] -> (4, -d0 + s0)>
8
9func @conv(%arg0 : memref<?x?x?x?xf32>, %arg1 : memref<?x?x?x?xf32>, %arg2 : memref<?x?x?x?xf32>) {
10  linalg.conv(%arg0, %arg1, %arg2) : memref<?x?x?x?xf32>, memref<?x?x?x?xf32>, memref<?x?x?x?xf32>
11  return
12}
13
14//       CHECK: func @conv
15//  CHECK-SAME:   %[[ARG0:[a-zA-Z0-9_]*]]: memref<?x?x?x?xf32>
16//  CHECK-SAME:   %[[ARG1:[a-zA-Z0-9_]*]]: memref<?x?x?x?xf32>
17//  CHECK-SAME:   %[[ARG2:[a-zA-Z0-9_]*]]: memref<?x?x?x?xf32>
18//   CHECK-DAG:   %[[C0:.*]] = constant 0 : index
19//   CHECK-DAG:   %[[C1:.*]] = constant 1 : index
20//   CHECK-DAG:   %[[C2:.*]] = constant 2 : index
21//   CHECK-DAG:   %[[C3:.*]] = constant 3 : index
22//   CHECK-DAG:   %[[C4:.*]] = constant 4 : index
23//       CHECK:   %[[T0:.*]] = dim %[[ARG0]], %[[C0]]
24//       CHECK:   %[[T1:.*]] = dim %[[ARG0]], %[[C1]]
25//       CHECK:   %[[T2:.*]] = dim %[[ARG1]], %[[C0]]
26//       CHECK:   %[[T3:.*]] = dim %[[ARG2]], %[[C1]]
27//       CHECK:   %[[T4:.*]] = dim %[[ARG2]], %[[C2]]
28//       CHECK:   scf.for %[[ARG3:.*]] = %[[C0]] to %[[T2]] step %[[C2]]
29//       CHECK:     scf.for %[[ARG4:.*]] = %[[C0]] to %[[T3]] step %[[C3]]
30//       CHECK:       scf.for %[[ARG5:.*]] = %[[C0]] to %[[T4]] step %[[C4]]
31//       CHECK:         %[[T5:.*]] = dim %[[ARG1]], %[[C0]]
32//       CHECK:         %[[T6:.*]] = affine.min #[[MAP0]](%[[ARG3]])[%[[T5]]]
33//       CHECK:         %[[T7:.*]] = dim %[[ARG1]], %[[C1]]
34//       CHECK:         %[[T8:.*]] = affine.min #[[MAP1]](%[[ARG4]])[%[[T0]], %[[T7]]]
35//       CHECK:         %[[T9:.*]] = dim %[[ARG1]], %[[C2]]
36//       CHECK:         %[[T10:.*]] = affine.min #[[MAP2]](%[[ARG5]])[%[[T1]], %[[T9]]]
37//       CHECK:         %[[T11:.*]] = dim %[[ARG1]], %[[C3]]
38//       CHECK:         %[[SV1:.*]] = subview %[[ARG1]][%[[ARG3]], %[[ARG4]], %[[ARG5]], 0]
39//  CHECK-SAME:                                        [%[[T6]], %[[T8]], %[[T10]], %[[T11]]]
40//       CHECK:         %[[T13:.*]] = dim %[[ARG2]], %[[C0]]
41//       CHECK:         %[[T14:.*]] = affine.min #[[MAP0]](%[[ARG3]])[%[[T13]]]
42//       CHECK:         %[[T15:.*]] = dim %[[ARG2]], %[[C1]]
43//       CHECK:         %[[T16:.*]] = affine.min #[[MAP4]](%[[ARG4]])[%[[T15]]]
44//       CHECK:         %[[T17:.*]] = dim %[[ARG2]], %[[C2]]
45//       CHECK:         %[[T18:.*]] = affine.min #[[MAP5]](%[[ARG5]])[%[[T17]]]
46//       CHECK:         %[[T19:.*]] = dim %[[ARG2]], %[[C3]]
47//       CHECK:         %[[SV2:.*]] = subview %[[ARG2]][%[[ARG3]], %[[ARG4]], %[[ARG5]], 0]
48//  CHECK-SAME:                                        [%[[T14]], %[[T16]], %[[T18]], %[[T19]]]
49//       CHECK:         linalg.conv(%[[ARG0]], %[[SV1]], %[[SV2]])
50