Index: flang/include/flang/Optimizer/CMakeLists.txt =================================================================== --- flang/include/flang/Optimizer/CMakeLists.txt +++ flang/include/flang/Optimizer/CMakeLists.txt @@ -1 +1,2 @@ +add_subdirectory(CodeGen) add_subdirectory(Dialect) Index: flang/include/flang/Optimizer/CodeGen/CGPasses.td =================================================================== --- /dev/null +++ flang/include/flang/Optimizer/CodeGen/CGPasses.td @@ -0,0 +1,24 @@ +//===-- CGPasses.td - code gen pass definition file --------*- tablegen -*-===// +// +// 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 file contains definitions for passes within the Optimizer/CodeGen/ +// directory. +// +//===----------------------------------------------------------------------===// + +#ifndef FLANG_OPTIMIZER_CODEGEN_PASSES +#define FLANG_OPTIMIZER_CODEGEN_PASSES + +include "mlir/Pass/PassBase.td" + +def CodeGenRewrite : FunctionPass<"cg-rewrite"> { + let summary = "Rewrite some FIR ops into their code-gen forms."; + let constructor = "fir::createFirCodeGenRewritePass()"; +} + +#endif // FLANG_OPTIMIZER_CODEGEN_PASSES Index: flang/include/flang/Optimizer/CodeGen/CMakeLists.txt =================================================================== --- /dev/null +++ flang/include/flang/Optimizer/CodeGen/CMakeLists.txt @@ -0,0 +1,6 @@ + +set(LLVM_TARGET_DEFINITIONS CGPasses.td) +mlir_tablegen(CGPasses.h.inc -gen-pass-decls) +add_public_tablegen_target(FIROptCodeGenPassIncGen) + +add_mlir_doc(Passes -gen-pass-doc OptimizerCodeGenPasses ./) Index: flang/include/flang/Optimizer/CodeGen/CodeGen.h =================================================================== --- flang/include/flang/Optimizer/CodeGen/CodeGen.h +++ flang/include/flang/Optimizer/CodeGen/CodeGen.h @@ -9,19 +9,18 @@ #ifndef OPTIMIZER_CODEGEN_CODEGEN_H #define OPTIMIZER_CODEGEN_CODEGEN_H +#include "mlir/Pass/Pass.h" +#include "mlir/Pass/PassRegistry.h" #include -namespace llvm { -class raw_ostream; -} -namespace mlir { -class Pass; -} - namespace fir { struct NameUniquer; +/// Prerequiste pass for code gen. Perform intermediate rewrites to perform +/// the code gen (to LLVM-IR dialect) conversion. +std::unique_ptr createFirCodeGenRewritePass(); + /// Convert FIR to the LLVM IR dialect std::unique_ptr createFIRToLLVMPass(NameUniquer &uniquer); @@ -29,6 +28,13 @@ std::unique_ptr createLLVMDialectToLLVMPass(llvm::raw_ostream &output); +inline void registerOptCodeGenPasses() { + using mlir::Pass; +// declarative passes +#define GEN_PASS_REGISTRATION +#include "flang/Optimizer/CodeGen/CGPasses.h.inc" +} + } // namespace fir #endif // OPTIMIZER_CODEGEN_CODEGEN_H