Skip to content

Commit 41ace27

Browse files
committed
[OpenMP][Flang] Change the OmpDefaultMapperName suffix
The ".omp.default.mapper" does not follow the Fortran syntax rules. As such when emitted to the module file, it triggered a syntax failure when trying to read from the module file. This patch fixes it by changing the suffix to "_omp_default_mapper". New tests's have been added to check default mappers work correctly across module files. This fixes #168336.
1 parent e468ea3 commit 41ace27

File tree

10 files changed

+51
-15
lines changed

10 files changed

+51
-15
lines changed

flang/lib/Lower/OpenMP/ClauseProcessor.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1278,7 +1278,8 @@ void ClauseProcessor::processMapObjects(
12781278
std::string mapperIdName =
12791279
typeSpec->name().ToString() + llvm::omp::OmpDefaultMapperName;
12801280
if (auto *sym = converter.getCurrentScope().FindSymbol(mapperIdName)) {
1281-
mapperIdName = converter.mangleName(mapperIdName, sym->owner());
1281+
mapperIdName =
1282+
converter.mangleName(mapperIdName, sym->GetUltimate().owner());
12821283
} else {
12831284
mapperIdName = converter.mangleName(mapperIdName, *typeSpec->GetScope());
12841285
}

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2612,8 +2612,8 @@ genTargetOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
26122612
typeSpec->name().ToString() + llvm::omp::OmpDefaultMapperName;
26132613
if (auto *mapperSym =
26142614
converter.getCurrentScope().FindSymbol(mapperIdName))
2615-
mapperIdName =
2616-
converter.mangleName(mapperIdName, mapperSym->owner());
2615+
mapperIdName = converter.mangleName(
2616+
mapperIdName, mapperSym->GetUltimate().owner());
26172617
else
26182618
mapperIdName =
26192619
converter.mangleName(mapperIdName, *typeSpec->GetScope());

flang/test/Lower/OpenMP/declare-mapper.f90

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 %t/omp-declare-mapper-6.f90 -o - | FileCheck %t/omp-declare-mapper-6.f90
1010
! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -module-dir %t %t/omp-declare-mapper-7.mod.f90 -o - >/dev/null
1111
! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -J %t %t/omp-declare-mapper-7.use.f90 -o - | FileCheck %t/omp-declare-mapper-7.use.f90
12+
! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -module-dir %t %t/omp-declare-mapper-8.mod.f90 -o - >/dev/null
13+
! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -J %t %t/omp-declare-mapper-8.use.f90 -o - | FileCheck %t/omp-declare-mapper-8.use.f90
1214

1315
!--- omp-declare-mapper-1.f90
1416
subroutine declare_mapper_1
@@ -26,7 +28,7 @@ subroutine declare_mapper_1
2628
end type
2729
type(my_type2) :: t
2830
real :: x, y(nvals)
29-
!CHECK:omp.declare_mapper @[[MY_TYPE_MAPPER:_QQFdeclare_mapper_1my_type\.omp\.default\.mapper]] : [[MY_TYPE:!fir\.type<_QFdeclare_mapper_1Tmy_type\{num_vals:i32,values:!fir\.box<!fir\.heap<!fir\.array<\?xi32>>>\}>]] {
31+
!CHECK:omp.declare_mapper @[[MY_TYPE_MAPPER:_QQFdeclare_mapper_1my_type_omp_default_mapper]] : [[MY_TYPE:!fir\.type<_QFdeclare_mapper_1Tmy_type\{num_vals:i32,values:!fir\.box<!fir\.heap<!fir\.array<\?xi32>>>\}>]] {
3032
!CHECK: ^bb0(%[[VAL_0:.*]]: !fir.ref<[[MY_TYPE]]>):
3133
!CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] {uniq_name = "_QFdeclare_mapper_1Evar"} : (!fir.ref<[[MY_TYPE]]>) -> (!fir.ref<[[MY_TYPE]]>, !fir.ref<[[MY_TYPE]]>)
3234
!CHECK: %[[VAL_2:.*]] = hlfir.designate %[[VAL_1]]#0{"values"} {fortran_attrs = #fir.var_attrs<allocatable>} : (!fir.ref<[[MY_TYPE]]>) -> !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
@@ -153,7 +155,7 @@ subroutine declare_mapper_4
153155
integer :: num
154156
end type
155157

156-
!CHECK: omp.declare_mapper @[[MY_TYPE_MAPPER:_QQFdeclare_mapper_4my_type.omp.default.mapper]] : [[MY_TYPE:!fir\.type<_QFdeclare_mapper_4Tmy_type\{num:i32\}>]]
158+
!CHECK: omp.declare_mapper @[[MY_TYPE_MAPPER:_QQFdeclare_mapper_4my_type_omp_default_mapper]] : [[MY_TYPE:!fir\.type<_QFdeclare_mapper_4Tmy_type\{num:i32\}>]]
157159
!$omp declare mapper (my_type :: var) map (var%num)
158160

159161
type(my_type) :: a
@@ -185,9 +187,9 @@ program declare_mapper_5
185187
end type
186188

187189
!CHECK: omp.declare_mapper @[[INNER_MAPPER_NAMED:_QQFFuse_innermy_mapper]] : [[MY_TYPE:!fir\.type<_QFTmytype\{x:i32,y:i32\}>]]
188-
!CHECK: omp.declare_mapper @[[INNER_MAPPER_DEFAULT:_QQFFuse_innermytype.omp.default.mapper]] : [[MY_TYPE]]
190+
!CHECK: omp.declare_mapper @[[INNER_MAPPER_DEFAULT:_QQFFuse_innermytype_omp_default_mapper]] : [[MY_TYPE]]
189191
!CHECK: omp.declare_mapper @[[OUTER_MAPPER_NAMED:_QQFmy_mapper]] : [[MY_TYPE]]
190-
!CHECK: omp.declare_mapper @[[OUTER_MAPPER_DEFAULT:_QQFmytype.omp.default.mapper]] : [[MY_TYPE]]
192+
!CHECK: omp.declare_mapper @[[OUTER_MAPPER_DEFAULT:_QQFmytype_omp_default_mapper]] : [[MY_TYPE]]
191193
!$omp declare mapper(mytype :: var) map(tofrom: var%x)
192194
!$omp declare mapper(my_mapper : mytype :: var) map(tofrom: var%y)
193195

@@ -325,3 +327,36 @@ program use_module_mapper
325327
a%x = 42
326328
!$omp end target
327329
end program use_module_mapper
330+
331+
!--- omp-declare-mapper-8.mod.f90
332+
! Module with a default DECLARE MAPPER to be compiled separately.
333+
module default_mapper_mod
334+
implicit none
335+
type :: dtype
336+
integer :: x
337+
end type dtype
338+
!$omp declare mapper(dtype :: v) map(tofrom: v%x)
339+
end module default_mapper_mod
340+
341+
!--- omp-declare-mapper-8.use.f90
342+
! Consumer program that USEs the module and relies on the default mapper.
343+
! CHECK: omp.declare_mapper @{{.*dtype_omp_default_mapper}} : !fir.type<_QMdefault_mapper_modTdtype{x:i32}>
344+
! CHECK: %{{.*}} = omp.map.info {{.*}} map_clauses(tofrom) {{.*}} mapper(@{{.*dtype_omp_default_mapper}}) {{.*}} {name = "a"}
345+
! CHECK: %{{.*}} = omp.map.info {{.*}} map_clauses(tofrom) {{.*}} mapper(@{{.*dtype_omp_default_mapper}}) {{.*}} {name = "a"}
346+
! CHECK: %{{.*}} = omp.map.info {{.*}} map_clauses(implicit, tofrom) {{.*}} mapper(@{{.*dtype_omp_default_mapper}}) {{.*}} {name = "a"}
347+
program use_module_default_mapper
348+
use default_mapper_mod
349+
implicit none
350+
type(dtype) :: a
351+
!$omp target map(a)
352+
a%x = 7
353+
!$omp end target
354+
355+
!$omp target map(mapper(default) : a)
356+
a%x = 8
357+
!$omp end target
358+
359+
!$omp target
360+
a%x = 8
361+
!$omp end target
362+
end program use_module_default_mapper

flang/test/Lower/OpenMP/derived-type-map.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
22

3-
!CHECK: omp.declare_mapper @[[MAPPER1:_QQFmaptype_derived_implicit_allocatablescalar_and_array.omp.default.mapper]] : !fir.type<_QFmaptype_derived_implicit_allocatableTscalar_and_array{real:f32,array:!fir.array<10xi32>,int:i32}> {
3+
!CHECK: omp.declare_mapper @[[MAPPER1:_QQFmaptype_derived_implicit_allocatablescalar_and_array_omp_default_mapper]] : !fir.type<_QFmaptype_derived_implicit_allocatableTscalar_and_array{real:f32,array:!fir.array<10xi32>,int:i32}> {
44

55
!CHECK: %[[ALLOCA:.*]] = fir.alloca !fir.type<_QFmaptype_derived_implicitTscalar_and_array{real:f32,array:!fir.array<10xi32>,int:i32}> {bindc_name = "scalar_arr", uniq_name = "_QFmaptype_derived_implicitEscalar_arr"}
66
!CHECK: %[[DECLARE:.*]]:2 = hlfir.declare %[[ALLOCA]] {uniq_name = "_QFmaptype_derived_implicitEscalar_arr"} : (!fir.ref<!fir.type<_QFmaptype_derived_implicitTscalar_and_array{real:f32,array:!fir.array<10xi32>,int:i32}>>) -> (!fir.ref<!fir.type<_QFmaptype_derived_implicitTscalar_and_array{real:f32,array:!fir.array<10xi32>,int:i32}>>, !fir.ref<!fir.type<_QFmaptype_derived_implicitTscalar_and_array{real:f32,array:!fir.array<10xi32>,int:i32}>>)

flang/test/Lower/OpenMP/map-mapper.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ program p
88
!$omp declare mapper(xx : t1 :: nn) map(to: nn, nn%x)
99
!$omp declare mapper(t1 :: nn) map(from: nn)
1010

11-
!CHECK-LABEL: omp.declare_mapper @_QQFt1.omp.default.mapper : !fir.type<_QFTt1{x:!fir.array<256xi32>}>
11+
!CHECK-LABEL: omp.declare_mapper @_QQFt1_omp_default_mapper : !fir.type<_QFTt1{x:!fir.array<256xi32>}>
1212
!CHECK-LABEL: omp.declare_mapper @_QQFxx : !fir.type<_QFTt1{x:!fir.array<256xi32>}>
1313

1414
type(t1) :: a, b
@@ -20,7 +20,7 @@ program p
2020
end do
2121
!$omp end target
2222

23-
!CHECK: %[[MAP_B:.*]] = omp.map.info var_ptr(%{{.*}} : {{.*}}, {{.*}}) map_clauses(tofrom) capture(ByRef) mapper(@_QQFt1.omp.default.mapper) -> {{.*}} {name = "b"}
23+
!CHECK: %[[MAP_B:.*]] = omp.map.info var_ptr(%{{.*}} : {{.*}}, {{.*}}) map_clauses(tofrom) capture(ByRef) mapper(@_QQFt1_omp_default_mapper) -> {{.*}} {name = "b"}
2424
!CHECK: omp.target map_entries(%[[MAP_B]] -> %{{.*}}, %{{.*}} -> %{{.*}} : {{.*}}, {{.*}}) {
2525
!$omp target map(mapper(default) : b)
2626
do i = 1, n

flang/test/Lower/OpenMP/target.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ subroutine omp_target_device_ptr
529529
use iso_c_binding, only : c_ptr, c_loc
530530
type(c_ptr) :: a
531531
integer, target :: b
532-
!CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}}) map_clauses(tofrom) capture(ByRef) mapper(@[[CPTR_DEFAULT:_QQM__fortran_builtinsc_ptr\.omp\.default\.mapper]]) -> {{.*}} {name = "a"}
532+
!CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}}) map_clauses(tofrom) capture(ByRef) mapper(@[[CPTR_DEFAULT:_QQM__fortran_builtinsc_ptr_omp_default_mapper]]) -> {{.*}} {name = "a"}
533533
!CHECK: omp.target_data map_entries(%[[MAP]]{{.*}}) use_device_ptr({{.*}} -> %[[VAL_1:.*]] : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>)
534534
!$omp target data map(tofrom: a) use_device_ptr(a)
535535
!CHECK: {{.*}} = fir.coordinate_of %[[VAL_1:.*]], __address : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) -> !fir.ref<i64>

