@@ -936,57 +936,64 @@ bool ClauseProcessor::processMap(
936936 llvm::SmallVector<OmpMapMemberIndicesData>>
937937 parentMemberIndices;
938938
939- bool clauseFound = findRepeatableClause< omp::clause::Map>(
940- [&]( const omp::clause::Map &clause, const parser::CharBlock &source) {
941- using Map = omp::clause::Map;
942- mlir::Location clauseLocation = converter.genLocation (source);
943- const auto &mapType = std::get<std::optional<Map::MapType>>(clause.t );
944- llvm::omp::OpenMPOffloadMappingFlags mapTypeBits =
945- llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_NONE;
946- // If the map type is specified, then process it else Tofrom is the
947- // default.
948- Map::MapType type = mapType.value_or (Map::MapType::Tofrom);
949- switch (type) {
950- case Map::MapType::To:
951- mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO;
952- break ;
953- case Map::MapType::From:
954- mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
955- break ;
956- case Map::MapType::Tofrom:
957- mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO |
958- llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
959- break ;
960- case Map::MapType::Alloc:
961- case Map::MapType::Release:
962- // alloc and release is the default map_type for the Target Data
963- // Ops, i.e. if no bits for map_type is supplied then alloc/release
964- // is implicitly assumed based on the target directive. Default
965- // value for Target Data and Enter Data is alloc and for Exit Data
966- // it is release.
967- break ;
968- case Map::MapType::Delete:
969- mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_DELETE;
970- }
939+ auto process = [&]( const omp::clause::Map &clause,
940+ const parser::CharBlock &source) {
941+ using Map = omp::clause::Map;
942+ mlir::Location clauseLocation = converter.genLocation (source);
943+ const auto &mapType = std::get<std::optional<Map::MapType>>(clause.t );
944+ llvm::omp::OpenMPOffloadMappingFlags mapTypeBits =
945+ llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_NONE;
946+ // If the map type is specified, then process it else Tofrom is the
947+ // default.
948+ Map::MapType type = mapType.value_or (Map::MapType::Tofrom);
949+ switch (type) {
950+ case Map::MapType::To:
951+ mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO;
952+ break ;
953+ case Map::MapType::From:
954+ mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
955+ break ;
956+ case Map::MapType::Tofrom:
957+ mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO |
958+ llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
959+ break ;
960+ case Map::MapType::Alloc:
961+ case Map::MapType::Release:
962+ // alloc and release is the default map_type for the Target Data
963+ // Ops, i.e. if no bits for map_type is supplied then alloc/release
964+ // is implicitly assumed based on the target directive. Default
965+ // value for Target Data and Enter Data is alloc and for Exit Data
966+ // it is release.
967+ break ;
968+ case Map::MapType::Delete:
969+ mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_DELETE;
970+ }
971971
972- auto &modTypeMods =
973- std::get<std::optional<Map::MapTypeModifiers>>(clause.t );
974- if (modTypeMods) {
975- if (llvm::is_contained (*modTypeMods, Map::MapTypeModifier::Always))
976- mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_ALWAYS;
977- // Diagnose unimplemented map-type-modifiers.
978- if (llvm::any_of (*modTypeMods, [](Map::MapTypeModifier m) {
979- return m != Map::MapTypeModifier::Always;
980- })) {
981- TODO (currentLocation, " Map type modifiers (other than 'ALWAYS')"
982- " are not implemented yet" );
983- }
984- }
985- processMapObjects (stmtCtx, clauseLocation,
986- std::get<omp::ObjectList>(clause.t ), mapTypeBits,
987- parentMemberIndices, result.mapVars , *ptrMapSyms);
988- });
972+ auto &modTypeMods =
973+ std::get<std::optional<Map::MapTypeModifiers>>(clause.t );
974+ if (modTypeMods) {
975+ if (llvm::is_contained (*modTypeMods, Map::MapTypeModifier::Always))
976+ mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_ALWAYS;
977+ // Diagnose unimplemented map-type-modifiers.
978+ if (llvm::any_of (*modTypeMods, [](Map::MapTypeModifier m) {
979+ return m != Map::MapTypeModifier::Always;
980+ })) {
981+ TODO (currentLocation, " Map type modifiers (other than 'ALWAYS')"
982+ " are not implemented yet" );
983+ }
984+ }
985+
986+ if (std::get<std::optional<omp::clause::Iterator>>(clause.t )) {
987+ TODO (currentLocation,
988+ " Support for iterator modifiers is not implemented yet" );
989+ }
990+
991+ processMapObjects (stmtCtx, clauseLocation,
992+ std::get<omp::ObjectList>(clause.t ), mapTypeBits,
993+ parentMemberIndices, result.mapVars , *ptrMapSyms);
994+ };
989995
996+ bool clauseFound = findRepeatableClause<omp::clause::Map>(process);
990997 insertChildMapInfoIntoParent (converter, parentMemberIndices, result.mapVars ,
991998 *ptrMapSyms);
992999
0 commit comments