[flang-commits] [flang] bd2c301 - [flang] Add coarray lowering hooks.
Eric Schweitz via flang-commits
flang-commits at lists.llvm.org
Mon Jun 29 14:24:54 PDT 2020
Author: Eric Schweitz
Date: 2020-06-29T14:24:13-07:00
New Revision: bd2c3014e120949c4acc1d107ac71c4091f00a3d
URL: https://github.com/llvm/llvm-project/commit/bd2c3014e120949c4acc1d107ac71c4091f00a3d
DIFF: https://github.com/llvm/llvm-project/commit/bd2c3014e120949c4acc1d107ac71c4091f00a3d.diff
LOG: [flang] Add coarray lowering hooks.
Differential review: https://reviews.llvm.org/D82790
Added:
flang/include/flang/Lower/Coarray.h
flang/lib/Lower/Coarray.cpp
Modified:
flang/lib/Lower/CMakeLists.txt
Removed:
################################################################################
diff --git a/flang/include/flang/Lower/Coarray.h b/flang/include/flang/Lower/Coarray.h
new file mode 100644
index 000000000000..e32c82d36e55
--- /dev/null
+++ b/flang/include/flang/Lower/Coarray.h
@@ -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
diff --git a/flang/lib/Lower/CMakeLists.txt b/flang/lib/Lower/CMakeLists.txt
index 5409c801e339..7e74ac8e0111 100644
--- a/flang/lib/Lower/CMakeLists.txt
+++ b/flang/lib/Lower/CMakeLists.txt
@@ -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
diff --git a/flang/lib/Lower/Coarray.cpp b/flang/lib/Lower/Coarray.cpp
new file mode 100644
index 000000000000..d73acbe17ce2
--- /dev/null
+++ b/flang/lib/Lower/Coarray.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");
+}
More information about the flang-commits
mailing list