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
37mlir::SmallVector<mlir::Value>
38getCosubscripts(AbstractConverter &converter, mlir::Location loc,
39 const Fortran::evaluate::CoarrayRef &expr);
40
41//===----------------------------------------------------------------------===//
42// Synchronization statements
43//===----------------------------------------------------------------------===//
44
45void genSyncAllStatement(AbstractConverter &, const parser::SyncAllStmt &);
46
47void genSyncImagesStatement(AbstractConverter &,
48 const parser::SyncImagesStmt &);
49void genSyncMemoryStatement(AbstractConverter &,
50 const parser::SyncMemoryStmt &);
51void genSyncTeamStatement(AbstractConverter &, const parser::SyncTeamStmt &);
52
53//===----------------------------------------------------------------------===//
54// TEAM constructs
55//===----------------------------------------------------------------------===//
56
57void genChangeTeamConstruct(AbstractConverter &, pft::Evaluation &eval,
58 const parser::ChangeTeamConstruct &);
59mif::ChangeTeamOp genChangeTeamStmt(AbstractConverter &, pft::Evaluation &eval,
60 const parser::ChangeTeamStmt &);
61void genEndChangeTeamStmt(AbstractConverter &, pft::Evaluation &eval,
62 const parser::EndChangeTeamStmt &);
63void genFormTeamStatement(AbstractConverter &, pft::Evaluation &eval,
64 const parser::FormTeamStmt &);
65
66//===----------------------------------------------------------------------===//
67// COARRAY utils
68//===----------------------------------------------------------------------===//
69
70mlir::SmallVector<mlir::Value>
71getCosubscripts(AbstractConverter &converter, mlir::Location loc,
72 const evaluate::CoarrayRef &expr);
73
74mlir::Value genLowerCoBounds(AbstractConverter &converter, mlir::Location loc,
75 const semantics::Symbol &sym);
76
77mlir::Value genUpperCoBounds(AbstractConverter &converter, mlir::Location loc,
78 const semantics::Symbol &sym);
79
80mlir::Value genAllocateCoarray(
81 AbstractConverter &converter, mlir::Location loc,
82 const semantics::Symbol &sym, mlir::Value addr,
83 const std::optional<Fortran::parser::AllocateCoarraySpec> &allocSpec =
84 std::nullopt,
85 mlir::Value errMsg = {}, bool hasStat = false);
86
87void genAllocateNonAllocatableSaveCoarray(AbstractConverter &converter,
88 mlir::Location loc,
89 const semantics::Symbol &sym,
90 mlir::Value addr);
91
92//===----------------------------------------------------------------------===//
93// EVENT and NOTIFY statements
94//===----------------------------------------------------------------------===//
95
96void genNotifyWaitStatement(AbstractConverter &,
97 const parser::NotifyWaitStmt &);
98void genEventPostStatement(AbstractConverter &, const parser::EventPostStmt &);
99void genEventWaitStatement(AbstractConverter &, const parser::EventWaitStmt &);
100
101//===----------------------------------------------------------------------===//
102// COARRAY expressions
103//===----------------------------------------------------------------------===//
104
108class CoarrayExprHelper {
109public:
110 explicit CoarrayExprHelper(AbstractConverter &converter, mlir::Location loc,
111 SymMap &syms)
112 : converter{converter}, symMap{syms}, loc{loc} {}
113 CoarrayExprHelper(const CoarrayExprHelper &) = delete;
114
117
120
121private:
122 AbstractConverter &converter;
123 SymMap &symMap;
124 mlir::Location loc;
125};
126
127} // namespace lower
128} // namespace Fortran
129
130#endif // FORTRAN_LOWER_MULTIIMAGEFORTRAN_H
Definition variable.h:248
Definition AbstractConverter.h:87
fir::ExtendedValue genAddr(const evaluate::CoarrayRef &expr)
Generate the address of a co-array expression.
Definition MultiImageFortran.cpp:513
fir::ExtendedValue genValue(const evaluate::CoarrayRef &expr)
Generate the value of a co-array expression.
Definition MultiImageFortran.cpp:519
Definition SymbolMap.h:181
Definition BoxValue.h:469
Definition call.h:34
Definition ParserActions.h:24
mlir::SmallVector< mlir::Value > getCosubscripts(AbstractConverter &converter, mlir::Location loc, const Fortran::evaluate::CoarrayRef &expr)
Generates a vector of cosubscripts from CoarrayRef.
Definition MultiImageFortran.cpp:268
Definition check-expression.h:19
Definition bit-population-count.h:20
Definition PFTBuilder.h:222
Definition parse-tree.h:2267
Definition parse-tree.h:2252
Definition parse-tree.h:2261
Definition parse-tree.h:2644