FLANG
MultiImageFortran.h
1//===-- Lower/MultiImageFortran.h -- image related lowering -----*- 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#ifndef FORTRAN_LOWER_MULTIIMAGEFORTRAN_H
10#define FORTRAN_LOWER_MULTIIMAGEFORTRAN_H
11
12#include "flang/Lower/AbstractConverter.h"
13#include "flang/Optimizer/Builder/BoxValue.h"
14#include "flang/Optimizer/Dialect/MIF/MIFOps.h"
15
16namespace Fortran {
17
18namespace parser {
20struct ChangeTeamStmt;
22struct FormTeamStmt;
23} // namespace parser
24
25namespace evaluate {
26class CoarrayRef;
27} // namespace evaluate
28
29namespace lower {
30
31class SymMap;
32
33namespace pft {
34struct Evaluation;
35} // namespace pft
36
37//===----------------------------------------------------------------------===//
38// Synchronization statements
39//===----------------------------------------------------------------------===//
40
41void genSyncAllStatement(AbstractConverter &, const parser::SyncAllStmt &);
42
43void genSyncImagesStatement(AbstractConverter &,
44 const parser::SyncImagesStmt &);
45void genSyncMemoryStatement(AbstractConverter &,
46 const parser::SyncMemoryStmt &);
47void genSyncTeamStatement(AbstractConverter &, const parser::SyncTeamStmt &);
48
49//===----------------------------------------------------------------------===//
50// TEAM constructs
51//===----------------------------------------------------------------------===//
52
53void genChangeTeamConstruct(AbstractConverter &, pft::Evaluation &eval,
54 const parser::ChangeTeamConstruct &);
55mif::ChangeTeamOp genChangeTeamStmt(AbstractConverter &, pft::Evaluation &eval,
56 const parser::ChangeTeamStmt &);
57void genEndChangeTeamStmt(AbstractConverter &, pft::Evaluation &eval,
58 const parser::EndChangeTeamStmt &);
59void genFormTeamStatement(AbstractConverter &, pft::Evaluation &eval,
60 const parser::FormTeamStmt &);
61
62//===----------------------------------------------------------------------===//
63// COARRAY utils
64//===----------------------------------------------------------------------===//
65
66mlir::Value genLowerCoBounds(AbstractConverter &converter, mlir::Location loc,
67 const semantics::Symbol &sym);
68
69mlir::Value genUpperCoBounds(AbstractConverter &converter, mlir::Location loc,
70 const semantics::Symbol &sym);
71
72mlir::Value genAllocateCoarray(
73 AbstractConverter &converter, mlir::Location loc,
74 const semantics::Symbol &sym, mlir::Value addr,
75 const std::optional<Fortran::parser::AllocateCoarraySpec> &allocSpec =
76 std::nullopt,
77 mlir::Value errMsg = {}, bool hasStat = false);
78
79//===----------------------------------------------------------------------===//
80// COARRAY expressions
81//===----------------------------------------------------------------------===//
82
86class CoarrayExprHelper {
87public:
88 explicit CoarrayExprHelper(AbstractConverter &converter, mlir::Location loc,
89 SymMap &syms)
90 : converter{converter}, symMap{syms}, loc{loc} {}
91 CoarrayExprHelper(const CoarrayExprHelper &) = delete;
92
95
98
99private:
100 AbstractConverter &converter;
101 SymMap &symMap;
102 mlir::Location loc;
103};
104
105} // namespace lower
106} // namespace Fortran
107
108#endif // FORTRAN_LOWER_MULTIIMAGEFORTRAN_H
Definition variable.h:243
Definition AbstractConverter.h:87
fir::ExtendedValue genAddr(const evaluate::CoarrayRef &expr)
Generate the address of a co-array expression.
Definition MultiImageFortran.cpp:457
fir::ExtendedValue genValue(const evaluate::CoarrayRef &expr)
Generate the value of a co-array expression.
Definition MultiImageFortran.cpp:463
Definition SymbolMap.h:182
Definition BoxValue.h:478
Definition call.h:34
Definition ParserActions.h:24
Definition check-expression.h:19
Definition bit-population-count.h:20
Definition PFTBuilder.h:221
Definition parse-tree.h:2213
Definition parse-tree.h:2198
Definition parse-tree.h:2207
Definition parse-tree.h:2590