Commit f159e196 authored by Diego Caballero's avatar Diego Caballero Committed by Scott Cyphers

[MLIR] Introduce ngraph-opt tool (#3560)

* [MLIR] Enable LIT testing in CMAKE

This PR enables LIT testing in nGraph for MLIR Compiler, introduced in
PR3523. We can now do `make check-mlir-lit` to run LIT tests.

* Address feedback

* Revisit PR after cmake clean-up

* [MLIR] Introduce ngraph-opt tool

To be used, among other things, for LIT testing.
`elementwise_binary_ops.mlir` shows a simple LIT test
using ngraph-opt.

Dummy affine_lowering/lit_test.mlir test that served as initial testing
of LIT tool configuration is now removed.

* Address feedback
parent 3287ca6f
......@@ -23,3 +23,4 @@ include_directories(
)
add_subdirectory(compiler)
add_subdirectory(tools/ngraph-opt)
# ******************************************************************************
# Copyright 2017-2019 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ******************************************************************************
set(LIB_LIBS
MLIRPass
)
add_library(ngraph_opt_lib
ngraph_opt.cpp
)
target_link_libraries(ngraph_opt_lib ${LIB_LIBS})
set(LIBS
MLIROptMain
MLIRParser
)
add_executable(ngraph-opt
ngraph_opt.cpp
)
#whole_archive_link(ngraph-opt ${LIBS})
target_link_libraries(ngraph-opt PRIVATE ngraph_opt_lib ${LIBS} LLVMSupport)
install(TARGETS ngraph-opt RUNTIME DESTINATION ${NGRAPH_INSTALL_BIN})
//*****************************************************************************
// Copyright 2017-2019 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//*****************************************************************************
#include "ngraph/check.hpp"
#include <llvm/Support/CommandLine.h>
#include <llvm/Support/MemoryBuffer.h>
#include <llvm/Support/ToolOutputFile.h>
#include <mlir/Pass/Pass.h>
#include <mlir/Pass/PassManager.h>
#include <mlir/Support/FileUtilities.h>
#include <mlir/Support/MlirOptMain.h>
static llvm::cl::opt<std::string>
input_filename(llvm::cl::Positional, llvm::cl::desc("<input file>"), llvm::cl::init("-"));
static llvm::cl::opt<std::string> output_filename("o",
llvm::cl::desc("Output filename"),
llvm::cl::value_desc("filename"),
llvm::cl::init("-"));
static llvm::cl::opt<bool>
split_input_file("split-input-file",
llvm::cl::desc("Split the input file into pieces and process each "
"chunk independently"),
llvm::cl::init(false));
static llvm::cl::opt<bool>
verify_diagnostics("verify-diagnostics",
llvm::cl::desc("Check that emitted diagnostics match "
"expected-* lines on the corresponding line"),
llvm::cl::init(false));
static llvm::cl::opt<bool>
verify_passes("verify-each",
llvm::cl::desc("Run the verifier after each transformation pass"),
llvm::cl::init(true));
static std::vector<const mlir::PassRegistryEntry*>* pass_list;
int main(int argc, char** argv)
{
// TODO: Init nGraph MLIR Compiler here, when necessary.
// Register any pass manager command line options.
mlir::registerPassManagerCLOptions();
// Parse pass names in main to ensure static initialization completed.
llvm::cl::list<const mlir::PassRegistryEntry*, bool, mlir::PassNameParser> pass_list(
"", llvm::cl::desc("Compiler passes to run"));
::pass_list = &pass_list;
llvm::cl::ParseCommandLineOptions(argc, argv, "nGraph MLIR modular optimizer driver\n");
// Set up the input file.
std::string error_message;
auto file = mlir::openInputFile(input_filename, &error_message);
NGRAPH_CHECK(file, error_message);
auto output = mlir::openOutputFile(output_filename, &error_message);
NGRAPH_CHECK(output, error_message);
return failed(mlir::MlirOptMain(output->os(),
std::move(file),
pass_list,
split_input_file,
verify_diagnostics,
verify_passes));
}
......@@ -15,6 +15,7 @@
# ******************************************************************************
# Enable use of the lit tool that we build from MLIR repo.
set(LLVM_LIT ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py)
set(LLVM_DEFAULT_EXTERNAL_LIT ${MLIR_TOOLS_DIR}/llvm-lit)
configure_lit_site_cfg(
......@@ -24,9 +25,9 @@ configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
)
#set(NGRAPH_MLIR_TEST_DEPENDS
# ngraph-opt
# )
set(NGRAPH_MLIR_TEST_DEPENDS
ngraph-opt
)
add_lit_testsuite(check-mlir-lit "Running the nGraph MLIR regression tests"
${CMAKE_CURRENT_BINARY_DIR}
......
// RUN: mlir-opt %s | FileCheck %s
// CHECK-LABEL: func @test()
func @test() {
llvm.return
}
......@@ -19,7 +19,7 @@ from lit.llvm import llvm_config
from lit.llvm.subst import ToolSubst
# name: The name of this test suite.
config.name = 'NGRAPH MLIR Compiler'
config.name = 'nGraph MLIR Compiler'
config.test_format = lit.formats.ShTest(not llvm_config.use_lit_shell)
......@@ -35,10 +35,10 @@ llvm_config.use_default_substitutions()
llvm_config.with_environment('PATH', config.llvm_tools_dir, append_path=True)
tool_dirs = [
config.mlir_tools_dir, config.llvm_tools_dir
config.ngraph_mlir_tools_dir, config.mlir_tools_dir, config.llvm_tools_dir
]
tool_names = [
'mlir-opt', 'mlir-translate'
'ngraph-opt', 'mlir-opt', 'mlir-translate'
]
tools = [ToolSubst(s, unresolved='ignore') for s in tool_names]
llvm_config.add_tool_substitutions(tools, tool_dirs)
......@@ -21,6 +21,7 @@ config.mlir_obj_root = "@MLIR_BUILD_DIR@"
config.mlir_tools_dir = "@MLIR_TOOLS_DIR@"
config.suffixes = ['.mlir']
config.ngraph_mlir_tools_dir = "@NGRAPH_INSTALL_BIN@"
config.ngraph_mlir_test_dir = "@NGRAPH_LIT_TEST_SRC_DIR@"
lit.llvm.initialize(lit_config, config)
......
// RUN: ngraph-opt %s | FileCheck %s
// These tests verify the parser, builder and printer of element-wise binary ops.
// CHECK-LABEL: func @add_float
func @add_float(%arg0: !ng.tensor<2x2xf32>, %arg1: !ng.tensor<2x2xf32>) -> !ng.tensor<2x2xf32> {
// CHECK: ng.add
%0 = "ng.add"(%arg1, %arg0) : (!ng.tensor<2x2xf32>, !ng.tensor<2x2xf32>) -> !ng.tensor<2x2xf32>
"ng.return"(%0) : (!ng.tensor<2x2xf32>) -> ()
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment