[mlir] Improve mlir-query tool by implementing getBackwardSlice and getForwardSlice matchers (#115670)
Improve mlir-query tool by implementing `getBackwardSlice` and `getForwardSlice` matchers. As an addition `SetQuery` also needed to be added to enable custom configuration for each query. e.g: `inclusive`, `omitUsesFromAbove`, `omitBlockArguments`. Note: backwardSlice and forwardSlice algoritms are the same as the ones in `mlir/lib/Analysis/SliceAnalysis.cpp` Example of current matcher. The query was made to the file: `mlir/test/mlir-query/complex-test.mlir` ```mlir ./mlir-query /home/dbudii/personal/llvm-project/mlir/test/mlir-query/complex-test.mlir -c "match getDefinitions(hasOpName(\"arith.add f\"),2)" Match #1: /home/dbudii/personal/llvm-project/mlir/test/mlir-query/complex-test.mlir:5:8: %0 = linalg.generic {indexing_maps = [#map, #map], iterator_types = ["parallel", "parallel"]} ins(%arg0 : tensor<5x5xf32>) outs(%arg1 : tensor<5x5xf32>) { ^ /home/dbudii/personal/llvm-project/mlir/test/mlir-query/complex-test.mlir:7:10: note: "root" binds here %2 = arith.addf %in, %in : f32 ^ Match #2: /home/dbudii/personal/llvm-project/mlir/test/mlir-query/complex-test.mlir:10:16: %collapsed = tensor.collapse_shape %0 [[0, 1]] : tensor<5x5xf32> into tensor<25xf32> ^ /home/dbudii/personal/llvm-project/mlir/test/mlir-query/complex-test.mlir:13:11: %c2 = arith.constant 2 : index ^ /home/dbudii/personal/llvm-project/mlir/test/mlir-query/complex-test.mlir:14:18: %extracted = tensor.extract %collapsed[%c2] : tensor<25xf32> ^ /home/dbudii/personal/llvm-project/mlir/test/mlir-query/complex-test.mlir:15:10: note: "root" binds here %2 = arith.addf %extracted, %extracted : f32 ^ 2 matches. ```
This commit is contained in:
committed by
GitHub
parent
e01bdc18e3
commit
9b63bdd154
@@ -16,6 +16,7 @@
|
||||
#include "mlir/IR/Matchers.h"
|
||||
#include "mlir/InitAllDialects.h"
|
||||
#include "mlir/Query/Matcher/Registry.h"
|
||||
#include "mlir/Query/Matcher/SliceMatchers.h"
|
||||
#include "mlir/Tools/mlir-query/MlirQueryMain.h"
|
||||
|
||||
using namespace mlir;
|
||||
@@ -39,6 +40,12 @@ int main(int argc, char **argv) {
|
||||
query::matcher::Registry matcherRegistry;
|
||||
|
||||
// Matchers registered in alphabetical order for consistency:
|
||||
matcherRegistry.registerMatcher(
|
||||
"getDefinitions",
|
||||
query::matcher::m_GetDefinitions<query::matcher::DynMatcher>);
|
||||
matcherRegistry.registerMatcher(
|
||||
"getAllDefinitions",
|
||||
query::matcher::m_GetAllDefinitions<query::matcher::DynMatcher>);
|
||||
matcherRegistry.registerMatcher("hasOpAttrName",
|
||||
static_cast<HasOpAttrName *>(m_Attr));
|
||||
matcherRegistry.registerMatcher("hasOpName", static_cast<HasOpName *>(m_Op));
|
||||
|
||||
Reference in New Issue
Block a user