0
0
mirror of https://github.com/llvm/llvm-project.git synced 2025-04-26 18:46:06 +00:00

[flang][NFC] Split CG dialect and the passes. ()

I am making a CG pass to depend on `FIROpenACCSupport` in .
This introduces a cyclic dependency between `FIROpenACCSupport`
and `FIRCodeGen`. This patch splits `FIRCodeGen` into
`FIRCodeGenDialect` (for FIR CG dialect definition) and `FIRCodeGen`
(for the CG passes).

Now, `FIROpenACCSupport` depends on `FIRCodeGenDialect`,
and `FIRCodeGen` depends on `FIROpenACCSupport`.
This commit is contained in:
Slava Zakharin 2025-04-10 16:13:04 -07:00 committed by GitHub
parent 727f3921e7
commit 27bc8a1811
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 61 additions and 63 deletions

@ -1,8 +1,3 @@
set(LLVM_TARGET_DEFINITIONS CGOps.td)
mlir_tablegen(CGOps.h.inc -gen-op-decls)
mlir_tablegen(CGOps.cpp.inc -gen-op-defs)
add_public_tablegen_target(CGOpsIncGen)
set(LLVM_TARGET_DEFINITIONS CGPasses.td) set(LLVM_TARGET_DEFINITIONS CGPasses.td)
mlir_tablegen(CGPasses.h.inc -gen-pass-decls -name OptCodeGen) mlir_tablegen(CGPasses.h.inc -gen-pass-decls -name OptCodeGen)
add_public_tablegen_target(FIROptCodeGenPassIncGen) add_public_tablegen_target(FIROptCodeGenPassIncGen)

@ -1,4 +1,5 @@
add_subdirectory(CUF) add_subdirectory(CUF)
add_subdirectory(FIRCG)
# This replicates part of the add_mlir_dialect cmake function from MLIR that # This replicates part of the add_mlir_dialect cmake function from MLIR that
# cannot be used her because it expects to be run inside MLIR directory which # cannot be used her because it expects to be run inside MLIR directory which

@ -10,14 +10,14 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef OPTIMIZER_CODEGEN_CGOPS_H #ifndef OPTIMIZER_DIALECT_FIRCG_CGOPS_H
#define OPTIMIZER_CODEGEN_CGOPS_H #define OPTIMIZER_DIALECT_FIRCG_CGOPS_H
#include "flang/Optimizer/Dialect/FIRAttr.h" #include "flang/Optimizer/Dialect/FIRAttr.h"
#include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/Dialect/FIRType.h"
#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Func/IR/FuncOps.h"
#define GET_OP_CLASSES #define GET_OP_CLASSES
#include "flang/Optimizer/CodeGen/CGOps.h.inc" #include "flang/Optimizer/Dialect/FIRCG/CGOps.h.inc"
#endif #endif // OPTIMIZER_DIALECT_FIRCG_CGOPS_H

