1 | //===-- FIROpenMPAttributes.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 | /// \file |
9 | /// This file implements attribute interfaces that are promised by FIR |
10 | /// dialect attributes related to OpenMP. |
11 | //===----------------------------------------------------------------------===// |
12 | |
13 | #include "flang/Optimizer/Builder/FIRBuilder.h" |
14 | #include "flang/Optimizer/Builder/Todo.h" |
15 | #include "flang/Optimizer/Dialect/FIRAttr.h" |
16 | #include "flang/Optimizer/Dialect/FIRDialect.h" |
17 | #include "mlir/Dialect/OpenMP/OpenMPDialect.h" |
18 | |
19 | namespace fir::omp { |
20 | class FortranSafeTempArrayCopyAttrImpl |
21 | : public fir::SafeTempArrayCopyAttrInterface::FallbackModel< |
22 | FortranSafeTempArrayCopyAttrImpl> { |
23 | public: |
24 | // SafeTempArrayCopyAttrInterface interface methods. |
25 | static bool isDynamicallySafe() { return false; } |
26 | |
27 | static mlir::Value genDynamicCheck(mlir::Location loc, |
28 | fir::FirOpBuilder &builder, |
29 | mlir::Value array) { |
30 | TODO(loc, "fir::omp::FortranSafeTempArrayCopyAttrImpl::genDynamicCheck()" ); |
31 | return nullptr; |
32 | } |
33 | |
34 | static void registerTempDeallocation(mlir::Location loc, |
35 | fir::FirOpBuilder &builder, |
36 | mlir::Value array, mlir::Value temp) { |
37 | TODO(loc, "fir::omp::FortranSafeTempArrayCopyAttrImpl::" |
38 | "registerTempDeallocation()" ); |
39 | } |
40 | |
41 | // Extra helper methods. |
42 | |
43 | /// Attach the implementation to fir::OpenMPSafeTempArrayCopyAttr. |
44 | static void registerExternalModel(mlir::DialectRegistry ®istry); |
45 | |
46 | /// If the methods above create any new operations, this method |
47 | /// must register all the corresponding dialect. |
48 | static void getDependentDialects(mlir::DialectRegistry ®istry) {} |
49 | }; |
50 | |
51 | void FortranSafeTempArrayCopyAttrImpl::registerExternalModel( |
52 | mlir::DialectRegistry ®istry) { |
53 | registry.addExtension( |
54 | +[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) { |
55 | fir::OpenMPSafeTempArrayCopyAttr::attachInterface< |
56 | FortranSafeTempArrayCopyAttrImpl>(*ctx); |
57 | }); |
58 | } |
59 | |
60 | void registerAttrsExtensions(mlir::DialectRegistry ®istry) { |
61 | FortranSafeTempArrayCopyAttrImpl::registerExternalModel(registry); |
62 | } |
63 | |
64 | void registerTransformationalAttrsDependentDialects( |
65 | mlir::DialectRegistry ®istry) { |
66 | FortranSafeTempArrayCopyAttrImpl::getDependentDialects(registry); |
67 | } |
68 | |
69 | } // namespace fir::omp |
70 | |