[flang-commits] [flang] a1717a3 - [Flang][OpenMP] Added TODO checks for unsupported map types
Akash Banerjee via flang-commits
flang-commits at lists.llvm.org
Mon Mar 27 04:38:16 PDT 2023
Author: Akash Banerjee
Date: 2023-03-27T12:37:53+01:00
New Revision: a1717a3e75140e1810edade4cfc199a4fa043510
URL: https://github.com/llvm/llvm-project/commit/a1717a3e75140e1810edade4cfc199a4fa043510
DIFF: https://github.com/llvm/llvm-project/commit/a1717a3e75140e1810edade4cfc199a4fa043510.diff
LOG: [Flang][OpenMP] Added TODO checks for unsupported map types
This patch adds TODO checks for unspported types in the map clause for OpenMP Target directives.
Example of unsupported code:
implicit none
character(len=10) :: str1, str2(5,5)
type t
character(len=10) :: str1, str2(5,5)
end type t
type(t) :: v
!$omp target enter data map(to: str2(2,5))
!$omp target enter data map(to: v%str1)
!$omp target enter data map(to: v%str2)
!$omp target enter data map(to: v%str2(1,2))
end
Differential Revision: https://reviews.llvm.org/D146292
Added:
Modified:
flang/lib/Lower/OpenMP.cpp
Removed:
################################################################################
diff --git a/flang/lib/Lower/OpenMP.cpp b/flang/lib/Lower/OpenMP.cpp
index 1204ba77c1d49..e3b4fb820d80b 100644
--- a/flang/lib/Lower/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP.cpp
@@ -683,7 +683,8 @@ createTargetDataOp(Fortran::lower::AbstractConverter &converter,
llvm::SmallVector<mlir::IntegerAttr> mapTypes;
auto addMapClause = [&firOpBuilder, &converter, &mapOperands,
- &mapTypes](const auto &mapClause) {
+ &mapTypes](const auto &mapClause,
+ mlir::Location ¤tLocation) {
auto mapType = std::get<Fortran::parser::OmpMapType::Type>(
std::get<std::optional<Fortran::parser::OmpMapType>>(mapClause->v.t)
->t);
@@ -725,10 +726,26 @@ createTargetDataOp(Fortran::lower::AbstractConverter &converter,
mapTypeBits));
llvm::SmallVector<mlir::Value> mapOperand;
+ /// Check for unsupported map operand types.
+ for (const Fortran::parser::OmpObject &ompObject :
+ std::get<Fortran::parser::OmpObjectList>(mapClause->v.t).v) {
+ if (Fortran::parser::Unwrap<Fortran::parser::ArrayElement>(ompObject) ||
+ Fortran::parser::Unwrap<Fortran::parser::StructureComponent>(
+ ompObject))
+ TODO(currentLocation,
+ "OMPD_target_data for Array Expressions or Structure Components");
+ }
genObjectList(std::get<Fortran::parser::OmpObjectList>(mapClause->v.t),
converter, mapOperand);
for (mlir::Value mapOp : mapOperand) {
+ /// Check for unsupported map operand types.
+ mlir::Type checkType = mapOp.getType();
+ if (auto refType = checkType.dyn_cast<fir::ReferenceType>())
+ checkType = refType.getElementType();
+ if (checkType.isa<fir::BoxType>())
+ TODO(currentLocation, "OMPD_target_data MapOperand BoxType");
+
mapOperands.push_back(mapOp);
mapTypes.push_back(mapTypeAttr);
}
@@ -764,7 +781,7 @@ createTargetDataOp(Fortran::lower::AbstractConverter &converter,
nowaitAttr = firOpBuilder.getUnitAttr();
} else if (const auto &mapClause =
std::get_if<Fortran::parser::OmpClause::Map>(&clause.u)) {
- addMapClause(mapClause);
+ addMapClause(mapClause, currentLocation);
} else {
TODO(currentLocation, "OMPD_target unhandled clause");
}
More information about the flang-commits
mailing list