Skip to content

[flang][NFC] Split CG dialect and the passes. #135240

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 10, 2025

Conversation

vzakhari
Copy link
Contributor

I am making a CG pass to depend on FIROpenACCSupport in #134346.
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.

I am making a CG pass to depend on `FIROpenACCSupport` in llvm#134346.
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`.
@llvmbot llvmbot added flang:driver flang Flang issues not falling into any other category flang:fir-hlfir openacc flang:codegen labels Apr 10, 2025
@llvmbot
Copy link
Member

llvmbot commented Apr 10, 2025

@llvm/pr-subscribers-flang-fir-hlfir
@llvm/pr-subscribers-openacc

@llvm/pr-subscribers-flang-driver

Author: Slava Zakharin (vzakhari)

Changes

I am making a CG pass to depend on FIROpenACCSupport in #134346.
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.


Full diff: https://github.com/llvm/llvm-project/pull/135240.diff

20 Files Affected:

  • (modified) flang/include/flang/Optimizer/CodeGen/CMakeLists.txt (-5)
  • (modified) flang/include/flang/Optimizer/Dialect/CMakeLists.txt (+1)
  • (renamed) flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.h (+4-4)
  • (renamed) flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td (+22-40)
  • (added) flang/include/flang/Optimizer/Dialect/FIRCG/CMakeLists.txt (+4)
  • (modified) flang/lib/Frontend/CMakeLists.txt (+1)
  • (modified) flang/lib/Optimizer/CodeGen/CMakeLists.txt (+1-3)
  • (modified) flang/lib/Optimizer/CodeGen/CodeGen.cpp (+1-1)
  • (modified) flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp (+1-1)
  • (modified) flang/lib/Optimizer/Dialect/CMakeLists.txt (+1)
  • (renamed) flang/lib/Optimizer/Dialect/FIRCG/CGOps.cpp (+3-3)
  • (added) flang/lib/Optimizer/Dialect/FIRCG/CMakeLists.txt (+14)
  • (modified) flang/lib/Optimizer/OpenACC/CMakeLists.txt (+1-2)
  • (modified) flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp (+1-1)
  • (modified) flang/lib/Optimizer/Transforms/AddDebugInfo.cpp (+1-1)
  • (modified) flang/lib/Optimizer/Transforms/CMakeLists.txt (+1)
  • (modified) flang/lib/Optimizer/Transforms/DebugTypeGenerator.h (+1-1)
  • (modified) flang/tools/fir-opt/CMakeLists.txt (+1)
  • (modified) flang/tools/tco/CMakeLists.txt (+1)
  • (modified) flang/unittests/Optimizer/CMakeLists.txt (+1-1)
diff --git a/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt b/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt
index 3eda75190ba20..f83bf5e092ca0 100644
--- a/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt
+++ b/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt
@@ -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)
 mlir_tablegen(CGPasses.h.inc -gen-pass-decls -name OptCodeGen)
 add_public_tablegen_target(FIROptCodeGenPassIncGen)
diff --git a/flang/include/flang/Optimizer/Dialect/CMakeLists.txt b/flang/include/flang/Optimizer/Dialect/CMakeLists.txt
index 73f388cbab6c9..4c02856cd5fda 100644
--- a/flang/include/flang/Optimizer/Dialect/CMakeLists.txt
+++ b/flang/include/flang/Optimizer/Dialect/CMakeLists.txt
@@ -1,4 +1,5 @@
 add_subdirectory(CUF)
+add_subdirectory(FIRCG)
 
 # 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
diff --git a/flang/include/flang/Optimizer/CodeGen/CGOps.h b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.h
similarity index 79%
rename from flang/include/flang/Optimizer/CodeGen/CGOps.h
rename to flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.h
index df909d9ee81cb..9dc11d6654f23 100644
--- a/flang/include/flang/Optimizer/CodeGen/CGOps.h
+++ b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.h
@@ -10,14 +10,14 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef OPTIMIZER_CODEGEN_CGOPS_H
-#define OPTIMIZER_CODEGEN_CGOPS_H
+#ifndef OPTIMIZER_DIALECT_FIRCG_CGOPS_H
+#define OPTIMIZER_DIALECT_FIRCG_CGOPS_H
 
 #include "flang/Optimizer/Dialect/FIRAttr.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
 #include "mlir/Dialect/Func/IR/FuncOps.h"
 
 #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
diff --git a/flang/include/flang/Optimizer/CodeGen/CGOps.td b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td
similarity index 85%
rename from flang/include/flang/Optimizer/CodeGen/CGOps.td
rename to flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td
index f65291fc64c17..d48caf1a8cb3b 100644
--- a/flang/include/flang/Optimizer/CodeGen/CGOps.td
+++ b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td
@@ -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.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -28,7 +28,7 @@ def fircg_Dialect : Dialect {
 // Base class for FIR CG operations.
 // All operations automatically get a prefix of "fircg.".
 class fircg_Op<string mnemonic, list<Trait> traits>
-  : Op<fircg_Dialect, mnemonic, traits>;
+    : Op<fircg_Dialect, mnemonic, traits>;
 
 // Extended embox operation.
 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.
   }];
 
-  let arguments = (ins
-    AnyReferenceLike:$memref,
-    Variadic<AnyIntegerType>:$shape,
-    Variadic<AnyIntegerType>:$shift,
-    Variadic<AnyIntegerType>:$slice,
-    Variadic<AnyCoordinateType>:$subcomponent,
-    Variadic<AnyIntegerType>:$substr,
-    Variadic<AnyIntegerType>:$lenParams,
-    Optional<fir_ClassType>:$sourceBox,
-    OptionalAttr<I32Attr>:$allocator_idx
-  );
+  let arguments = (ins AnyReferenceLike:$memref,
+      Variadic<AnyIntegerType>:$shape, Variadic<AnyIntegerType>:$shift,
+      Variadic<AnyIntegerType>:$slice,
+      Variadic<AnyCoordinateType>:$subcomponent,
+      Variadic<AnyIntegerType>:$substr, Variadic<AnyIntegerType>:$lenParams,
+      Optional<fir_ClassType>:$sourceBox, OptionalAttr<I32Attr>:$allocator_idx);
   let results = (outs BoxOrClassType);
 
   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
   }];
 
-  let arguments = (ins
-    BoxOrClassType:$box,
-    Variadic<AnyIntegerType>:$shape,
-    Variadic<AnyIntegerType>:$shift,
-    Variadic<AnyIntegerType>:$slice,
-    Variadic<AnyCoordinateType>:$subcomponent,
-    Variadic<AnyIntegerType>:$substr
-  );
+  let arguments = (ins BoxOrClassType:$box, Variadic<AnyIntegerType>:$shape,
+      Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$slice,
+      Variadic<AnyCoordinateType>:$subcomponent,
+      Variadic<AnyIntegerType>:$substr);
   let results = (outs BoxOrClassType);
 
   let assemblyFormat = [{
@@ -163,9 +154,9 @@ def fircg_XReboxOp : fircg_Op<"ext_rebox", [AttrSizedOperandSegments]> {
   }];
 }
 
-
 // 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 description = [{
@@ -190,15 +181,11 @@ def fircg_XArrayCoorOp : fircg_Op<"ext_array_coor", [AttrSizedOperandSegments]>
     omitted otherwise. The rest of the arguments are optional.
   }];
 
-  let arguments = (ins
-    AnyRefOrBox:$memref,
-    Variadic<AnyIntegerType>:$shape,
-    Variadic<AnyIntegerType>:$shift,
-    Variadic<AnyIntegerType>:$slice,
-    Variadic<AnyCoordinateType>:$subcomponent,
-    Variadic<AnyCoordinateType>:$indices,
-    Variadic<AnyIntegerType>:$lenParams
-  );
+  let arguments = (ins AnyRefOrBox:$memref, Variadic<AnyIntegerType>:$shape,
+      Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$slice,
+      Variadic<AnyCoordinateType>:$subcomponent,
+      Variadic<AnyCoordinateType>:$indices,
+      Variadic<AnyIntegerType>:$lenParams);
   let results = (outs fir_ReferenceType);
 
   let assemblyFormat = [{
@@ -239,14 +226,9 @@ def fircg_XDeclareOp : fircg_Op<"ext_declare", [AttrSizedOperandSegments]> {
     be converted to an extended DeclareOp.
   }];
 
-  let arguments = (ins
-    AnyRefOrBox:$memref,
-    Variadic<AnyIntegerType>:$shape,
-    Variadic<AnyIntegerType>:$shift,
-    Variadic<AnyIntegerType>:$typeparams,
-    Optional<fir_DummyScopeType>:$dummy_scope,
-    Builtin_StringAttr:$uniq_name
-  );
+  let arguments = (ins AnyRefOrBox:$memref, Variadic<AnyIntegerType>:$shape,
+      Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$typeparams,
+      Optional<fir_DummyScopeType>:$dummy_scope, Builtin_StringAttr:$uniq_name);
   let results = (outs AnyRefOrBox);
 
   let assemblyFormat = [{
diff --git a/flang/include/flang/Optimizer/Dialect/FIRCG/CMakeLists.txt b/flang/include/flang/Optimizer/Dialect/FIRCG/CMakeLists.txt
new file mode 100644
index 0000000000000..21f011dcca43a
--- /dev/null
+++ b/flang/include/flang/Optimizer/Dialect/FIRCG/CMakeLists.txt
@@ -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)
diff --git a/flang/lib/Frontend/CMakeLists.txt b/flang/lib/Frontend/CMakeLists.txt
index c80373799b015..f05b0403adfd5 100644
--- a/flang/lib/Frontend/CMakeLists.txt
+++ b/flang/lib/Frontend/CMakeLists.txt
@@ -33,6 +33,7 @@ add_flang_library(flangFrontend
   FIRSupport
   FIRBuilder
   FIRCodeGen
+  FIRCodeGenDialect
   FIRTransforms
   HLFIRDialect
   HLFIRTransforms
diff --git a/flang/lib/Optimizer/CodeGen/CMakeLists.txt b/flang/lib/Optimizer/CodeGen/CMakeLists.txt
index f730c7fd03948..ed4e8b9ae87ed 100644
--- a/flang/lib/Optimizer/CodeGen/CMakeLists.txt
+++ b/flang/lib/Optimizer/CodeGen/CMakeLists.txt
@@ -1,6 +1,5 @@
 add_flang_library(FIRCodeGen
   BoxedProcedure.cpp
-  CGOps.cpp
   CodeGen.cpp
   CodeGenOpenMP.cpp
   FIROpPatterns.cpp
@@ -21,13 +20,12 @@ add_flang_library(FIRCodeGen
   CUFAttrs
   FIRAnalysis
   FIRBuilder
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport
 
   LINK_COMPONENTS
-  AsmParser
-  AsmPrinter
   Remarks
   TargetParser
 
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index b54b497ee4ba1..907cac2bcaf65 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -12,11 +12,11 @@
 
 #include "flang/Optimizer/CodeGen/CodeGen.h"
 
-#include "flang/Optimizer/CodeGen/CGOps.h"
 #include "flang/Optimizer/CodeGen/CodeGenOpenMP.h"
 #include "flang/Optimizer/CodeGen/FIROpPatterns.h"
 #include "flang/Optimizer/CodeGen/TypeConverter.h"
 #include "flang/Optimizer/Dialect/FIRAttr.h"
+#include "flang/Optimizer/Dialect/FIRCG/CGOps.h"
 #include "flang/Optimizer/Dialect/FIRDialect.h"
 #include "flang/Optimizer/Dialect/FIROps.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
diff --git a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
index 86b81d8d652b2..d09d7d397e8b7 100644
--- a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
+++ b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
@@ -13,7 +13,7 @@
 #include "flang/Optimizer/CodeGen/CodeGen.h"
 
 #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/FIROps.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
diff --git a/flang/lib/Optimizer/Dialect/CMakeLists.txt b/flang/lib/Optimizer/Dialect/CMakeLists.txt
index 61f9c6110491e..6afb993e52c54 100644
--- a/flang/lib/Optimizer/Dialect/CMakeLists.txt
+++ b/flang/lib/Optimizer/Dialect/CMakeLists.txt
@@ -1,5 +1,6 @@
 add_subdirectory(Support)
 add_subdirectory(CUF)
+add_subdirectory(FIRCG)
 
 add_flang_library(FIRDialect
   FIRAttr.cpp
diff --git a/flang/lib/Optimizer/CodeGen/CGOps.cpp b/flang/lib/Optimizer/Dialect/FIRCG/CGOps.cpp
similarity index 92%
rename from flang/lib/Optimizer/CodeGen/CGOps.cpp
rename to flang/lib/Optimizer/Dialect/FIRCG/CGOps.cpp
index 6b8ba74525556..19ad6bed512c7 100644
--- a/flang/lib/Optimizer/CodeGen/CGOps.cpp
+++ b/flang/lib/Optimizer/Dialect/FIRCG/CGOps.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/FIROps.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>()) {
   addOperations<
 #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
-#include "flang/Optimizer/CodeGen/CGOps.cpp.inc"
+#include "flang/Optimizer/Dialect/FIRCG/CGOps.cpp.inc"
 
 unsigned fir::cg::XEmboxOp::getOutRank() {
   if (getSlice().empty())
diff --git a/flang/lib/Optimizer/Dialect/FIRCG/CMakeLists.txt b/flang/lib/Optimizer/Dialect/FIRCG/CMakeLists.txt
new file mode 100644
index 0000000000000..107d567056b59
--- /dev/null
+++ b/flang/lib/Optimizer/Dialect/FIRCG/CMakeLists.txt
@@ -0,0 +1,14 @@
+add_flang_library(FIRCodeGenDialect
+  CGOps.cpp
+
+  DEPENDS
+  CGOpsIncGen
+
+  LINK_LIBS
+  FIRDialect
+  MLIRIR
+
+  LINK_COMPONENTS
+  AsmParser
+  AsmPrinter
+  )
diff --git a/flang/lib/Optimizer/OpenACC/CMakeLists.txt b/flang/lib/Optimizer/OpenACC/CMakeLists.txt
index 4a09133fc110d..5ce5796872357 100644
--- a/flang/lib/Optimizer/OpenACC/CMakeLists.txt
+++ b/flang/lib/Optimizer/OpenACC/CMakeLists.txt
@@ -6,7 +6,6 @@ add_flang_library(FIROpenACCSupport
 
   DEPENDS
   FIRBuilder
-  FIRCodeGen
   FIRDialect
   FIRDialectSupport
   FIRSupport
@@ -14,7 +13,7 @@ add_flang_library(FIROpenACCSupport
 
   LINK_LIBS
   FIRBuilder
-  FIRCodeGen
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport
diff --git a/flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp b/flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp
index 0ebc62e7f2fd6..38c9fc5bbb52c 100644
--- a/flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp
+++ b/flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp
@@ -15,7 +15,7 @@
 #include "flang/Optimizer/Builder/DirectivesCommon.h"
 #include "flang/Optimizer/Builder/FIRBuilder.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/FIROpsSupport.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
diff --git a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
index e9a94efcdd675..c479c1a0892b5 100644
--- a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
+++ b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
@@ -14,7 +14,7 @@
 #include "DebugTypeGenerator.h"
 #include "flang/Optimizer/Builder/FIRBuilder.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/FIROps.h"
 #include "flang/Optimizer/Dialect/FIROpsSupport.h"
diff --git a/flang/lib/Optimizer/Transforms/CMakeLists.txt b/flang/lib/Optimizer/Transforms/CMakeLists.txt
index ca08e4607e019..170b6e2cca225 100644
--- a/flang/lib/Optimizer/Transforms/CMakeLists.txt
+++ b/flang/lib/Optimizer/Transforms/CMakeLists.txt
@@ -47,6 +47,7 @@ add_flang_library(FIRTransforms
   FIRAnalysis
   FIRBuilder
   FIRCodeGen
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport
diff --git a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h
index cc4b5428ee1a9..93b9ac2d90fdf 100644
--- a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h
+++ b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h
@@ -13,8 +13,8 @@
 #ifndef 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/Dialect/FIRCG/CGOps.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
 #include "flang/Optimizer/Dialect/Support/FIRContext.h"
 #include "flang/Optimizer/Dialect/Support/KindMapping.h"
diff --git a/flang/tools/fir-opt/CMakeLists.txt b/flang/tools/fir-opt/CMakeLists.txt
index efbde329b8b8c..20a47b63770a5 100644
--- a/flang/tools/fir-opt/CMakeLists.txt
+++ b/flang/tools/fir-opt/CMakeLists.txt
@@ -18,6 +18,7 @@ target_link_libraries(fir-opt PRIVATE
   FIRSupport
   FIRTransforms
   FIRCodeGen
+  FIRCodeGenDialect
   HLFIRDialect
   HLFIRTransforms
   FIROpenACCSupport
diff --git a/flang/tools/tco/CMakeLists.txt b/flang/tools/tco/CMakeLists.txt
index c277cdbf167b6..fcbedb0893d1e 100644
--- a/flang/tools/tco/CMakeLists.txt
+++ b/flang/tools/tco/CMakeLists.txt
@@ -10,6 +10,7 @@ target_link_libraries(tco PRIVATE
   CUFAttrs
   CUFDialect
   FIRCodeGen
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport
diff --git a/flang/unittests/Optimizer/CMakeLists.txt b/flang/unittests/Optimizer/CMakeLists.txt
index 1289341619118..a84d54d96102a 100644
--- a/flang/unittests/Optimizer/CMakeLists.txt
+++ b/flang/unittests/Optimizer/CMakeLists.txt
@@ -8,7 +8,7 @@ set(LLVM_LINK_COMPONENTS
 set(LIBS
   CUFDialect
   FIRBuilder
-  FIRCodeGen
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport

@llvmbot
Copy link
Member

llvmbot commented Apr 10, 2025

@llvm/pr-subscribers-flang-codegen

Author: Slava Zakharin (vzakhari)

Changes

I am making a CG pass to depend on FIROpenACCSupport in #134346.
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.


Full diff: https://github.com/llvm/llvm-project/pull/135240.diff

20 Files Affected:

  • (modified) flang/include/flang/Optimizer/CodeGen/CMakeLists.txt (-5)
  • (modified) flang/include/flang/Optimizer/Dialect/CMakeLists.txt (+1)
  • (renamed) flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.h (+4-4)
  • (renamed) flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td (+22-40)
  • (added) flang/include/flang/Optimizer/Dialect/FIRCG/CMakeLists.txt (+4)
  • (modified) flang/lib/Frontend/CMakeLists.txt (+1)
  • (modified) flang/lib/Optimizer/CodeGen/CMakeLists.txt (+1-3)
  • (modified) flang/lib/Optimizer/CodeGen/CodeGen.cpp (+1-1)
  • (modified) flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp (+1-1)
  • (modified) flang/lib/Optimizer/Dialect/CMakeLists.txt (+1)
  • (renamed) flang/lib/Optimizer/Dialect/FIRCG/CGOps.cpp (+3-3)
  • (added) flang/lib/Optimizer/Dialect/FIRCG/CMakeLists.txt (+14)
  • (modified) flang/lib/Optimizer/OpenACC/CMakeLists.txt (+1-2)
  • (modified) flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp (+1-1)
  • (modified) flang/lib/Optimizer/Transforms/AddDebugInfo.cpp (+1-1)
  • (modified) flang/lib/Optimizer/Transforms/CMakeLists.txt (+1)
  • (modified) flang/lib/Optimizer/Transforms/DebugTypeGenerator.h (+1-1)
  • (modified) flang/tools/fir-opt/CMakeLists.txt (+1)
  • (modified) flang/tools/tco/CMakeLists.txt (+1)
  • (modified) flang/unittests/Optimizer/CMakeLists.txt (+1-1)
diff --git a/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt b/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt
index 3eda75190ba20..f83bf5e092ca0 100644
--- a/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt
+++ b/flang/include/flang/Optimizer/CodeGen/CMakeLists.txt
@@ -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)
 mlir_tablegen(CGPasses.h.inc -gen-pass-decls -name OptCodeGen)
 add_public_tablegen_target(FIROptCodeGenPassIncGen)
diff --git a/flang/include/flang/Optimizer/Dialect/CMakeLists.txt b/flang/include/flang/Optimizer/Dialect/CMakeLists.txt
index 73f388cbab6c9..4c02856cd5fda 100644
--- a/flang/include/flang/Optimizer/Dialect/CMakeLists.txt
+++ b/flang/include/flang/Optimizer/Dialect/CMakeLists.txt
@@ -1,4 +1,5 @@
 add_subdirectory(CUF)
+add_subdirectory(FIRCG)
 
 # 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
diff --git a/flang/include/flang/Optimizer/CodeGen/CGOps.h b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.h
similarity index 79%
rename from flang/include/flang/Optimizer/CodeGen/CGOps.h
rename to flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.h
index df909d9ee81cb..9dc11d6654f23 100644
--- a/flang/include/flang/Optimizer/CodeGen/CGOps.h
+++ b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.h
@@ -10,14 +10,14 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef OPTIMIZER_CODEGEN_CGOPS_H
-#define OPTIMIZER_CODEGEN_CGOPS_H
+#ifndef OPTIMIZER_DIALECT_FIRCG_CGOPS_H
+#define OPTIMIZER_DIALECT_FIRCG_CGOPS_H
 
 #include "flang/Optimizer/Dialect/FIRAttr.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
 #include "mlir/Dialect/Func/IR/FuncOps.h"
 
 #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
diff --git a/flang/include/flang/Optimizer/CodeGen/CGOps.td b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td
similarity index 85%
rename from flang/include/flang/Optimizer/CodeGen/CGOps.td
rename to flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td
index f65291fc64c17..d48caf1a8cb3b 100644
--- a/flang/include/flang/Optimizer/CodeGen/CGOps.td
+++ b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td
@@ -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.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -28,7 +28,7 @@ def fircg_Dialect : Dialect {
 // Base class for FIR CG operations.
 // All operations automatically get a prefix of "fircg.".
 class fircg_Op<string mnemonic, list<Trait> traits>
-  : Op<fircg_Dialect, mnemonic, traits>;
+    : Op<fircg_Dialect, mnemonic, traits>;
 
 // Extended embox operation.
 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.
   }];
 
-  let arguments = (ins
-    AnyReferenceLike:$memref,
-    Variadic<AnyIntegerType>:$shape,
-    Variadic<AnyIntegerType>:$shift,
-    Variadic<AnyIntegerType>:$slice,
-    Variadic<AnyCoordinateType>:$subcomponent,
-    Variadic<AnyIntegerType>:$substr,
-    Variadic<AnyIntegerType>:$lenParams,
-    Optional<fir_ClassType>:$sourceBox,
-    OptionalAttr<I32Attr>:$allocator_idx
-  );
+  let arguments = (ins AnyReferenceLike:$memref,
+      Variadic<AnyIntegerType>:$shape, Variadic<AnyIntegerType>:$shift,
+      Variadic<AnyIntegerType>:$slice,
+      Variadic<AnyCoordinateType>:$subcomponent,
+      Variadic<AnyIntegerType>:$substr, Variadic<AnyIntegerType>:$lenParams,
+      Optional<fir_ClassType>:$sourceBox, OptionalAttr<I32Attr>:$allocator_idx);
   let results = (outs BoxOrClassType);
 
   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
   }];
 
-  let arguments = (ins
-    BoxOrClassType:$box,
-    Variadic<AnyIntegerType>:$shape,
-    Variadic<AnyIntegerType>:$shift,
-    Variadic<AnyIntegerType>:$slice,
-    Variadic<AnyCoordinateType>:$subcomponent,
-    Variadic<AnyIntegerType>:$substr
-  );
+  let arguments = (ins BoxOrClassType:$box, Variadic<AnyIntegerType>:$shape,
+      Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$slice,
+      Variadic<AnyCoordinateType>:$subcomponent,
+      Variadic<AnyIntegerType>:$substr);
   let results = (outs BoxOrClassType);
 
   let assemblyFormat = [{
@@ -163,9 +154,9 @@ def fircg_XReboxOp : fircg_Op<"ext_rebox", [AttrSizedOperandSegments]> {
   }];
 }
 
-
 // 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 description = [{
@@ -190,15 +181,11 @@ def fircg_XArrayCoorOp : fircg_Op<"ext_array_coor", [AttrSizedOperandSegments]>
     omitted otherwise. The rest of the arguments are optional.
   }];
 
-  let arguments = (ins
-    AnyRefOrBox:$memref,
-    Variadic<AnyIntegerType>:$shape,
-    Variadic<AnyIntegerType>:$shift,
-    Variadic<AnyIntegerType>:$slice,
-    Variadic<AnyCoordinateType>:$subcomponent,
-    Variadic<AnyCoordinateType>:$indices,
-    Variadic<AnyIntegerType>:$lenParams
-  );
+  let arguments = (ins AnyRefOrBox:$memref, Variadic<AnyIntegerType>:$shape,
+      Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$slice,
+      Variadic<AnyCoordinateType>:$subcomponent,
+      Variadic<AnyCoordinateType>:$indices,
+      Variadic<AnyIntegerType>:$lenParams);
   let results = (outs fir_ReferenceType);
 
   let assemblyFormat = [{
@@ -239,14 +226,9 @@ def fircg_XDeclareOp : fircg_Op<"ext_declare", [AttrSizedOperandSegments]> {
     be converted to an extended DeclareOp.
   }];
 
-  let arguments = (ins
-    AnyRefOrBox:$memref,
-    Variadic<AnyIntegerType>:$shape,
-    Variadic<AnyIntegerType>:$shift,
-    Variadic<AnyIntegerType>:$typeparams,
-    Optional<fir_DummyScopeType>:$dummy_scope,
-    Builtin_StringAttr:$uniq_name
-  );
+  let arguments = (ins AnyRefOrBox:$memref, Variadic<AnyIntegerType>:$shape,
+      Variadic<AnyIntegerType>:$shift, Variadic<AnyIntegerType>:$typeparams,
+      Optional<fir_DummyScopeType>:$dummy_scope, Builtin_StringAttr:$uniq_name);
   let results = (outs AnyRefOrBox);
 
   let assemblyFormat = [{
diff --git a/flang/include/flang/Optimizer/Dialect/FIRCG/CMakeLists.txt b/flang/include/flang/Optimizer/Dialect/FIRCG/CMakeLists.txt
new file mode 100644
index 0000000000000..21f011dcca43a
--- /dev/null
+++ b/flang/include/flang/Optimizer/Dialect/FIRCG/CMakeLists.txt
@@ -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)
diff --git a/flang/lib/Frontend/CMakeLists.txt b/flang/lib/Frontend/CMakeLists.txt
index c80373799b015..f05b0403adfd5 100644
--- a/flang/lib/Frontend/CMakeLists.txt
+++ b/flang/lib/Frontend/CMakeLists.txt
@@ -33,6 +33,7 @@ add_flang_library(flangFrontend
   FIRSupport
   FIRBuilder
   FIRCodeGen
+  FIRCodeGenDialect
   FIRTransforms
   HLFIRDialect
   HLFIRTransforms
diff --git a/flang/lib/Optimizer/CodeGen/CMakeLists.txt b/flang/lib/Optimizer/CodeGen/CMakeLists.txt
index f730c7fd03948..ed4e8b9ae87ed 100644
--- a/flang/lib/Optimizer/CodeGen/CMakeLists.txt
+++ b/flang/lib/Optimizer/CodeGen/CMakeLists.txt
@@ -1,6 +1,5 @@
 add_flang_library(FIRCodeGen
   BoxedProcedure.cpp
-  CGOps.cpp
   CodeGen.cpp
   CodeGenOpenMP.cpp
   FIROpPatterns.cpp
@@ -21,13 +20,12 @@ add_flang_library(FIRCodeGen
   CUFAttrs
   FIRAnalysis
   FIRBuilder
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport
 
   LINK_COMPONENTS
-  AsmParser
-  AsmPrinter
   Remarks
   TargetParser
 
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index b54b497ee4ba1..907cac2bcaf65 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -12,11 +12,11 @@
 
 #include "flang/Optimizer/CodeGen/CodeGen.h"
 
-#include "flang/Optimizer/CodeGen/CGOps.h"
 #include "flang/Optimizer/CodeGen/CodeGenOpenMP.h"
 #include "flang/Optimizer/CodeGen/FIROpPatterns.h"
 #include "flang/Optimizer/CodeGen/TypeConverter.h"
 #include "flang/Optimizer/Dialect/FIRAttr.h"
+#include "flang/Optimizer/Dialect/FIRCG/CGOps.h"
 #include "flang/Optimizer/Dialect/FIRDialect.h"
 #include "flang/Optimizer/Dialect/FIROps.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
diff --git a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
index 86b81d8d652b2..d09d7d397e8b7 100644
--- a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
+++ b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
@@ -13,7 +13,7 @@
 #include "flang/Optimizer/CodeGen/CodeGen.h"
 
 #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/FIROps.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
diff --git a/flang/lib/Optimizer/Dialect/CMakeLists.txt b/flang/lib/Optimizer/Dialect/CMakeLists.txt
index 61f9c6110491e..6afb993e52c54 100644
--- a/flang/lib/Optimizer/Dialect/CMakeLists.txt
+++ b/flang/lib/Optimizer/Dialect/CMakeLists.txt
@@ -1,5 +1,6 @@
 add_subdirectory(Support)
 add_subdirectory(CUF)
+add_subdirectory(FIRCG)
 
 add_flang_library(FIRDialect
   FIRAttr.cpp
diff --git a/flang/lib/Optimizer/CodeGen/CGOps.cpp b/flang/lib/Optimizer/Dialect/FIRCG/CGOps.cpp
similarity index 92%
rename from flang/lib/Optimizer/CodeGen/CGOps.cpp
rename to flang/lib/Optimizer/Dialect/FIRCG/CGOps.cpp
index 6b8ba74525556..19ad6bed512c7 100644
--- a/flang/lib/Optimizer/CodeGen/CGOps.cpp
+++ b/flang/lib/Optimizer/Dialect/FIRCG/CGOps.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/FIROps.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>()) {
   addOperations<
 #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
-#include "flang/Optimizer/CodeGen/CGOps.cpp.inc"
+#include "flang/Optimizer/Dialect/FIRCG/CGOps.cpp.inc"
 
 unsigned fir::cg::XEmboxOp::getOutRank() {
   if (getSlice().empty())
diff --git a/flang/lib/Optimizer/Dialect/FIRCG/CMakeLists.txt b/flang/lib/Optimizer/Dialect/FIRCG/CMakeLists.txt
new file mode 100644
index 0000000000000..107d567056b59
--- /dev/null
+++ b/flang/lib/Optimizer/Dialect/FIRCG/CMakeLists.txt
@@ -0,0 +1,14 @@
+add_flang_library(FIRCodeGenDialect
+  CGOps.cpp
+
+  DEPENDS
+  CGOpsIncGen
+
+  LINK_LIBS
+  FIRDialect
+  MLIRIR
+
+  LINK_COMPONENTS
+  AsmParser
+  AsmPrinter
+  )
diff --git a/flang/lib/Optimizer/OpenACC/CMakeLists.txt b/flang/lib/Optimizer/OpenACC/CMakeLists.txt
index 4a09133fc110d..5ce5796872357 100644
--- a/flang/lib/Optimizer/OpenACC/CMakeLists.txt
+++ b/flang/lib/Optimizer/OpenACC/CMakeLists.txt
@@ -6,7 +6,6 @@ add_flang_library(FIROpenACCSupport
 
   DEPENDS
   FIRBuilder
-  FIRCodeGen
   FIRDialect
   FIRDialectSupport
   FIRSupport
@@ -14,7 +13,7 @@ add_flang_library(FIROpenACCSupport
 
   LINK_LIBS
   FIRBuilder
-  FIRCodeGen
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport
diff --git a/flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp b/flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp
index 0ebc62e7f2fd6..38c9fc5bbb52c 100644
--- a/flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp
+++ b/flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp
@@ -15,7 +15,7 @@
 #include "flang/Optimizer/Builder/DirectivesCommon.h"
 #include "flang/Optimizer/Builder/FIRBuilder.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/FIROpsSupport.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
diff --git a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
index e9a94efcdd675..c479c1a0892b5 100644
--- a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
+++ b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
@@ -14,7 +14,7 @@
 #include "DebugTypeGenerator.h"
 #include "flang/Optimizer/Builder/FIRBuilder.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/FIROps.h"
 #include "flang/Optimizer/Dialect/FIROpsSupport.h"
diff --git a/flang/lib/Optimizer/Transforms/CMakeLists.txt b/flang/lib/Optimizer/Transforms/CMakeLists.txt
index ca08e4607e019..170b6e2cca225 100644
--- a/flang/lib/Optimizer/Transforms/CMakeLists.txt
+++ b/flang/lib/Optimizer/Transforms/CMakeLists.txt
@@ -47,6 +47,7 @@ add_flang_library(FIRTransforms
   FIRAnalysis
   FIRBuilder
   FIRCodeGen
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport
diff --git a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h
index cc4b5428ee1a9..93b9ac2d90fdf 100644
--- a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h
+++ b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h
@@ -13,8 +13,8 @@
 #ifndef 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/Dialect/FIRCG/CGOps.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
 #include "flang/Optimizer/Dialect/Support/FIRContext.h"
 #include "flang/Optimizer/Dialect/Support/KindMapping.h"
diff --git a/flang/tools/fir-opt/CMakeLists.txt b/flang/tools/fir-opt/CMakeLists.txt
index efbde329b8b8c..20a47b63770a5 100644
--- a/flang/tools/fir-opt/CMakeLists.txt
+++ b/flang/tools/fir-opt/CMakeLists.txt
@@ -18,6 +18,7 @@ target_link_libraries(fir-opt PRIVATE
   FIRSupport
   FIRTransforms
   FIRCodeGen
+  FIRCodeGenDialect
   HLFIRDialect
   HLFIRTransforms
   FIROpenACCSupport
diff --git a/flang/tools/tco/CMakeLists.txt b/flang/tools/tco/CMakeLists.txt
index c277cdbf167b6..fcbedb0893d1e 100644
--- a/flang/tools/tco/CMakeLists.txt
+++ b/flang/tools/tco/CMakeLists.txt
@@ -10,6 +10,7 @@ target_link_libraries(tco PRIVATE
   CUFAttrs
   CUFDialect
   FIRCodeGen
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport
diff --git a/flang/unittests/Optimizer/CMakeLists.txt b/flang/unittests/Optimizer/CMakeLists.txt
index 1289341619118..a84d54d96102a 100644
--- a/flang/unittests/Optimizer/CMakeLists.txt
+++ b/flang/unittests/Optimizer/CMakeLists.txt
@@ -8,7 +8,7 @@ set(LLVM_LINK_COMPONENTS
 set(LIBS
   CUFDialect
   FIRBuilder
-  FIRCodeGen
+  FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
   FIRSupport

Copy link
Contributor

@clementval clementval left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks Slava

Copy link
Contributor

@razvanlupusoru razvanlupusoru left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Outstanding! Happy to see this.

@vzakhari vzakhari merged commit 27bc8a1 into llvm:main Apr 10, 2025
17 checks passed
mgorny added a commit that referenced this pull request Apr 14, 2025
Fix regression to MLIR dylib support introduced in #135240. Without the
fix, the build with no static libraries fails:

```
FAILED: bin/fir-opt 
: && /usr/lib/ccache/bin/x86_64-pc-linux-gnu-g++ -O2 -pipe -march=native -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-strict-aliasing -fno-semantic-interposition -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs    -Wl,-rpath-link,/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang_build/lib  -Wl,--gc-sections  -Wl,--dependency-file=tools/fir-opt/CMakeFiles/fir-opt.dir/link.d tools/fir-opt/CMakeFiles/fir-opt.dir/fir-opt.cpp.o -o bin/fir-opt -L/usr/lib/llvm/21/lib64 -Wl,-rpath,"\$ORIGIN/../lib64:/usr/lib/llvm/21/lib64:"  lib/libCUFAttrs.a  lib/libCUFDialect.a  lib/libFIRDialect.a  lib/libFIRSupport.a  lib/libFIRTransforms.a  lib/libFIRCodeGen.a  lib/libFIRCodeGenDialect.a  lib/libHLFIRDialect.a  lib/libHLFIRTransforms.a  lib/libFIROpenACCSupport.a  lib/libFIROpenMPSupport.a  lib/libFlangOpenMPTransforms.a  lib/libFIRAnalysis.a  lib/libFIRTransforms.a  lib/libFIRCodeGen.a  lib/libFIROpenACCSupport.a  lib/libFIRCodeGenDialect.a  -lMLIRIR  lib/libFIROpenMPSupport.a  lib/libFIRAnalysis.a  lib/libFIRBuilder.a  lib/libCUFDialect.a  lib/libFIRSupport.a  lib/libHLFIRDialect.a  lib/libFIRDialect.a  lib/libCUFAttrs.a  lib/libFIRDialectSupport.a  lib/libFortranEvaluate.a  lib/libFortranDecimal.a  lib/libFortranParser.a  lib/libFortranSupport.a  /usr/lib/llvm/21/lib64/libMLIR.so.21.0gitfa4ac19f  /usr/lib/llvm/21/lib64/libclang-cpp.so.21.0gitfa4ac19f  /usr/lib/llvm/21/lib64/libLLVM.so.21.0gitfa4ac19f  -lquadmath && :
/usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lMLIRIR: No such file or directory
collect2: error: ld returned 1 exit status
```
var-const pushed a commit to ldionne/llvm-project that referenced this pull request Apr 17, 2025
I am making a CG pass to depend on `FIROpenACCSupport` in llvm#134346.
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`.
var-const pushed a commit to ldionne/llvm-project that referenced this pull request Apr 17, 2025
Fix regression to MLIR dylib support introduced in llvm#135240. Without the
fix, the build with no static libraries fails:

