Skip to content

Commit 1eebb8d

Browse files
committed
Address reviewer comments.
1 parent 4a54869 commit 1eebb8d

File tree

4 files changed

+74
-11
lines changed

4 files changed

+74
-11
lines changed

flang/lib/Lower/OpenMP/ClauseProcessor.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,11 +1346,8 @@ void ClauseProcessor::processMapObjects(
13461346
std::string mapperIdName = getDefaultMapperID(objectTypeSpec);
13471347
bool needsDefaultMapper =
13481348
semantics::IsAllocatableOrObjectPointer(object.sym()) ||
1349-
(objectTypeSpec &&
1350-
requiresImplicitDefaultDeclareMapper(*objectTypeSpec));
1351-
bool containsDelete = (mapTypeBits & mlir::omp::ClauseMapFlags::del) !=
1352-
mlir::omp::ClauseMapFlags::none;
1353-
if (!mapperIdName.empty() && !containsDelete)
1349+
requiresImplicitDefaultDeclareMapper(*objectTypeSpec);
1350+
if (!mapperIdName.empty())
13541351
mapperId = addImplicitMapper(object, mapperIdName,
13551352
/*allowGenerate=*/needsDefaultMapper);
13561353
else

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2599,6 +2599,9 @@ genTargetOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
25992599

26002600
mlir::FlatSymbolRefAttr mapperId;
26012601
if (defaultMaps.empty()) {
2602+
// TODO: Honor user-provided defaultmap clauses (aggregates/pointers)
2603+
// instead of blanket-disabling implicit mapper generation whenever any
2604+
// explicit default map is present.
26022605
const semantics::DerivedTypeSpec *typeSpec =
26032606
sym.GetType() ? sym.GetType()->AsDerived() : nullptr;
26042607
if (typeSpec) {

flang/lib/Lower/OpenMP/Utils.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,9 @@ mlir::FlatSymbolRefAttr getOrGenImplicitDefaultDeclareMapper(
118118
llvm::SmallVector<llvm::SmallVector<int64_t>> memberPlacementIndices;
119119
llvm::SmallVector<mlir::Value> memberMapOps;
120120

121-
mlir::omp::ClauseMapFlags mapFlag = mlir::omp::ClauseMapFlags::to;
122-
mapFlag |= mlir::omp::ClauseMapFlags::from;
123-
mapFlag |= mlir::omp::ClauseMapFlags::implicit;
121+
mlir::omp::ClauseMapFlags mapFlag = mlir::omp::ClauseMapFlags::to |
122+
mlir::omp::ClauseMapFlags::from |
123+
mlir::omp::ClauseMapFlags::implicit;
124124
mlir::omp::VariableCaptureKind captureKind =
125125
mlir::omp::VariableCaptureKind::ByRef;
126126

@@ -159,9 +159,7 @@ mlir::FlatSymbolRefAttr getOrGenImplicitDefaultDeclareMapper(
159159

160160
llvm::SmallVector<mlir::Value> bounds;
161161
genBoundsOps(declareOp.getOriginalBase(), bounds);
162-
mlir::omp::ClauseMapFlags parentMapFlag = mlir::omp::ClauseMapFlags::to;
163-
parentMapFlag |= mlir::omp::ClauseMapFlags::from;
164-
parentMapFlag |= mlir::omp::ClauseMapFlags::implicit;
162+
mlir::omp::ClauseMapFlags parentMapFlag = mlir::omp::ClauseMapFlags::implicit;
165163
mlir::omp::MapInfoOp mapOp = Fortran::utils::openmp::createMapInfoOp(
166164
firOpBuilder, loc, declareOp.getOriginalBase(),
167165
/*varPtrPtr=*/mlir::Value(), /*name=*/"", bounds, memberMapOps,
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
! REQUIRES: flang, amdgpu
2+
3+
! RUN: %libomptarget-compile-fortran-generic
4+
! RUN: %libomptarget-run-generic 2>&1 | %fcheck-generic
5+
6+
module enter_exit_mapper_mod
7+
implicit none
8+
9+
type :: field_type
10+
real, allocatable :: values(:)
11+
end type field_type
12+
13+
type :: tile_type
14+
type(field_type) :: field
15+
integer, allocatable :: neighbors(:)
16+
end type tile_type
17+
18+
contains
19+
subroutine init_tile(tile)
20+
type(tile_type), intent(inout) :: tile
21+
integer :: j
22+
23+
allocate(tile%field%values(4))
24+
allocate(tile%neighbors(4))
25+
do j = 1, 4
26+
tile%field%values(j) = 10.0 * j
27+
tile%neighbors(j) = j
28+
end do
29+
end subroutine init_tile
30+
31+
end module enter_exit_mapper_mod
32+
33+
program implicit_enter_exit
34+
use enter_exit_mapper_mod
35+
implicit none
36+
integer :: j
37+
type(tile_type) :: tile
38+
39+
call init_tile(tile)
40+
41+
!$omp target enter data map(alloc: tile%field%values)
42+
43+
!$omp target
44+
do j = 1, size(tile%field%values)
45+
tile%field%values(j) = 5.0 * j
46+
end do
47+
!$omp end target
48+
49+
!$omp target exit data map(from: tile%field%values)
50+
51+
do j = 1, size(tile%field%values)
52+
if (tile%field%values(j) /= 5.0 * j) then
53+
print *, "======= Test Failed! ======="
54+
stop 1
55+
end if
56+
if (tile%neighbors(j) /= j) then
57+
print *, "======= Test Failed! ======="
58+
stop 1
59+
end if
60+
end do
61+
62+
print *, "======= Test Passed! ======="
63+
end program implicit_enter_exit
64+
65+
! CHECK: ======= Test Passed! =======

0 commit comments

Comments
 (0)