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