[flang-commits] [flang] 1c93671 - [flang] Fix shared library builds for lib/Lower.
David Truby via flang-commits
flang-commits at lists.llvm.org
Thu Jul 16 02:18:21 PDT 2020
Author: David Truby
Date: 2020-07-16T10:18:14+01:00
New Revision: 1c93671e594d075cb0008dc4f33d863611af9ab9
URL: https://github.com/llvm/llvm-project/commit/1c93671e594d075cb0008dc4f33d863611af9ab9
DIFF: https://github.com/llvm/llvm-project/commit/1c93671e594d075cb0008dc4f33d863611af9ab9.diff
LOG: [flang] Fix shared library builds for lib/Lower.
Summary:
This adds missing definitions for functions in the Lower directory
that were causing failures in shared library builds.
The definitions for these are taken from the fir-dev branch on github.
Reviewers: sscalpone, schweitz, jeanPerier, klausler
Reviewed By: schweitz
Subscribers: mgorny, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D83771
Added:
flang/lib/Lower/ConvertExpr.cpp
Modified:
flang/lib/Lower/CMakeLists.txt
flang/lib/Optimizer/Dialect/FIROps.cpp
Removed:
################################################################################
diff --git a/flang/lib/Lower/CMakeLists.txt b/flang/lib/Lower/CMakeLists.txt
index 3cd71c007a00..975065c9ed7d 100644
--- a/flang/lib/Lower/CMakeLists.txt
+++ b/flang/lib/Lower/CMakeLists.txt
@@ -7,6 +7,7 @@ add_flang_library(FortranLower
Coarray.cpp
ComplexExpr.cpp
ConvertType.cpp
+ ConvertExpr.cpp
DoLoopHelper.cpp
FIRBuilder.cpp
IntrinsicCall.cpp
diff --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp
new file mode 100644
index 000000000000..1bac6884a5f7
--- /dev/null
+++ b/flang/lib/Lower/ConvertExpr.cpp
@@ -0,0 +1,95 @@
+//===-- ConvertExpr.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
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Common/idioms.h"
+#include "flang/Lower/IntrinsicCall.h"
+#include "flang/Lower/Support/BoxValue.h"
+
+mlir::Value fir::getBase(const fir::ExtendedValue &ex) {
+ return std::visit(Fortran::common::visitors{
+ [](const fir::UnboxedValue &x) { return x; },
+ [](const auto &x) { return x.getAddr(); },
+ },
+ ex.box);
+}
+
+llvm::raw_ostream &fir::operator<<(llvm::raw_ostream &os,
+ const fir::CharBoxValue &box) {
+ os << "boxchar { addr: " << box.getAddr() << ", len: " << box.getLen()
+ << " }";
+ return os;
+}
+
+llvm::raw_ostream &fir::operator<<(llvm::raw_ostream &os,
+ const fir::ArrayBoxValue &box) {
+ os << "boxarray { addr: " << box.getAddr();
+ if (box.getLBounds().size()) {
+ os << ", lbounds: [";
+ llvm::interleaveComma(box.getLBounds(), os);
+ os << "]";
+ } else {
+ os << ", lbounds: all-ones";
+ }
+ os << ", shape: [";
+ llvm::interleaveComma(box.getExtents(), os);
+ os << "]}";
+ return os;
+}
+
+llvm::raw_ostream &fir::operator<<(llvm::raw_ostream &os,
+ const fir::CharArrayBoxValue &box) {
+ os << "boxchararray { addr: " << box.getAddr() << ", len : " << box.getLen();
+ if (box.getLBounds().size()) {
+ os << ", lbounds: [";
+ llvm::interleaveComma(box.getLBounds(), os);
+ os << "]";
+ } else {
+ os << " lbounds: all-ones";
+ }
+ os << ", shape: [";
+ llvm::interleaveComma(box.getExtents(), os);
+ os << "]}";
+ return os;
+}
+
+llvm::raw_ostream &fir::operator<<(llvm::raw_ostream &os,
+ const fir::BoxValue &box) {
+ os << "box { addr: " << box.getAddr();
+ if (box.getLen())
+ os << ", size: " << box.getLen();
+ if (box.params.size()) {
+ os << ", type params: [";
+ llvm::interleaveComma(box.params, os);
+ os << "]";
+ }
+ if (box.getLBounds().size()) {
+ os << ", lbounds: [";
+ llvm::interleaveComma(box.getLBounds(), os);
+ os << "]";
+ }
+ if (box.getExtents().size()) {
+ os << ", shape: [";
+ llvm::interleaveComma(box.getExtents(), os);
+ os << "]";
+ }
+ os << "}";
+ return os;
+}
+
+llvm::raw_ostream &fir::operator<<(llvm::raw_ostream &os,
+ const fir::ProcBoxValue &box) {
+ os << "boxproc: { addr: " << box.getAddr() << ", context: " << box.hostContext
+ << "}";
+ return os;
+}
+
+llvm::raw_ostream &fir::operator<<(llvm::raw_ostream &os,
+ const fir::ExtendedValue &ex) {
+ std::visit([&](const auto &value) { os << value; }, ex.box);
+ return os;
+}
diff --git a/flang/lib/Optimizer/Dialect/FIROps.cpp b/flang/lib/Optimizer/Dialect/FIROps.cpp
index 30cd365f139b..44310d6e0691 100644
--- a/flang/lib/Optimizer/Dialect/FIROps.cpp
+++ b/flang/lib/Optimizer/Dialect/FIROps.cpp
@@ -1395,15 +1395,28 @@ mlir::OpFoldResult fir::SubfOp::fold(llvm::ArrayRef<mlir::Attribute> opnds) {
//===----------------------------------------------------------------------===//
// WhereOp
//===----------------------------------------------------------------------===//
-
void fir::WhereOp::build(mlir::OpBuilder &builder, OperationState &result,
mlir::Value cond, bool withElseRegion) {
+ build(builder, result, llvm::None, cond, withElseRegion);
+}
+
+void fir::WhereOp::build(mlir::OpBuilder &builder, OperationState &result,
+ mlir::TypeRange resultTypes, mlir::Value cond,
+ bool withElseRegion) {
result.addOperands(cond);
+ result.addTypes(resultTypes);
+
mlir::Region *thenRegion = result.addRegion();
+ thenRegion->push_back(new mlir::Block());
+ if (resultTypes.empty())
+ WhereOp::ensureTerminator(*thenRegion, builder, result.location);
+
mlir::Region *elseRegion = result.addRegion();
- WhereOp::ensureTerminator(*thenRegion, builder, result.location);
- if (withElseRegion)
- WhereOp::ensureTerminator(*elseRegion, builder, result.location);
+ if (withElseRegion) {
+ elseRegion->push_back(new mlir::Block());
+ if (resultTypes.empty())
+ WhereOp::ensureTerminator(*elseRegion, builder, result.location);
+ }
}
static mlir::ParseResult parseWhereOp(OpAsmParser &parser,
More information about the flang-commits
mailing list