diff --git a/flang/test/CMakeLists.txt b/flang/test/CMakeLists.txt --- a/flang/test/CMakeLists.txt +++ b/flang/test/CMakeLists.txt @@ -34,7 +34,7 @@ flang_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py) set(FLANG_TEST_DEPENDS - f18 FileCheck count not module_files + f18 FileCheck count not module_files fir-opt ) list(APPEND FLANG_TEST_DEPENDS tco) diff --git a/flang/tools/CMakeLists.txt b/flang/tools/CMakeLists.txt --- a/flang/tools/CMakeLists.txt +++ b/flang/tools/CMakeLists.txt @@ -12,3 +12,4 @@ endif() add_subdirectory(tco) add_subdirectory(f18-parse-demo) +add_subdirectory(fir-opt) diff --git a/flang/tools/fir-opt/CMakeLists.txt b/flang/tools/fir-opt/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/flang/tools/fir-opt/CMakeLists.txt @@ -0,0 +1,22 @@ +add_flang_tool(fir-opt fir-opt.cpp) +llvm_update_compile_flags(fir-opt) +get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) + +target_link_libraries(fir-opt PRIVATE + FIROptimizer + ${dialect_libs} + MLIRIR + MLIRLLVMIR + MLIRPass + MLIRStandardToLLVM + MLIRTransforms + MLIRAffineToStandard + MLIRAnalysis + MLIRSCFToStandard + MLIREDSC + MLIRParser + MLIRStandardToLLVM + MLIRSupport + MLIRVectorToLLVM + MLIROptLib +) diff --git a/flang/tools/fir-opt/fir-opt.cpp b/flang/tools/fir-opt/fir-opt.cpp new file mode 100644 --- /dev/null +++ b/flang/tools/fir-opt/fir-opt.cpp @@ -0,0 +1,26 @@ +//===- fir-opt.cpp - FIR Optimizer Driver -----------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This is to be like LLVM's opt program, only for FIR. Such a program is +// required for roundtrip testing, etc. +// +//===----------------------------------------------------------------------===// + +#include "mlir/Support/MlirOptMain.h" +#include "flang/Optimizer/Dialect/FIRDialect.h" + +using namespace mlir; + +int main(int argc, char **argv) { + fir::registerFIRPasses(); + DialectRegistry registry; + registerAllDialects(registry); + registry.insert(); + return failed(MlirOptMain(argc, argv, "FIR modular optimizer driver\n", + registry, /*preloadDialectsInContext*/ false)); +} \ No newline at end of file