| // RUN: mlir-query %s -c "m anyOf(getAllDefinitions(hasOpName(\"arith.addf\"),2),getAllDefinitions(hasOpName(\"tensor.extract\"),1))" | FileCheck %s |
| |
| #map = affine_map<(d0, d1) -> (d0, d1)> |
| func.func @slice_use_from_above(%arg0: tensor<5x5xf32>, %arg1: tensor<5x5xf32>) { |
| %0 = linalg.generic {indexing_maps = [#map, #map], iterator_types = ["parallel", "parallel"]} ins(%arg0 : tensor<5x5xf32>) outs(%arg1 : tensor<5x5xf32>) { |
| ^bb0(%in: f32, %out: f32): |
| %2 = arith.addf %in, %in : f32 |
| linalg.yield %2 : f32 |
| } -> tensor<5x5xf32> |
| %collapsed = tensor.collapse_shape %0 [[0, 1]] : tensor<5x5xf32> into tensor<25xf32> |
| %1 = linalg.generic {indexing_maps = [#map, #map], iterator_types = ["parallel", "parallel"]} ins(%0 : tensor<5x5xf32>) outs(%arg1 : tensor<5x5xf32>) { |
| ^bb0(%in: f32, %out: f32): |
| %c2 = arith.constant 2 : index |
| %extracted = tensor.extract %collapsed[%c2] : tensor<25xf32> |
| %2 = arith.addf %extracted, %extracted : f32 |
| linalg.yield %2 : f32 |
| } -> tensor<5x5xf32> |
| return |
| } |
| |
| // CHECK: Match #1: |
| // CHECK: %[[LINALG:.*]] = linalg.generic {indexing_maps = [#map, #map], iterator_types = ["parallel", "parallel"]} |
| // CHECK-SAME: ins(%arg0 : tensor<5x5xf32>) outs(%arg1 : tensor<5x5xf32>) |
| |
| // CHECK: {{.*}}.mlir:7:10: note: "root" binds here |
| // CHECK: %[[ADDF1:.*]] = arith.addf %in, %in : f32 |
| |
| // CHECK: Match #2: |
| // CHECK: %[[COLLAPSED:.*]] = tensor.collapse_shape %[[LINALG]] {{\[\[.*\]\]}} : tensor<5x5xf32> into tensor<25xf32> |
| // CHECK: %[[C2:.*]] = arith.constant {{.*}} : index |
| |
| // CHECK: {{.*}}.mlir:14:18: note: "root" binds here |
| // CHECK: %[[EXTRACTED:.*]] = tensor.extract %[[COLLAPSED]][%[[C2]]] : tensor<25xf32> |
| |
| // CHECK: Match #3: |
| // CHECK: %[[COLLAPSED:.*]] = tensor.collapse_shape %[[LINALG]] {{\[\[.*\]\]}} : tensor<5x5xf32> into tensor<25xf32> |
| // CHECK: %[[C2:.*]] = arith.constant {{.*}} : index |
| // CHECK: %[[EXTRACTED:.*]] = tensor.extract %[[COLLAPSED]][%[[C2]]] : tensor<25xf32> |
| |
| // CHECK: {{.*}}.mlir:15:10: note: "root" binds here |
| // CHECK: %[[ADDF2:.*]] = arith.addf %[[EXTRACTED]], %[[EXTRACTED]] : f32 |