58 lines · cpp
1//===- fir-opt.cpp - FIR Optimizer Driver -----------------------*- C++ -*-===//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 to be like LLVM's opt program, only for FIR. Such a program is10// required for roundtrip testing, etc.11//12//===----------------------------------------------------------------------===//13 14#include "mlir/Tools/mlir-opt/MlirOptMain.h"15#include "flang/Optimizer/CodeGen/CodeGen.h"16#include "flang/Optimizer/HLFIR/Passes.h"17#include "flang/Optimizer/OpenACC/Passes.h"18#include "flang/Optimizer/OpenMP/Passes.h"19#include "flang/Optimizer/Support/InitFIR.h"20#include "flang/Optimizer/Transforms/Passes.h"21 22using namespace mlir;23namespace fir {24namespace test {25void registerTestFIRAliasAnalysisPass();26void registerTestFIROpenACCInterfacesPass();27} // namespace test28} // namespace fir29 30// Defined in mlir/test, no pulic header.31namespace mlir {32void registerSideEffectTestPasses();33namespace test {34void registerTestOpenACC();35} // namespace test36} // namespace mlir37 38int main(int argc, char **argv) {39 fir::support::registerMLIRPassesForFortranTools();40 fir::registerOptCodeGenPasses();41 fir::registerOptTransformPasses();42 hlfir::registerHLFIRPasses();43 flangomp::registerFlangOpenMPPasses();44 fir::acc::registerFIROpenACCPasses();45#ifdef FLANG_INCLUDE_TESTS46 fir::test::registerTestFIRAliasAnalysisPass();47 fir::test::registerTestFIROpenACCInterfacesPass();48 mlir::registerSideEffectTestPasses();49 mlir::test::registerTestOpenACC();50#endif51 DialectRegistry registry;52 fir::support::registerDialects(registry);53 registry.insert<mlir::memref::MemRefDialect>();54 fir::support::addFIRExtensions(registry);55 return failed(MlirOptMain(argc, argv, "FIR modular optimizer driver\n",56 registry));57}58