From: Eric Schweitz Date: Thu, 2 Jul 2020 01:40:32 +0000 (-0700) Subject: [flang] Add changes to codegen to convert it to tablegen passes. X-Git-Tag: llvmorg-12-init~1206 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ffa1f8198e6e8be6ca1044975a67e646188210da;p=platform%2Fupstream%2Fllvm.git [flang] Add changes to codegen to convert it to tablegen passes. This upstreams changes to codegen to convert the passes to the new tablegen pass support from MLIR. Differential revision: https://reviews.llvm.org/D83018 --- diff --git a/flang/include/flang/Optimizer/CMakeLists.txt b/flang/include/flang/Optimizer/CMakeLists.txt index 0ca0f41..09ad1fd 100644 --- a/flang/include/flang/Optimizer/CMakeLists.txt +++ b/flang/include/flang/Optimizer/CMakeLists.txt @@ -1 +1,2 @@ +add_subdirectory(CodeGen) add_subdirectory(Dialect) diff --git a/flang/include/flang/Optimizer/CodeGen/CGPasses.td b/flang/include/flang/Optimizer/CodeGen/CGPasses.td new file mode 100644 index 0000000..187147b --- /dev/null +++ b/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 diff --git a/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt b/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt new file mode 100644 index 0000000..ab6526e --- /dev/null +++ b/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 ./) diff --git a/flang/include/flang/Optimizer/CodeGen/CodeGen.h b/flang/include/flang/Optimizer/CodeGen/CodeGen.h index 9f6936e..9b96817 100644 --- a/flang/include/flang/Optimizer/CodeGen/CodeGen.h +++ b/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 createFIRToLLVMPass(NameUniquer &uniquer); 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