Add an options object to allow control of the slice computation (for both forward and backward slice). This makes the ABI stable, and also allows avoiding an assert that makes the slice analysis unusable for operations with multiple blocks. Reviewed By: hanchung, nicolasvasilache Differential Revision: https://reviews.llvm.org/D151520
37 lines
1.7 KiB
MLIR
37 lines
1.7 KiB
MLIR
// RUN: mlir-opt --pass-pipeline="builtin.module(slice-analysis-test{omit-block-arguments=true})" %s | FileCheck %s
|
|
|
|
func.func @slicing_linalg_op(%arg0 : index, %arg1 : index, %arg2 : index) {
|
|
%a = memref.alloc(%arg0, %arg2) : memref<?x?xf32>
|
|
%b = memref.alloc(%arg2, %arg1) : memref<?x?xf32>
|
|
cf.br ^bb1
|
|
^bb1() :
|
|
%c = memref.alloc(%arg0, %arg1) : memref<?x?xf32>
|
|
%d = memref.alloc(%arg0, %arg1) : memref<?x?xf32>
|
|
linalg.matmul ins(%a, %b : memref<?x?xf32>, memref<?x?xf32>)
|
|
outs(%c : memref<?x?xf32>)
|
|
linalg.matmul ins(%a, %b : memref<?x?xf32>, memref<?x?xf32>)
|
|
outs(%d : memref<?x?xf32>)
|
|
memref.dealloc %c : memref<?x?xf32>
|
|
memref.dealloc %b : memref<?x?xf32>
|
|
memref.dealloc %a : memref<?x?xf32>
|
|
memref.dealloc %d : memref<?x?xf32>
|
|
return
|
|
}
|
|
// CHECK-LABEL: func @slicing_linalg_op__backward_slice__0
|
|
// CHECK-SAME: %[[ARG0:[a-zA-Z0-9_]+]]: index
|
|
// CHECK-SAME: %[[ARG1:[a-zA-Z0-9_]+]]: index
|
|
// CHECK-SAME: %[[ARG2:[a-zA-Z0-9_]+]]: index
|
|
// CHECK-DAG: %[[A:.+]] = memref.alloc(%[[ARG0]], %[[ARG2]]) : memref<?x?xf32>
|
|
// CHECK-DAG: %[[B:.+]] = memref.alloc(%[[ARG2]], %[[ARG1]]) : memref<?x?xf32>
|
|
// CHECK-DAG: %[[C:.+]] = memref.alloc(%[[ARG0]], %[[ARG1]]) : memref<?x?xf32>
|
|
// CHECK: return
|
|
|
|
// CHECK-LABEL: func @slicing_linalg_op__backward_slice__1
|
|
// CHECK-SAME: %[[ARG0:[a-zA-Z0-9_]+]]: index
|
|
// CHECK-SAME: %[[ARG1:[a-zA-Z0-9_]+]]: index
|
|
// CHECK-SAME: %[[ARG2:[a-zA-Z0-9_]+]]: index
|
|
// CHECK-DAG: %[[A:.+]] = memref.alloc(%[[ARG0]], %[[ARG2]]) : memref<?x?xf32>
|
|
// CHECK-DAG: %[[B:.+]] = memref.alloc(%[[ARG2]], %[[ARG1]]) : memref<?x?xf32>
|
|
// CHECK-DAG: %[[C:.+]] = memref.alloc(%[[ARG0]], %[[ARG1]]) : memref<?x?xf32>
|
|
// CHECK: return
|