81 lines · cpp
1//===- mlir-query.cpp - MLIR Query Driver ---------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This is a command line utility that queries a file from/to MLIR using one10// of the registered queries.11//12//===----------------------------------------------------------------------===//13 14#include "mlir/IR/Dialect.h"15#include "mlir/IR/MLIRContext.h"16#include "mlir/IR/Matchers.h"17#include "mlir/InitAllDialects.h"18#include "mlir/Query/Matcher/Registry.h"19#include "mlir/Query/Matcher/SliceMatchers.h"20#include "mlir/Tools/mlir-query/MlirQueryMain.h"21 22using namespace mlir;23 24// This is needed because these matchers are defined as overloaded functions.25using HasOpAttrName = detail::AttrOpMatcher(StringRef);26using HasOpName = detail::NameOpMatcher(StringRef);27using IsConstantOp = detail::constant_op_matcher();28 29namespace test {30#ifdef MLIR_INCLUDE_TESTS31void registerTestDialect(DialectRegistry &);32#endif33} // namespace test34 35int main(int argc, char **argv) {36 37 DialectRegistry dialectRegistry;38 registerAllDialects(dialectRegistry);39 40 query::matcher::Registry matcherRegistry;41 42 // Matchers registered in alphabetical order for consistency:43 matcherRegistry.registerMatcher("allOf", query::matcher::internal::allOf);44 matcherRegistry.registerMatcher("anyOf", query::matcher::internal::anyOf);45 matcherRegistry.registerMatcher(46 "getAllDefinitions",47 query::matcher::m_GetAllDefinitions<query::matcher::DynMatcher>);48 matcherRegistry.registerMatcher(49 "getDefinitions",50 query::matcher::m_GetDefinitions<query::matcher::DynMatcher>);51 matcherRegistry.registerMatcher(52 "getDefinitionsByPredicate",53 query::matcher::m_GetDefinitionsByPredicate<query::matcher::DynMatcher,54 query::matcher::DynMatcher>);55 matcherRegistry.registerMatcher(56 "getUsersByPredicate",57 query::matcher::m_GetUsersByPredicate<query::matcher::DynMatcher,58 query::matcher::DynMatcher>);59 matcherRegistry.registerMatcher("hasOpAttrName",60 static_cast<HasOpAttrName *>(m_Attr));61 matcherRegistry.registerMatcher("hasOpName", static_cast<HasOpName *>(m_Op));62 matcherRegistry.registerMatcher("isConstantOp",63 static_cast<IsConstantOp *>(m_Constant));64 matcherRegistry.registerMatcher("isNegInfFloat", m_NegInfFloat);65 matcherRegistry.registerMatcher("isNegZeroFloat", m_NegZeroFloat);66 matcherRegistry.registerMatcher("isNonZero", m_NonZero);67 matcherRegistry.registerMatcher("isOne", m_One);68 matcherRegistry.registerMatcher("isOneFloat", m_OneFloat);69 matcherRegistry.registerMatcher("isPosInfFloat", m_PosInfFloat);70 matcherRegistry.registerMatcher("isPosZeroFloat", m_PosZeroFloat);71 matcherRegistry.registerMatcher("isZero", m_Zero);72 matcherRegistry.registerMatcher("isZeroFloat", m_AnyZeroFloat);73 74#ifdef MLIR_INCLUDE_TESTS75 test::registerTestDialect(dialectRegistry);76#endif77 MLIRContext context(dialectRegistry);78 79 return failed(mlirQueryMain(argc, argv, context, matcherRegistry));80}81