FLANG
ConvertExpr.h
1//===-- Lower/ConvertExpr.h -- lowering of expressions ----------*- 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// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/
10//
11//===----------------------------------------------------------------------===//
15//===----------------------------------------------------------------------===//
16
17#ifndef FORTRAN_LOWER_CONVERTEXPR_H
18#define FORTRAN_LOWER_CONVERTEXPR_H
19
20#include "flang/Lower/Support/Utils.h"
21#include "flang/Optimizer/Builder/BoxValue.h"
22#include "flang/Optimizer/Builder/FIRBuilder.h"
23#include <optional>
24
25namespace mlir {
26class Location;
27class Value;
28} // namespace mlir
29
30namespace fir {
31class AllocMemOp;
32class ArrayLoadOp;
33class ShapeOp;
34} // namespace fir
35
36namespace Fortran::lower {
37
38class AbstractConverter;
39class ExplicitIterSpace;
40class ImplicitIterSpace;
41class StatementContext;
42class SymMap;
43
46 AbstractConverter &converter,
47 const SomeExpr &expr,
48 SymMap &symMap,
49 StatementContext &stmtCtx);
50
55 AbstractConverter &converter,
56 const SomeExpr &expr,
57 SymMap &symMap,
58 StatementContext &stmtCtx);
59
62 AbstractConverter &converter,
63 const SomeExpr &expr,
64 SymMap &symMap,
65 StatementContext &stmtCtx);
66
71 AbstractConverter &converter,
72 const SomeExpr &expr,
73 SymMap &symMap,
74 StatementContext &stmtCtx);
75
78fir::MutableBoxValue createMutableBox(mlir::Location loc,
79 AbstractConverter &converter,
80 const SomeExpr &expr, SymMap &symMap);
81
83bool isParentComponent(const SomeExpr &expr);
84
86fir::ExtendedValue updateBoxForParentComponent(AbstractConverter &converter,
88 const SomeExpr &expr);
89
95fir::ExtendedValue createBoxValue(mlir::Location loc,
96 AbstractConverter &converter,
97 const SomeExpr &expr, SymMap &symMap,
98 StatementContext &stmtCtx);
99
110void createSomeArrayAssignment(AbstractConverter &converter,
111 const SomeExpr &lhs, const SomeExpr &rhs,
112 SymMap &symMap, StatementContext &stmtCtx);
113
122void createSomeArrayAssignment(AbstractConverter &converter,
123 const fir::ExtendedValue &lhs,
124 const SomeExpr &rhs, SymMap &symMap,
125 StatementContext &stmtCtx);
126
130void createSomeArrayAssignment(AbstractConverter &converter,
131 const fir::ExtendedValue &lhs,
132 const fir::ExtendedValue &rhs, SymMap &symMap,
133 StatementContext &stmtCtx);
134
163void createAnyMaskedArrayAssignment(AbstractConverter &converter,
164 const SomeExpr &lhs, const SomeExpr &rhs,
165 ExplicitIterSpace &explicitIterSpace,
166 ImplicitIterSpace &implicitIterSpace,
167 SymMap &symMap, StatementContext &stmtCtx);
168
172void createAllocatableArrayAssignment(AbstractConverter &converter,
173 const SomeExpr &lhs, const SomeExpr &rhs,
174 ExplicitIterSpace &explicitIterSpace,
175 ImplicitIterSpace &implicitIterSpace,
176 SymMap &symMap,
177 StatementContext &stmtCtx);
178
184 AbstractConverter &converter, const SomeExpr &lhs, const SomeExpr &rhs,
185 ExplicitIterSpace &explicitIterSpace, ImplicitIterSpace &implicitIterSpace,
186 const llvm::SmallVector<mlir::Value> &lbounds,
187 std::optional<llvm::SmallVector<mlir::Value>> ubounds, SymMap &symMap,
188 StatementContext &stmtCtx);
189
192fir::ExtendedValue createSomeArrayTempValue(AbstractConverter &converter,
193 const SomeExpr &expr,
194 SymMap &symMap,
195 StatementContext &stmtCtx);
196
206void createLazyArrayTempValue(AbstractConverter &converter,
207 const SomeExpr &expr, mlir::Value raggedHeader,
208 SymMap &symMap, StatementContext &stmtCtx);
209
212fir::ExtendedValue createSomeArrayBox(AbstractConverter &converter,
213 const SomeExpr &expr, SymMap &symMap,
214 StatementContext &stmtCtx);
215
221mlir::Value createSubroutineCall(AbstractConverter &converter,
222 const evaluate::ProcedureRef &call,
223 ExplicitIterSpace &explicitIterSpace,
224 ImplicitIterSpace &implicitIterSpace,
225 SymMap &symMap, StatementContext &stmtCtx,
226 bool isUserDefAssignment);
227
228mlir::Value addCrayPointerInst(mlir::Location loc, fir::FirOpBuilder &builder,
229 mlir::Value ptrVal, mlir::Type ptrTy,
230 mlir::Type pteTy);
231} // namespace Fortran::lower
232
233#endif // FORTRAN_LOWER_CONVERTEXPR_H
Definition: BoxValue.h:478
Definition: FIRBuilder.h:55
Definition: BoxValue.h:360
Definition: OpenACC.h:20
Definition: AbstractConverter.h:59
fir::MutableBoxValue createMutableBox(AbstractConverter &converter, mlir::Location loc, const pft::Variable &var, mlir::Value boxAddr, mlir::ValueRange nonDeferredParams, bool alwaysUseBox, unsigned allocator=kDefaultAllocator)
Definition: Allocatable.cpp:1084
void createArrayOfPointerAssignment(AbstractConverter &converter, const SomeExpr &lhs, const SomeExpr &rhs, ExplicitIterSpace &explicitIterSpace, ImplicitIterSpace &implicitIterSpace, const llvm::SmallVector< mlir::Value > &lbounds, std::optional< llvm::SmallVector< mlir::Value > > ubounds, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7449
fir::ExtendedValue createBoxValue(mlir::Location loc, AbstractConverter &converter, const SomeExpr &expr, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7562
fir::ExtendedValue createInitializerAddress(mlir::Location loc, AbstractConverter &converter, const SomeExpr &expr, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7383
void createAllocatableArrayAssignment(AbstractConverter &converter, const SomeExpr &lhs, const SomeExpr &rhs, ExplicitIterSpace &explicitIterSpace, ImplicitIterSpace &implicitIterSpace, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7434
bool isParentComponent(const SomeExpr &expr)
Return true iff the expression is pointing to a parent component.
Definition: ConvertExpr.cpp:7509
fir::ExtendedValue createSomeExtendedAddress(mlir::Location loc, AbstractConverter &converter, const SomeExpr &expr, SymMap &symMap, StatementContext &stmtCtx)
Create an extended expression address.
Definition: ConvertExpr.cpp:7375
void createLazyArrayTempValue(AbstractConverter &converter, const SomeExpr &expr, mlir::Value raggedHeader, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7477
fir::ExtendedValue createSomeArrayBox(AbstractConverter &converter, const SomeExpr &expr, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7487
mlir::Value createSubroutineCall(AbstractConverter &converter, const evaluate::ProcedureRef &call, ExplicitIterSpace &explicitIterSpace, ImplicitIterSpace &implicitIterSpace, SymMap &symMap, StatementContext &stmtCtx, bool isUserDefAssignment)
Definition: ConvertExpr.cpp:7583
fir::ExtendedValue createSomeArrayTempValue(AbstractConverter &converter, const SomeExpr &expr, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7468
void createAnyMaskedArrayAssignment(AbstractConverter &converter, const SomeExpr &lhs, const SomeExpr &rhs, ExplicitIterSpace &explicitIterSpace, ImplicitIterSpace &implicitIterSpace, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7419
void createSomeArrayAssignment(AbstractConverter &converter, const SomeExpr &lhs, const SomeExpr &rhs, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7393
fir::ExtendedValue createSomeExtendedExpression(mlir::Location loc, AbstractConverter &converter, const SomeExpr &expr, SymMap &symMap, StatementContext &stmtCtx)
Create an extended expression value.
Definition: ConvertExpr.cpp:7357
fir::ExtendedValue updateBoxForParentComponent(AbstractConverter &converter, fir::ExtendedValue exv, const SomeExpr &expr)
Update the extended value to represent the parent component.
Definition: ConvertExpr.cpp:7531
fir::ExtendedValue createSomeInitializerExpression(mlir::Location loc, AbstractConverter &converter, const SomeExpr &expr, SymMap &symMap, StatementContext &stmtCtx)
Definition: ConvertExpr.cpp:7365
Definition: AbstractConverter.h:31
@ Value
Lower argument to a value. Mainly intended for scalar arguments.
Definition: AbstractConverter.h:27