```
FAILED: bin/fir-opt 
: && /usr/lib/ccache/bin/x86_64-pc-linux-gnu-g++ -O2 -pipe -march=native -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-strict-aliasing -fno-semantic-interposition -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs    -Wl,-rpath-link,/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang_build/lib  -Wl,--gc-sections  -Wl,--dependency-file=tools/fir-opt/CMakeFiles/fir-opt.dir/link.d tools/fir-opt/CMakeFiles/fir-opt.dir/fir-opt.cpp.o -o bin/fir-opt -L/usr/lib/llvm/21/lib64 -Wl,-rpath,"\$ORIGIN/../lib64:/usr/lib/llvm/21/lib64:"  lib/libCUFAttrs.a  lib/libCUFDialect.a  lib/libFIRDialect.a  lib/libFIRSupport.a  lib/libFIRTransforms.a  lib/libFIRCodeGen.a  lib/libFIRCodeGenDialect.a  lib/libHLFIRDialect.a  lib/libHLFIRTransforms.a  lib/libFIROpenACCSupport.a  lib/libFIROpenMPSupport.a  lib/libFlangOpenMPTransforms.a  lib/libFIRAnalysis.a  lib/libFIRTransforms.a  lib/libFIRCodeGen.a  lib/libFIROpenACCSupport.a  lib/libFIRCodeGenDialect.a  -lMLIRIR  lib/libFIROpenMPSupport.a  lib/libFIRAnalysis.a  lib/libFIRBuilder.a  lib/libCUFDialect.a  lib/libFIRSupport.a  lib/libHLFIRDialect.a  lib/libFIRDialect.a  lib/libCUFAttrs.a  lib/libFIRDialectSupport.a  lib/libFortranEvaluate.a  lib/libFortranDecimal.a  lib/libFortranParser.a  lib/libFortranSupport.a  /usr/lib/llvm/21/lib64/libMLIR.so.21.0gitfa4ac19f  /usr/lib/llvm/21/lib64/libclang-cpp.so.21.0gitfa4ac19f  /usr/lib/llvm/21/lib64/libLLVM.so.21.0gitfa4ac19f  -lquadmath && :
/usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lMLIRIR: No such file or directory
collect2: error: ld returned 1 exit status
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
flang:codegen flang:driver flang:fir-hlfir flang Flang issues not falling into any other category openacc
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants