Skip to content

Commit 65f66d2

Browse files
committed
[flang][NFC] Move OpenMP related passes into a separate directory (#104732)
Reapplied with fixed library dependencies for shared lib build
1 parent 0ca77f6 commit 65f66d2

File tree

19 files changed

+154
-63
lines changed

19 files changed

+154
-63
lines changed

flang/docs/OpenMP-declare-target.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,15 +149,15 @@ flang/lib/Lower/OpenMP.cpp function `genDeclareTargetIntGlobal`.
149149

150150
There are currently two passes within Flang that are related to the processing
151151
of `declare target`:
152-
* `OMPMarkDeclareTarget` - This pass is in charge of marking functions captured
152+
* `MarkDeclareTarget` - This pass is in charge of marking functions captured
153153
(called from) in `target` regions or other `declare target` marked functions as
154154
`declare target`. It does so recursively, i.e. nested calls will also be
155155
implicitly marked. It currently will try to mark things as conservatively as
156156
possible, e.g. if captured in a `target` region it will apply `nohost`, unless
157157
it encounters a `host` `declare target` in which case it will apply the `any`
158158
device type. Functions are handled similarly, except we utilise the parent's
159159
device type where possible.
160-
* `OMPFunctionFiltering` - This is executed after the `OMPMarkDeclareTarget`
160+
* `FunctionFiltering` - This is executed after the `MarkDeclareTarget`
161161
pass, and its job is to conservatively remove host functions from
162162
the module where possible when compiling for the device. This helps make
163163
sure that most incompatible code for the host is not lowered for the

flang/docs/OpenMP-descriptor-management.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ Currently, Flang will lower these descriptor types in the OpenMP lowering (lower
4444
to all other map types, generating an omp.MapInfoOp containing relevant information required for lowering
4545
the OpenMP dialect to LLVM-IR during the final stages of the MLIR lowering. However, after
4646
the lowering to FIR/HLFIR has been performed an OpenMP dialect specific pass for Fortran,
47-
`OMPMapInfoFinalizationPass` (Optimizer/OMPMapInfoFinalization.cpp) will expand the
47+
`MapInfoFinalizationPass` (Optimizer/OpenMP/MapInfoFinalization.cpp) will expand the
4848
`omp.MapInfoOp`'s containing descriptors (which currently will be a `BoxType` or `BoxAddrOp`) into multiple
4949
mappings, with one extra per pointer member in the descriptor that is supported on top of the original
5050
descriptor map operation. These pointers members are linked to the parent descriptor by adding them to
@@ -53,7 +53,7 @@ owning operation's (`omp.TargetOp`, `omp.TargetDataOp` etc.) map operand list an
5353
operation is `IsolatedFromAbove`, it also inserts them as `BlockArgs` to canonicalize the mappings and
5454
simplify lowering.
5555
56-
An example transformation by the `OMPMapInfoFinalizationPass`:
56+
An example transformation by the `MapInfoFinalizationPass`:
5757
5858
```
5959

flang/include/flang/Optimizer/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ add_subdirectory(CodeGen)
22
add_subdirectory(Dialect)
33
add_subdirectory(HLFIR)
44
add_subdirectory(Transforms)
5+
add_subdirectory(OpenMP)
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
set(LLVM_TARGET_DEFINITIONS Passes.td)
2+
mlir_tablegen(Passes.h.inc -gen-pass-decls -name FlangOpenMP)
3+
4+
add_public_tablegen_target(FlangOpenMPPassesIncGen)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//===- Passes.h - OpenMP pass entry points ----------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
//
9+
// This header declares the flang OpenMP passes.
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
#ifndef FORTRAN_OPTIMIZER_OPENMP_PASSES_H
14+
#define FORTRAN_OPTIMIZER_OPENMP_PASSES_H
15+
16+
#include "mlir/Dialect/Func/IR/FuncOps.h"
17+
#include "mlir/IR/BuiltinOps.h"
18+
#include "mlir/Pass/Pass.h"
19+
#include "mlir/Pass/PassRegistry.h"
20+
21+
#include <memory>
22+
23+
namespace flangomp {
24+
#define GEN_PASS_DECL
25+
#define GEN_PASS_REGISTRATION
26+
#include "flang/Optimizer/OpenMP/Passes.h.inc"
27+
28+
} // namespace flangomp
29+
30+
#endif // FORTRAN_OPTIMIZER_OPENMP_PASSES_H
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//===-- Passes.td - flang OpenMP pass definition -----------*- tablegen -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef FORTRAN_OPTIMIZER_OPENMP_PASSES
10+
#define FORTRAN_OPTIMIZER_OPENMP_PASSES
11+
12+
include "mlir/Pass/PassBase.td"
13+
14+
def MapInfoFinalizationPass
15+
: Pass<"omp-map-info-finalization"> {
16+
let summary = "expands OpenMP MapInfo operations containing descriptors";
17+
let description = [{
18+
Expands MapInfo operations containing descriptor types into multiple
19+
MapInfo's for each pointer element in the descriptor that requires
20+
explicit individual mapping by the OpenMP runtime.
21+
}];
22+
let dependentDialects = ["mlir::omp::OpenMPDialect"];
23+
}
24+
25+
def MarkDeclareTargetPass
26+
: Pass<"omp-mark-declare-target", "mlir::ModuleOp"> {
27+
let summary = "Marks all functions called by an OpenMP declare target function as declare target";
28+
let dependentDialects = ["mlir::omp::OpenMPDialect"];
29+
}
30+
31+
def FunctionFiltering : Pass<"omp-function-filtering"> {
32+
let summary = "Filters out functions intended for the host when compiling "
33+
"for the target device.";
34+
let dependentDialects = [
35+
"mlir::func::FuncDialect",
36+
"fir::FIROpsDialect"
37+
];
38+
}
39+
40+
#endif //FORTRAN_OPTIMIZER_OPENMP_PASSES

flang/include/flang/Optimizer/Transforms/Passes.td

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -358,32 +358,6 @@ def LoopVersioning : Pass<"loop-versioning", "mlir::func::FuncOp"> {
358358
let dependentDialects = [ "fir::FIROpsDialect" ];
359359
}
360360

361-
def OMPMapInfoFinalizationPass
362-
: Pass<"omp-map-info-finalization"> {
363-
let summary = "expands OpenMP MapInfo operations containing descriptors";
364-
let description = [{
365-
Expands MapInfo operations containing descriptor types into multiple
366-
MapInfo's for each pointer element in the descriptor that requires
367-
explicit individual mapping by the OpenMP runtime.
368-
}];
369-
let dependentDialects = ["mlir::omp::OpenMPDialect"];
370-
}
371-
372-
def OMPMarkDeclareTargetPass
373-
: Pass<"omp-mark-declare-target", "mlir::ModuleOp"> {
374-
let summary = "Marks all functions called by an OpenMP declare target function as declare target";
375-
let dependentDialects = ["mlir::omp::OpenMPDialect"];
376-
}
377-
378-
def OMPFunctionFiltering : Pass<"omp-function-filtering"> {
379-
let summary = "Filters out functions intended for the host when compiling "
380-
"for the target device.";
381-
let dependentDialects = [
382-
"mlir::func::FuncDialect",
383-
"fir::FIROpsDialect"
384-
];
385-
}
386-
387361
def VScaleAttr : Pass<"vscale-attr", "mlir::func::FuncOp"> {
388362
let summary = "Add vscale_range attribute to functions";
389363
let description = [{

flang/include/flang/Tools/CLOptions.inc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "mlir/Transforms/Passes.h"
1818
#include "flang/Optimizer/CodeGen/CodeGen.h"
1919
#include "flang/Optimizer/HLFIR/Passes.h"
20+
#include "flang/Optimizer/OpenMP/Passes.h"
2021
#include "flang/Optimizer/Transforms/Passes.h"
2122
#include "llvm/Passes/OptimizationLevel.h"
2223
#include "llvm/Support/CommandLine.h"
@@ -367,10 +368,10 @@ inline void createHLFIRToFIRPassPipeline(
367368
inline void createOpenMPFIRPassPipeline(
368369
mlir::PassManager &pm, bool isTargetDevice) {
369370
addNestedPassToAllTopLevelOperations(
370-
pm, fir::createOMPMapInfoFinalizationPass);
371-
pm.addPass(fir::createOMPMarkDeclareTargetPass());
371+
pm, flangomp::createMapInfoFinalizationPass);
372+
pm.addPass(flangomp::createMarkDeclareTargetPass());
372373
if (isTargetDevice)
373-
pm.addPass(fir::createOMPFunctionFiltering());
374+
pm.addPass(flangomp::createFunctionFiltering());
374375
}
375376

376377
#if !defined(FLANG_EXCLUDE_CODEGEN)

flang/lib/Frontend/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ add_flang_library(flangFrontend
3838
FIRTransforms
3939
HLFIRDialect
4040
HLFIRTransforms
41+
FlangOpenMPTransforms
4142
MLIRTransforms
4243
MLIRBuiltinToLLVMIRTranslation
4344
MLIRLLVMToLLVMIRTranslation

flang/lib/Optimizer/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ add_subdirectory(HLFIR)
55
add_subdirectory(Support)
66
add_subdirectory(Transforms)
77
add_subdirectory(Analysis)
8+
add_subdirectory(OpenMP)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
2+
3+
add_flang_library(FlangOpenMPTransforms
4+
FunctionFiltering.cpp
5+
MapInfoFinalization.cpp
6+
MarkDeclareTarget.cpp
7+
8+
DEPENDS
9+
FIRDialect
10+
HLFIROpsIncGen
11+
FlangOpenMPPassesIncGen
12+
13+
LINK_LIBS
14+
FIRAnalysis
15+
FIRBuilder
16+
FIRCodeGen
17+
FIRDialect
18+
FIRDialectSupport
19+
FIRSupport
20+
FortranCommon
21+
MLIRFuncDialect
22+
MLIROpenMPDialect
23+
HLFIRDialect
24+
MLIRIR
25+
MLIRPass
26+
)

flang/lib/Optimizer/Transforms/OMPFunctionFiltering.cpp renamed to flang/lib/Optimizer/OpenMP/FunctionFiltering.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//===- OMPFunctionFiltering.cpp -------------------------------------------===//
1+
//===- FunctionFiltering.cpp -------------------------------------------===//
22
//
33
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44
// See https://llvm.org/LICENSE.txt for license information.
@@ -13,26 +13,26 @@
1313

1414
#include "flang/Optimizer/Dialect/FIRDialect.h"
1515
#include "flang/Optimizer/Dialect/FIROpsSupport.h"
16-
#include "flang/Optimizer/Transforms/Passes.h"
16+
#include "flang/Optimizer/OpenMP/Passes.h"
1717

1818
#include "mlir/Dialect/Func/IR/FuncOps.h"
1919
#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
2020
#include "mlir/Dialect/OpenMP/OpenMPInterfaces.h"
2121
#include "mlir/IR/BuiltinOps.h"
2222
#include "llvm/ADT/SmallVector.h"
2323

24-
namespace fir {
25-
#define GEN_PASS_DEF_OMPFUNCTIONFILTERING
26-
#include "flang/Optimizer/Transforms/Passes.h.inc"
27-
} // namespace fir
24+
namespace flangomp {
25+
#define GEN_PASS_DEF_FUNCTIONFILTERING
26+
#include "flang/Optimizer/OpenMP/Passes.h.inc"
27+
} // namespace flangomp
2828

2929
using namespace mlir;
3030

3131
namespace {
32-
class OMPFunctionFilteringPass
33-
: public fir::impl::OMPFunctionFilteringBase<OMPFunctionFilteringPass> {
32+
class FunctionFilteringPass
33+
: public flangomp::impl::FunctionFilteringBase<FunctionFilteringPass> {
3434
public:
35-
OMPFunctionFilteringPass() = default;
35+
FunctionFilteringPass() = default;
3636

3737
void runOnOperation() override {
3838
MLIRContext *context = &getContext();

flang/lib/Optimizer/Transforms/OMPMapInfoFinalization.cpp renamed to flang/lib/Optimizer/OpenMP/MapInfoFinalization.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
//===- OMPMapInfoFinalization.cpp
2-
//---------------------------------------------------===//
1+
//===- MapInfoFinalization.cpp -----------------------------------------===//
32
//
43
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
54
// See https://llvm.org/LICENSE.txt for license information.
@@ -28,7 +27,7 @@
2827
#include "flang/Optimizer/Builder/FIRBuilder.h"
2928
#include "flang/Optimizer/Dialect/FIRType.h"
3029
#include "flang/Optimizer/Dialect/Support/KindMapping.h"
31-
#include "flang/Optimizer/Transforms/Passes.h"
30+
#include "flang/Optimizer/OpenMP/Passes.h"
3231
#include "mlir/Dialect/Func/IR/FuncOps.h"
3332
#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
3433
#include "mlir/IR/BuiltinDialect.h"
@@ -41,15 +40,15 @@
4140
#include "llvm/Frontend/OpenMP/OMPConstants.h"
4241
#include <iterator>
4342

44-
namespace fir {
45-
#define GEN_PASS_DEF_OMPMAPINFOFINALIZATIONPASS
46-
#include "flang/Optimizer/Transforms/Passes.h.inc"
47-
} // namespace fir
43+
namespace flangomp {
44+
#define GEN_PASS_DEF_MAPINFOFINALIZATIONPASS
45+
#include "flang/Optimizer/OpenMP/Passes.h.inc"
46+
} // namespace flangomp
4847

4948
namespace {
50-
class OMPMapInfoFinalizationPass
51-
: public fir::impl::OMPMapInfoFinalizationPassBase<
52-
OMPMapInfoFinalizationPass> {
49+
class MapInfoFinalizationPass
50+
: public flangomp::impl::MapInfoFinalizationPassBase<
51+
MapInfoFinalizationPass> {
5352

5453
void genDescriptorMemberMaps(mlir::omp::MapInfoOp op,
5554
fir::FirOpBuilder &builder,
@@ -245,7 +244,7 @@ class OMPMapInfoFinalizationPass
245244
// all users appropriately, making sure to only add a single member link
246245
// per new generation for the original originating descriptor MapInfoOp.
247246
assert(llvm::hasSingleElement(op->getUsers()) &&
248-
"OMPMapInfoFinalization currently only supports single users "
247+
"MapInfoFinalization currently only supports single users "
249248
"of a MapInfoOp");
250249

251250
if (!op.getMembers().empty()) {

flang/lib/Optimizer/Transforms/OMPMarkDeclareTarget.cpp renamed to flang/lib/Optimizer/OpenMP/MarkDeclareTarget.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
1-
#include "flang/Optimizer/Transforms/Passes.h"
1+
//===- MarkDeclareTarget.cpp -------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
//
9+
// Mark functions called from explicit target code as implicitly declare target.
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
#include "flang/Optimizer/OpenMP/Passes.h"
214
#include "mlir/Dialect/Func/IR/FuncOps.h"
315
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
416
#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
@@ -10,14 +22,14 @@
1022
#include "mlir/Support/LLVM.h"
1123
#include "llvm/ADT/SmallPtrSet.h"
1224

13-
namespace fir {
14-
#define GEN_PASS_DEF_OMPMARKDECLARETARGETPASS
15-
#include "flang/Optimizer/Transforms/Passes.h.inc"
16-
} // namespace fir
25+
namespace flangomp {
26+
#define GEN_PASS_DEF_MARKDECLARETARGETPASS
27+
#include "flang/Optimizer/OpenMP/Passes.h.inc"
28+
} // namespace flangomp
1729

1830
namespace {
19-
class OMPMarkDeclareTargetPass
20-
: public fir::impl::OMPMarkDeclareTargetPassBase<OMPMarkDeclareTargetPass> {
31+
class MarkDeclareTargetPass
32+
: public flangomp::impl::MarkDeclareTargetPassBase<MarkDeclareTargetPass> {
2133

2234
void markNestedFuncs(mlir::omp::DeclareTargetDeviceType parentDevTy,
2335
mlir::omp::DeclareTargetCaptureClause parentCapClause,

flang/lib/Optimizer/Transforms/CMakeLists.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ add_flang_library(FIRTransforms
2222
AddDebugInfo.cpp
2323
PolymorphicOpConversion.cpp
2424
LoopVersioning.cpp
25-
OMPFunctionFiltering.cpp
26-
OMPMapInfoFinalization.cpp
27-
OMPMarkDeclareTarget.cpp
2825
StackReclaim.cpp
2926
VScaleAttr.cpp
3027
FunctionAttr.cpp

flang/tools/bbc/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ FIRTransforms
2525
FIRBuilder
2626
HLFIRDialect
2727
HLFIRTransforms
28+
FlangOpenMPTransforms
2829
${dialect_libs}
2930
${extension_libs}
3031
MLIRAffineToStandard

flang/tools/fir-opt/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ target_link_libraries(fir-opt PRIVATE
1919
FIRCodeGen
2020
HLFIRDialect
2121
HLFIRTransforms
22+
FlangOpenMPTransforms
2223
FIRAnalysis
2324
${test_libs}
2425
${dialect_libs}

flang/tools/fir-opt/fir-opt.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "mlir/Tools/mlir-opt/MlirOptMain.h"
1515
#include "flang/Optimizer/CodeGen/CodeGen.h"
1616
#include "flang/Optimizer/HLFIR/Passes.h"
17+
#include "flang/Optimizer/OpenMP/Passes.h"
1718
#include "flang/Optimizer/Support/InitFIR.h"
1819
#include "flang/Optimizer/Transforms/Passes.h"
1920

@@ -34,6 +35,7 @@ int main(int argc, char **argv) {
3435
fir::registerOptCodeGenPasses();
3536
fir::registerOptTransformPasses();
3637
hlfir::registerHLFIRPasses();
38+
flangomp::registerFlangOpenMPPasses();
3739
#ifdef FLANG_INCLUDE_TESTS
3840
fir::test::registerTestFIRAliasAnalysisPass();
3941
mlir::registerSideEffectTestPasses();

flang/tools/tco/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ target_link_libraries(tco PRIVATE
1717
FIRBuilder
1818
HLFIRDialect
1919
HLFIRTransforms
20+
FlangOpenMPTransforms
2021
${dialect_libs}
2122
${extension_libs}
2223
MLIRIR

0 commit comments

Comments
 (0)