[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