forked from OSchip/llvm-project
[flang] Add coarray lowering hooks.
Differential review: https://reviews.llvm.org/D82790
This commit is contained in:
parent
af9cc2d2af
commit
bd2c3014e1
|
@ -0,0 +1,78 @@
|
|||
//===-- Lower/Coarray.h -- image related lowering ---------------*- C++ -*-===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef FORTRAN_LOWER_COARRAY_H
|
||||
#define FORTRAN_LOWER_COARRAY_H
|
||||
|
||||
#include "flang/Lower/AbstractConverter.h"
|
||||
#include "flang/Lower/Support/BoxValue.h"
|
||||
|
||||
namespace Fortran {
|
||||
|
||||
namespace parser {
|
||||
struct ChangeTeamConstruct;
|
||||
struct ChangeTeamStmt;
|
||||
struct EndChangeTeamStmt;
|
||||
struct FormTeamStmt;
|
||||
} // namespace parser
|
||||
|
||||
namespace evaluate {
|
||||
class CoarrayRef;
|
||||
} // namespace evaluate
|
||||
|
||||
namespace lower {
|
||||
|
||||
class SymMap;
|
||||
|
||||
namespace pft {
|
||||
struct Evaluation;
|
||||
} // namespace pft
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// TEAM constructs
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void genChangeTeamConstruct(AbstractConverter &, pft::Evaluation &eval,
|
||||
const parser::ChangeTeamConstruct &);
|
||||
void genChangeTeamStmt(AbstractConverter &, pft::Evaluation &eval,
|
||||
const parser::ChangeTeamStmt &);
|
||||
void genEndChangeTeamStmt(AbstractConverter &, pft::Evaluation &eval,
|
||||
const parser::EndChangeTeamStmt &);
|
||||
void genFormTeamStatement(AbstractConverter &, pft::Evaluation &eval,
|
||||
const parser::FormTeamStmt &);
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// COARRAY expressions
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// Coarray expression lowering helper. A coarray expression is expected to be
|
||||
/// lowered into runtime support calls. For example, expressions may use a
|
||||
/// message-passing runtime to access another image's data.
|
||||
class CoarrayExprHelper {
|
||||
public:
|
||||
explicit CoarrayExprHelper(AbstractConverter &converter, mlir::Location loc,
|
||||
SymMap &syms)
|
||||
: converter{converter}, symMap{syms}, loc{loc} {}
|
||||
CoarrayExprHelper(const CoarrayExprHelper &) = delete;
|
||||
|
||||
/// Generate the address of a co-array expression.
|
||||
fir::ExtendedValue genAddr(const evaluate::CoarrayRef &expr);
|
||||
|
||||
/// Generate the value of a co-array expression.
|
||||
fir::ExtendedValue genValue(const evaluate::CoarrayRef &expr);
|
||||
|
||||
private:
|
||||
AbstractConverter &converter;
|
||||
SymMap &symMap;
|
||||
mlir::Location loc;
|
||||
};
|
||||
|
||||
} // namespace lower
|
||||
} // namespace Fortran
|
||||
|
||||
#endif // FORTRAN_LOWER_COARRAY_H
|
|
@ -4,6 +4,7 @@ get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
|
|||
add_flang_library(FortranLower
|
||||
CharacterExpr.cpp
|
||||
CharacterRuntime.cpp
|
||||
Coarray.cpp
|
||||
ComplexExpr.cpp
|
||||
ConvertType.cpp
|
||||
DoLoopHelper.cpp
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
//===-- Coarray.cpp -------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
///
|
||||
/// Implementation of the lowering of image related constructs and expressions.
|
||||
/// Fortran images can form teams, communicate via coarrays, etc.
|
||||
///
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "flang/Lower/Coarray.h"
|
||||
#include "SymbolMap.h"
|
||||
#include "flang/Lower/AbstractConverter.h"
|
||||
#include "flang/Lower/FIRBuilder.h"
|
||||
#include "flang/Parser/parse-tree.h"
|
||||
#include "flang/Semantics/expression.h"
|
||||
|
||||
#undef TODO
|
||||
#define TODO(MSG) \
|
||||
{ \
|
||||
mlir::emitError(converter.getCurrentLocation(), "not yet implemented") \
|
||||
<< MSG; \
|
||||
exit(1); \
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// TEAM statements and constructs
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void Fortran::lower::genChangeTeamConstruct(
|
||||
Fortran::lower::AbstractConverter &converter,
|
||||
Fortran::lower::pft::Evaluation &,
|
||||
const Fortran::parser::ChangeTeamConstruct &) {
|
||||
TODO("CHANGE TEAM construct");
|
||||
}
|
||||
|
||||
void Fortran::lower::genChangeTeamStmt(
|
||||
Fortran::lower::AbstractConverter &converter,
|
||||
Fortran::lower::pft::Evaluation &,
|
||||
const Fortran::parser::ChangeTeamStmt &) {
|
||||
TODO("CHANGE TEAM stmt");
|
||||
}
|
||||
|
||||
void Fortran::lower::genEndChangeTeamStmt(
|
||||
Fortran::lower::AbstractConverter &converter,
|
||||
Fortran::lower::pft::Evaluation &,
|
||||
const Fortran::parser::EndChangeTeamStmt &) {
|
||||
TODO("END CHANGE TEAM");
|
||||
}
|
||||
|
||||
void Fortran::lower::genFormTeamStatement(
|
||||
Fortran::lower::AbstractConverter &converter,
|
||||
Fortran::lower::pft::Evaluation &, const Fortran::parser::FormTeamStmt &) {
|
||||
TODO("FORM TEAM");
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// COARRAY expressions
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
fir::ExtendedValue Fortran::lower::CoarrayExprHelper::genAddr(
|
||||
const Fortran::evaluate::CoarrayRef &expr) {
|
||||
(void)symMap;
|
||||
TODO("co-array address");
|
||||
}
|
||||
|
||||
fir::ExtendedValue Fortran::lower::CoarrayExprHelper::genValue(
|
||||
const Fortran::evaluate::CoarrayRef &expr) {
|
||||
TODO("co-array value");
|
||||
}
|
Loading…
Reference in New Issue