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