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::SmallVector<mlir::Value>
67getCosubscripts(AbstractConverter &converter, mlir::Location loc,
68 const evaluate::CoarrayRef &expr);
69
70mlir::Value genLowerCoBounds(AbstractConverter &converter, mlir::Location loc,
71 const semantics::Symbol &sym);
72
73mlir::Value genUpperCoBounds(AbstractConverter &converter, mlir::Location loc,
74 const semantics::Symbol &sym);
75
76mlir::Value genAllocateCoarray(
77 AbstractConverter &converter, mlir::Location loc,
78 const semantics::Symbol &sym, mlir::Value addr,
79 const std::optional<Fortran::parser::AllocateCoarraySpec> &allocSpec =
80 std::nullopt,
81 mlir::Value errMsg = {}, bool hasStat = false);
82
83void genAllocateNonAllocatableSaveCoarray(AbstractConverter &converter,
84 mlir::Location loc,
85 const semantics::Symbol &sym,
86 mlir::Value addr);
87
88//===----------------------------------------------------------------------===//
89// COARRAY expressions
90//===----------------------------------------------------------------------===//
91
95class CoarrayExprHelper {
96public:
97 explicit CoarrayExprHelper(AbstractConverter &converter, mlir::Location loc,
98 SymMap &syms)
99 : converter{converter}, symMap{syms}, loc{loc} {}
100 CoarrayExprHelper(const CoarrayExprHelper &) = delete;
101
104
107
108private:
109 AbstractConverter &converter;
110 SymMap &symMap;
111 mlir::Location loc;
112};
113
114} // namespace lower
115} // namespace Fortran
116
117#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: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 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:221
Definition parse-tree.h:2255
Definition parse-tree.h:2240
Definition parse-tree.h:2249
Definition parse-tree.h:2632