blob: cb2dd4f4776bf5d4b18b04f040130c085f2d1b9e [file] [log] [blame]
//===-- Optimizer/Support/InitFIR.h -----------------------------*- 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
//
//===----------------------------------------------------------------------===//
//
// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/
//
//===----------------------------------------------------------------------===//
#ifndef FORTRAN_OPTIMIZER_SUPPORT_INITFIR_H
#define FORTRAN_OPTIMIZER_SUPPORT_INITFIR_H
#include "flang/Optimizer/Dialect/FIRDialect.h"
#include "mlir/Conversion/Passes.h"
#include "mlir/Dialect/Affine/Passes.h"
#include "mlir/InitAllDialects.h"
#include "mlir/Pass/Pass.h"
#include "mlir/Pass/PassRegistry.h"
#include "mlir/Transforms/LocationSnapshot.h"
#include "mlir/Transforms/Passes.h"
namespace fir::support {
// The definitive list of dialects used by flang.
#define FLANG_DIALECT_LIST \
mlir::AffineDialect, FIROpsDialect, mlir::LLVM::LLVMDialect, \
mlir::acc::OpenACCDialect, mlir::omp::OpenMPDialect, \
mlir::scf::SCFDialect, mlir::StandardOpsDialect, \
mlir::vector::VectorDialect
/// Register all the dialects used by flang.
inline void registerDialects(mlir::DialectRegistry &registry) {
registry.insert<FLANG_DIALECT_LIST>();
}
/// Forced load of all the dialects used by flang. Lowering is not an MLIR
/// pass, but a producer of FIR and MLIR. It is therefore a requirement that the
/// dialects be preloaded to be able to build the IR.
inline void loadDialects(mlir::MLIRContext &context) {
context.loadDialect<FLANG_DIALECT_LIST>();
}
/// Register the standard passes we use. This comes from registerAllPasses(),
/// but is a smaller set since we aren't using many of the passes found there.
inline void registerFIRPasses() {
mlir::registerCanonicalizerPass();
mlir::registerCSEPass();
mlir::registerAffineLoopFusionPass();
mlir::registerLoopInvariantCodeMotionPass();
mlir::registerLoopCoalescingPass();
mlir::registerStripDebugInfoPass();
mlir::registerPrintOpStatsPass();
mlir::registerInlinerPass();
mlir::registerSCCPPass();
mlir::registerMemRefDataFlowOptPass();
mlir::registerSymbolDCEPass();
mlir::registerLocationSnapshotPass();
mlir::registerAffinePipelineDataTransferPass();
mlir::registerAffineVectorizePass();
mlir::registerAffineLoopUnrollPass();
mlir::registerAffineLoopUnrollAndJamPass();
mlir::registerSimplifyAffineStructuresPass();
mlir::registerAffineLoopInvariantCodeMotionPass();
mlir::registerAffineLoopTilingPass();
mlir::registerAffineDataCopyGenerationPass();
mlir::registerConvertAffineToStandardPass();
}
} // namespace fir::support
#endif // FORTRAN_OPTIMIZER_SUPPORT_INITFIR_H