flang/test/Parser/OpenMP/declare-mapper-unparse.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ program main
2929

3030
!PARSE-TREE: OpenMPDeclareMapperConstruct
3131
!PARSE-TREE: OmpMapperSpecifier
32-
!PARSE-TREE: string = 'ty.omp.default.mapper'
32+
!PARSE-TREE: string = 'ty_omp_default_mapper'
3333
!PARSE-TREE: TypeSpec -> DerivedTypeSpec
3434
!PARSE-TREE: Name = 'ty'
3535
!PARSE-TREE: Name = 'mapped'

flang/test/Parser/OpenMP/openmp6-directive-spellings.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ subroutine f01
5757
!PARSE-TREE: DeclarationConstruct -> SpecificationConstruct -> OpenMPDeclarativeConstruct -> OpenMPDeclareMapperConstruct -> OmpDirectiveSpecification
5858
!PARSE-TREE: | OmpDirectiveName -> llvm::omp::Directive = declare mapper
5959
!PARSE-TREE: | OmpArgumentList -> OmpArgument -> OmpMapperSpecifier
60-
!PARSE-TREE: | | string = 't.omp.default.mapper'
60+
!PARSE-TREE: | | string = 't_omp_default_mapper'
6161
!PARSE-TREE: | | TypeSpec -> DerivedTypeSpec
6262
!PARSE-TREE: | | | Name = 't'
6363
!PARSE-TREE: | | Name = 'v'

flang/test/Semantics/OpenMP/declare-mapper-symbols.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ program main
1313
!! Note, symbols come out in their respective scope, but not in declaration order.
1414
!CHECK: mymapper: MapperDetails
1515
!CHECK: ty: DerivedType components: x
16-
!CHECK: ty.omp.default.mapper: MapperDetails
16+
!CHECK: ty_omp_default_mapper: MapperDetails
1717
!CHECK: DerivedType scope: ty
1818
!CHECK: OtherConstruct scope:
1919
!CHECK: mapped (OmpMapToFrom) {{.*}} ObjectEntity type: TYPE(ty)

llvm/include/llvm/Frontend/OpenMP/OMPConstants.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ enum class OMPDynGroupprivateFallbackType : uint64_t {
201201
};
202202

203203
// Default OpenMP mapper name suffix.
204-
inline constexpr const char *OmpDefaultMapperName = ".omp.default.mapper";
204+
inline constexpr const char *OmpDefaultMapperName = "_omp_default_mapper";
205205

206206
/// Values for bit flags used to specify the mapping type for
207207
/// offloading.

0 commit comments

Comments
 (0)