brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 8a17a33 Raw
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