[fir] Split FIROptimizer lib into several smaller libraries

Partition libFIROptimizer into smaller libraries that reflect the
structure. Adapt potential problems.

This patch is part of the upstreaming effort from fir-dev branch. It's a
building stone to upstreaming transformations.

Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>

Reviewed By: schweitz

Differential Revision: https://reviews.llvm.org/D111055

GitOrigin-RevId: c2eff3d5b931191d77fe391f93e50283a4c88739
diff --git a/lib/Lower/CMakeLists.txt b/lib/Lower/CMakeLists.txt
index 07b87ef..27e54d4 100644
--- a/lib/Lower/CMakeLists.txt
+++ b/lib/Lower/CMakeLists.txt
@@ -17,11 +17,15 @@
   PFTBuilder.cpp
 
   DEPENDS
-  FIROptimizer
+  FIRDialect
+  FIRSupport
+  FIRTransforms
   ${dialect_libs}
 
   LINK_LIBS
-  FIROptimizer
+  FIRDialect
+  FIRSupport
+  FIRTransforms
   ${dialect_libs}
   FortranCommon
   FortranParser
diff --git a/lib/Optimizer/CMakeLists.txt b/lib/Optimizer/CMakeLists.txt
index b83d6a0..4b37a18 100644
--- a/lib/Optimizer/CMakeLists.txt
+++ b/lib/Optimizer/CMakeLists.txt
@@ -1,34 +1,4 @@
-get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
-
-add_flang_library(FIROptimizer
-  Dialect/FIRAttr.cpp
-  Dialect/FIRDialect.cpp
-  Dialect/FIROps.cpp
-  Dialect/FIRType.cpp
-
-  Support/FIRContext.cpp
-  Support/InternalNames.cpp
-  Support/KindMapping.cpp
-
-  CodeGen/CGOps.cpp
-  CodeGen/PreCGRewrite.cpp
-
-  Transforms/Inliner.cpp
-
-  DEPENDS
-  FIROpsIncGen
-  FIROptCodeGenPassIncGen
-  FIROptTransformsPassIncGen
-  CGOpsIncGen
-  ${dialect_libs}
-
-  LINK_LIBS
-  ${dialect_libs}
-  MLIRLLVMToLLVMIRTranslation
-  MLIRTargetLLVMIRExport
-
-  LINK_COMPONENTS
-  AsmParser
-  AsmPrinter
-  Remarks
-)
+add_subdirectory(CodeGen)
+add_subdirectory(Dialect)
+add_subdirectory(Support)
+add_subdirectory(Transforms)
diff --git a/lib/Optimizer/CodeGen/CMakeLists.txt b/lib/Optimizer/CodeGen/CMakeLists.txt
new file mode 100644
index 0000000..6a8d82c
--- /dev/null
+++ b/lib/Optimizer/CodeGen/CMakeLists.txt
@@ -0,0 +1,22 @@
+add_flang_library(FIRCodeGen
+  CGOps.cpp
+  PreCGRewrite.cpp
+
+  DEPENDS
+  FIRDialect
+  FIRSupport
+  FIROptCodeGenPassIncGen
+  CGOpsIncGen
+
+  LINK_LIBS
+  FIRDialect
+  FIRSupport
+  MLIROpenMPToLLVM
+  MLIRLLVMToLLVMIRTranslation
+  MLIRTargetLLVMIRExport
+
+  LINK_COMPONENTS
+  AsmParser
+  AsmPrinter
+  Remarks
+)
diff --git a/lib/Optimizer/Dialect/CMakeLists.txt b/lib/Optimizer/Dialect/CMakeLists.txt
new file mode 100644
index 0000000..7116dab
--- /dev/null
+++ b/lib/Optimizer/Dialect/CMakeLists.txt
@@ -0,0 +1,21 @@
+add_flang_library(FIRDialect
+  FIRAttr.cpp
+  FIRDialect.cpp
+  FIROps.cpp
+  FIRType.cpp
+
+  DEPENDS
+  FIRSupport
+  FIROpsIncGen
+
+  LINK_LIBS
+  FIRSupport
+  MLIROpenMPToLLVM
+  MLIRLLVMToLLVMIRTranslation
+  MLIRTargetLLVMIRExport
+
+  LINK_COMPONENTS
+  AsmParser
+  AsmPrinter
+  Remarks
+)
diff --git a/lib/Optimizer/Support/CMakeLists.txt b/lib/Optimizer/Support/CMakeLists.txt
new file mode 100644
index 0000000..2e53c3f
--- /dev/null
+++ b/lib/Optimizer/Support/CMakeLists.txt
@@ -0,0 +1,14 @@
+add_flang_library(FIRSupport
+  FIRContext.cpp
+  InternalNames.cpp
+  KindMapping.cpp
+
+  DEPENDS
+  ${dialect_libs}
+
+  LINK_LIBS
+  ${dialect_libs}
+  MLIROpenMPToLLVMIRTranslation
+  MLIRLLVMToLLVMIRTranslation
+  MLIRTargetLLVMIRExport
+)
diff --git a/lib/Optimizer/Transforms/CMakeLists.txt b/lib/Optimizer/Transforms/CMakeLists.txt
new file mode 100644
index 0000000..462ae40
--- /dev/null
+++ b/lib/Optimizer/Transforms/CMakeLists.txt
@@ -0,0 +1,16 @@
+add_flang_library(FIRTransforms
+  Inliner.cpp
+
+  DEPENDS
+  FIRDialect
+  FIRSupport
+  FIROptTransformsPassIncGen
+
+  LINK_LIBS
+  FIRDialect
+  MLIRAffineToStandard
+  MLIRLLVMIR
+  MLIROpenACC
+  MLIROpenMP
+  FIRSupport
+)
diff --git a/tools/fir-opt/CMakeLists.txt b/tools/fir-opt/CMakeLists.txt
index efd33f9..566aa78 100644
--- a/tools/fir-opt/CMakeLists.txt
+++ b/tools/fir-opt/CMakeLists.txt
@@ -3,7 +3,10 @@
 get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 
 target_link_libraries(fir-opt PRIVATE
-  FIROptimizer
+  FIRDialect
+  FIRSupport
+  FIRTransforms
+  FIRCodeGen
   ${dialect_libs}
 
   # TODO: these should be transitive dependencies from a target providing
diff --git a/tools/tco/CMakeLists.txt b/tools/tco/CMakeLists.txt
index 4a22427..1a9c5ac 100644
--- a/tools/tco/CMakeLists.txt
+++ b/tools/tco/CMakeLists.txt
@@ -1,7 +1,10 @@
 get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 
 set(LIBS
-  FIROptimizer
+  FIRCodeGen
+  FIRDialect
+  FIRSupport
+  FIRTransforms
   ${dialect_libs}
   MLIRIR
   MLIRLLVMIR
diff --git a/unittests/CMakeLists.txt b/unittests/CMakeLists.txt
index 95e3f6d..5acebce 100644
--- a/unittests/CMakeLists.txt
+++ b/unittests/CMakeLists.txt
@@ -39,6 +39,5 @@
 add_subdirectory(Optimizer)
 add_subdirectory(Decimal)
 add_subdirectory(Evaluate)
-add_subdirectory(Lower)
 add_subdirectory(Runtime)
 add_subdirectory(Frontend)
diff --git a/unittests/Lower/CMakeLists.txt b/unittests/Lower/CMakeLists.txt
deleted file mode 100644
index a3f61f0..0000000
--- a/unittests/Lower/CMakeLists.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
-
-set(LIBS
-  FIROptimizer
-  MLIRLLVMIR
-  ${dialect_libs}
-)
-
-add_flang_unittest(FlangLoweringTests
-  RTBuilder.cpp
-)
-
-target_link_libraries(FlangLoweringTests
-  PRIVATE
-  ${LIBS})
diff --git a/unittests/Optimizer/CMakeLists.txt b/unittests/Optimizer/CMakeLists.txt
index 3996c69..8bfb860 100644
--- a/unittests/Optimizer/CMakeLists.txt
+++ b/unittests/Optimizer/CMakeLists.txt
@@ -1,7 +1,9 @@
 get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 
 set(LIBS
-  FIROptimizer
+  FIRCodeGen
+  FIRDialect
+  FIRSupport
   ${dialect_libs}
 )
 
@@ -9,6 +11,7 @@
   FIRContextTest.cpp
   InternalNamesTest.cpp
   KindMappingTest.cpp
+  RTBuilder.cpp
 )
 target_link_libraries(FlangOptimizerTests
   PRIVATE
diff --git a/unittests/Lower/RTBuilder.cpp b/unittests/Optimizer/RTBuilder.cpp
similarity index 100%
rename from unittests/Lower/RTBuilder.cpp
rename to unittests/Optimizer/RTBuilder.cpp