@ -1,4 +1,4 @@
//===-- CGOps.td - FIR operation definitions ---------------*- tablegen -*-===// //===-- CGOps.td - FIR CodeGen operation definitions -------*- tablegen -*-===//
// //
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information. // See https://llvm.org/LICENSE.txt for license information.
@ -28,7 +28,7 @@ def fircg_Dialect : Dialect {
// Base class for FIR CG operations. // Base class for FIR CG operations.
// All operations automatically get a prefix of "fircg.". // All operations automatically get a prefix of "fircg.".
class fircg_Op<string mnemonic, list<Trait> traits> class fircg_Op<string mnemonic, list<Trait> traits>
: Op<fircg_Dialect, mnemonic, traits>; : Op<fircg_Dialect, mnemonic, traits>;
// Extended embox operation. // Extended embox operation.
def fircg_XEmboxOp : fircg_Op<"ext_embox", [AttrSizedOperandSegments]> { def fircg_XEmboxOp : fircg_Op<"ext_embox", [AttrSizedOperandSegments]> {
@ -55,17 +55,12 @@ def fircg_XEmboxOp : fircg_Op<"ext_embox", [AttrSizedOperandSegments]> {
The memref and shape arguments are mandatory. The rest are optional. The memref and shape arguments are mandatory. The rest are optional.
}]; }];
let arguments = (ins let arguments = (ins AnyReferenceLike:$memref,
AnyReferenceLike:$memref, Variadic<AnyIntegerType>:$shape, Variadic<AnyIntegerType>:$shift,
Variadic<AnyIntegerType>:$shape, Variadic<AnyIntegerType>:$slice,
Variadic<AnyIntegerType>:$shift, Variadic<AnyCoordinateType>:$subcomponent,
Variadic<AnyIntegerType>:$slice, Variadic<AnyIntegerType>:$substr, Variadic<AnyIntegerType>:$lenParams,
Variadic<AnyCoordinateType>:$subcomponent, Optional<fir_ClassType>:$sourceBox, OptionalAttr<I32Attr>:$allocator_idx);
Variadic<AnyIntegerType>:$substr,
Variadic<AnyIntegerType>:$lenParams,
Optional<fir_ClassType>:$sourceBox,
OptionalAttr<I32Attr>:$allocator_idx
);
let results = (outs BoxOrClassType); let results = (outs BoxOrClassType);
let assemblyFormat = [{ let assemblyFormat = [{
@ -125,14 +120,10 @@ def fircg_XReboxOp : fircg_Op<"ext_rebox", [AttrSizedOperandSegments]> {
There must not both be a shape and slice/subcomponent arguments There must not both be a shape and slice/subcomponent arguments
}]; }];
let arguments = (ins let arguments = (ins BoxOrClassType:$box, Variadic<AnyIntegerType>:$shape,
BoxOrClassType:$box, Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$slice,
Variadic<AnyIntegerType>:$shape, Variadic<AnyCoordinateType>:$subcomponent,
Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$substr);
Variadic<AnyIntegerType>:$slice,
Variadic<AnyCoordinateType>:$subcomponent,
Variadic<AnyIntegerType>:$substr
);
let results = (outs BoxOrClassType); let results = (outs BoxOrClassType);
let assemblyFormat = [{ let assemblyFormat = [{
@ -163,9 +154,9 @@ def fircg_XReboxOp : fircg_Op<"ext_rebox", [AttrSizedOperandSegments]> {
}]; }];
} }
// Extended array coordinate operation. // Extended array coordinate operation.
def fircg_XArrayCoorOp : fircg_Op<"ext_array_coor", [AttrSizedOperandSegments]> { def fircg_XArrayCoorOp
: fircg_Op<"ext_array_coor", [AttrSizedOperandSegments]> {
let summary = "for internal conversion only"; let summary = "for internal conversion only";
let description = [{ let description = [{
@ -190,15 +181,11 @@ def fircg_XArrayCoorOp : fircg_Op<"ext_array_coor", [AttrSizedOperandSegments]>
omitted otherwise. The rest of the arguments are optional. omitted otherwise. The rest of the arguments are optional.
}]; }];
let arguments = (ins let arguments = (ins AnyRefOrBox:$memref, Variadic<AnyIntegerType>:$shape,
AnyRefOrBox:$memref, Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$slice,
Variadic<AnyIntegerType>:$shape, Variadic<AnyCoordinateType>:$subcomponent,
Variadic<AnyIntegerType>:$shift, Variadic<AnyCoordinateType>:$indices,
Variadic<AnyIntegerType>:$slice, Variadic<AnyIntegerType>:$lenParams);
Variadic<AnyCoordinateType>:$subcomponent,
Variadic<AnyCoordinateType>:$indices,
Variadic<AnyIntegerType>:$lenParams
);
let results = (outs fir_ReferenceType); let results = (outs fir_ReferenceType);
let assemblyFormat = [{ let assemblyFormat = [{
@ -239,14 +226,9 @@ def fircg_XDeclareOp : fircg_Op<"ext_declare", [AttrSizedOperandSegments]> {
be converted to an extended DeclareOp. be converted to an extended DeclareOp.
}]; }];
let arguments = (ins let arguments = (ins AnyRefOrBox:$memref, Variadic<AnyIntegerType>:$shape,
AnyRefOrBox:$memref, Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$typeparams,
Variadic<AnyIntegerType>:$shape, Optional<fir_DummyScopeType>:$dummy_scope, Builtin_StringAttr:$uniq_name);
Variadic<AnyIntegerType>:$shift,
Variadic<AnyIntegerType>:$typeparams,
Optional<fir_DummyScopeType>:$dummy_scope,
Builtin_StringAttr:$uniq_name
);
let results = (outs AnyRefOrBox); let results = (outs AnyRefOrBox);
let assemblyFormat = [{ let assemblyFormat = [{

@ -0,0 +1,4 @@
set(LLVM_TARGET_DEFINITIONS CGOps.td)
mlir_tablegen(CGOps.h.inc -gen-op-decls)
mlir_tablegen(CGOps.cpp.inc -gen-op-defs)
add_public_tablegen_target(CGOpsIncGen)

@ -33,6 +33,7 @@ add_flang_library(flangFrontend
FIRSupport FIRSupport
FIRBuilder FIRBuilder
FIRCodeGen FIRCodeGen
FIRCodeGenDialect
FIRTransforms FIRTransforms
HLFIRDialect HLFIRDialect
HLFIRTransforms HLFIRTransforms

@ -1,6 +1,5 @@
add_flang_library(FIRCodeGen add_flang_library(FIRCodeGen
BoxedProcedure.cpp BoxedProcedure.cpp
CGOps.cpp
CodeGen.cpp CodeGen.cpp
CodeGenOpenMP.cpp CodeGenOpenMP.cpp
FIROpPatterns.cpp FIROpPatterns.cpp
@ -21,13 +20,12 @@ add_flang_library(FIRCodeGen
CUFAttrs CUFAttrs
FIRAnalysis FIRAnalysis
FIRBuilder FIRBuilder
FIRCodeGenDialect
FIRDialect FIRDialect
FIRDialectSupport FIRDialectSupport
FIRSupport FIRSupport
LINK_COMPONENTS LINK_COMPONENTS
AsmParser
AsmPrinter
Remarks Remarks
TargetParser TargetParser

@ -12,11 +12,11 @@
#include "flang/Optimizer/CodeGen/CodeGen.h" #include "flang/Optimizer/CodeGen/CodeGen.h"
#include "flang/Optimizer/CodeGen/CGOps.h"
#include "flang/Optimizer/CodeGen/CodeGenOpenMP.h" #include "flang/Optimizer/CodeGen/CodeGenOpenMP.h"
#include "flang/Optimizer/CodeGen/FIROpPatterns.h" #include "flang/Optimizer/CodeGen/FIROpPatterns.h"
#include "flang/Optimizer/CodeGen/TypeConverter.h" #include "flang/Optimizer/CodeGen/TypeConverter.h"
#include "flang/Optimizer/Dialect/FIRAttr.h" #include "flang/Optimizer/Dialect/FIRAttr.h"
#include "flang/Optimizer/Dialect/FIRCG/CGOps.h"
#include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/Dialect/FIRType.h"

@ -13,7 +13,7 @@
#include "flang/Optimizer/CodeGen/CodeGen.h" #include "flang/Optimizer/CodeGen/CodeGen.h"
#include "flang/Optimizer/Builder/Todo.h" // remove when TODO's are done #include "flang/Optimizer/Builder/Todo.h" // remove when TODO's are done
#include "flang/Optimizer/CodeGen/CGOps.h" #include "flang/Optimizer/Dialect/FIRCG/CGOps.h"
#include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/Dialect/FIRType.h"

@ -1,5 +1,6 @@
add_subdirectory(Support) add_subdirectory(Support)
add_subdirectory(CUF) add_subdirectory(CUF)
add_subdirectory(FIRCG)
add_flang_library(FIRDialect add_flang_library(FIRDialect
FIRAttr.cpp FIRAttr.cpp

@ -10,7 +10,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "flang/Optimizer/CodeGen/CGOps.h" #include "flang/Optimizer/Dialect/FIRCG/CGOps.h"
#include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/Dialect/FIRType.h"
@ -20,7 +20,7 @@ fir::FIRCodeGenDialect::FIRCodeGenDialect(mlir::MLIRContext *ctx)
: mlir::Dialect("fircg", ctx, mlir::TypeID::get<FIRCodeGenDialect>()) { : mlir::Dialect("fircg", ctx, mlir::TypeID::get<FIRCodeGenDialect>()) {
addOperations< addOperations<
#define GET_OP_LIST #define GET_OP_LIST
#include "flang/Optimizer/CodeGen/CGOps.cpp.inc" #include "flang/Optimizer/Dialect/FIRCG/CGOps.cpp.inc"
>(); >();
} }
@ -30,7 +30,7 @@ fir::FIRCodeGenDialect::~FIRCodeGenDialect() {
} }
#define GET_OP_CLASSES #define GET_OP_CLASSES
#include "flang/Optimizer/CodeGen/CGOps.cpp.inc" #include "flang/Optimizer/Dialect/FIRCG/CGOps.cpp.inc"
unsigned fir::cg::XEmboxOp::getOutRank() { unsigned fir::cg::XEmboxOp::getOutRank() {
if (getSlice().empty()) if (getSlice().empty())

@ -0,0 +1,14 @@
add_flang_library(FIRCodeGenDialect
CGOps.cpp
DEPENDS
CGOpsIncGen
LINK_LIBS
FIRDialect
MLIRIR
LINK_COMPONENTS
AsmParser
AsmPrinter
)

@ -6,7 +6,6 @@ add_flang_library(FIROpenACCSupport
DEPENDS DEPENDS
FIRBuilder FIRBuilder
FIRCodeGen
FIRDialect FIRDialect
FIRDialectSupport FIRDialectSupport
FIRSupport FIRSupport
@ -14,7 +13,7 @@ add_flang_library(FIROpenACCSupport
LINK_LIBS LINK_LIBS
FIRBuilder FIRBuilder
FIRCodeGen FIRCodeGenDialect
FIRDialect FIRDialect
FIRDialectSupport FIRDialectSupport
FIRSupport FIRSupport

@ -15,7 +15,7 @@
#include "flang/Optimizer/Builder/DirectivesCommon.h" #include "flang/Optimizer/Builder/DirectivesCommon.h"
#include "flang/Optimizer/Builder/FIRBuilder.h" #include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/HLFIRTools.h" #include "flang/Optimizer/Builder/HLFIRTools.h"
#include "flang/Optimizer/CodeGen/CGOps.h" #include "flang/Optimizer/Dialect/FIRCG/CGOps.h"
#include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIROpsSupport.h" #include "flang/Optimizer/Dialect/FIROpsSupport.h"
#include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/Dialect/FIRType.h"

@ -14,7 +14,7 @@
#include "DebugTypeGenerator.h" #include "DebugTypeGenerator.h"
#include "flang/Optimizer/Builder/FIRBuilder.h" #include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Todo.h" #include "flang/Optimizer/Builder/Todo.h"
#include "flang/Optimizer/CodeGen/CGOps.h" #include "flang/Optimizer/Dialect/FIRCG/CGOps.h"
#include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIROpsSupport.h" #include "flang/Optimizer/Dialect/FIROpsSupport.h"

@ -47,6 +47,7 @@ add_flang_library(FIRTransforms
FIRAnalysis FIRAnalysis
FIRBuilder FIRBuilder
FIRCodeGen FIRCodeGen
FIRCodeGenDialect
FIRDialect FIRDialect
FIRDialectSupport FIRDialectSupport
FIRSupport FIRSupport

@ -13,8 +13,8 @@
#ifndef FORTRAN_OPTIMIZER_TRANSFORMS_DEBUGTYPEGENERATOR_H #ifndef FORTRAN_OPTIMIZER_TRANSFORMS_DEBUGTYPEGENERATOR_H
#define FORTRAN_OPTIMIZER_TRANSFORMS_DEBUGTYPEGENERATOR_H #define FORTRAN_OPTIMIZER_TRANSFORMS_DEBUGTYPEGENERATOR_H
#include "flang/Optimizer/CodeGen/CGOps.h"
#include "flang/Optimizer/CodeGen/TypeConverter.h" #include "flang/Optimizer/CodeGen/TypeConverter.h"
#include "flang/Optimizer/Dialect/FIRCG/CGOps.h"
#include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/Dialect/FIRType.h"
#include "flang/Optimizer/Dialect/Support/FIRContext.h" #include "flang/Optimizer/Dialect/Support/FIRContext.h"
#include "flang/Optimizer/Dialect/Support/KindMapping.h" #include "flang/Optimizer/Dialect/Support/KindMapping.h"

@ -18,6 +18,7 @@ target_link_libraries(fir-opt PRIVATE
FIRSupport FIRSupport
FIRTransforms FIRTransforms
FIRCodeGen FIRCodeGen
FIRCodeGenDialect
HLFIRDialect HLFIRDialect
HLFIRTransforms HLFIRTransforms
FIROpenACCSupport FIROpenACCSupport

@ -10,6 +10,7 @@ target_link_libraries(tco PRIVATE
CUFAttrs CUFAttrs
CUFDialect CUFDialect
FIRCodeGen FIRCodeGen
FIRCodeGenDialect
FIRDialect FIRDialect
FIRDialectSupport FIRDialectSupport
FIRSupport FIRSupport

@ -8,7 +8,7 @@ set(LLVM_LINK_COMPONENTS
set(LIBS set(LIBS
CUFDialect CUFDialect
FIRBuilder FIRBuilder
FIRCodeGen FIRCodeGenDialect
FIRDialect FIRDialect
FIRDialectSupport FIRDialectSupport
FIRSupport FIRSupport