Skip to content

Commit ce38ebe

Browse files
committed
Rebase patch with upstream.
1 parent 9f72a4a commit ce38ebe

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,9 +1295,10 @@ genTargetOp(Fortran::lower::AbstractConverter &converter,
12951295
llvm::SmallVector<mlir::Location> mapSymLocs;
12961296
llvm::SmallVector<const Fortran::semantics::Symbol *> mapSymbols;
12971297
llvm::SmallVector<mlir::Value> devicePtrOperands, deviceAddrOperands;
1298-
llvm::SmallVector<mlir::Type> useDeviceTypes;
1299-
llvm::SmallVector<mlir::Location> useDeviceLocs;
1300-
llvm::SmallVector<const Fortran::semantics::Symbol *> useDeviceSymbols;
1298+
llvm::SmallVector<mlir::Type> devicePtrTypes, deviceAddrTypes;
1299+
llvm::SmallVector<mlir::Location> devicePtrLocs, deviceAddrLocs;
1300+
llvm::SmallVector<const Fortran::semantics::Symbol *> devicePtrSymbols,
1301+
deviceAddrSymbols;
13011302

13021303
ClauseProcessor cp(converter, semaCtx, clauseList);
13031304
cp.processIf(llvm::omp::Directive::OMPD_target, ifClauseOperand);
@@ -1307,14 +1308,19 @@ genTargetOp(Fortran::lower::AbstractConverter &converter,
13071308
cp.processNowait(nowaitAttr);
13081309
cp.processMap(currentLocation, directive, stmtCtx, mapOperands, &mapSymTypes,
13091310
&mapSymLocs, &mapSymbols);
1310-
cp.processIsDevicePtr(devicePtrOperands, useDeviceTypes, useDeviceLocs,
1311-
useDeviceSymbols);
1312-
cp.processHasDeviceAddr(deviceAddrOperands, useDeviceTypes, useDeviceLocs,
1313-
useDeviceSymbols);
1314-
cp.processTODO<clause::Private, clause::Firstprivate, clause::Reduction,
1315-
clause::InReduction, clause::Allocate, clause::UsesAllocators,
1316-
clause::Defaultmap>(currentLocation,
1317-
llvm::omp::Directive::OMPD_target);
1311+
cp.processIsDevicePtr(devicePtrOperands, devicePtrTypes, devicePtrLocs,
1312+
devicePtrSymbols);
1313+
cp.processHasDeviceAddr(deviceAddrOperands, deviceAddrTypes, deviceAddrLocs,
1314+
deviceAddrSymbols);
1315+
1316+
cp.processTODO<Fortran::parser::OmpClause::Private,
1317+
Fortran::parser::OmpClause::Firstprivate,
1318+
Fortran::parser::OmpClause::Reduction,
1319+
Fortran::parser::OmpClause::InReduction,
1320+
Fortran::parser::OmpClause::Allocate,
1321+
Fortran::parser::OmpClause::UsesAllocators,
1322+
Fortran::parser::OmpClause::Defaultmap>(
1323+
currentLocation, llvm::omp::Directive::OMPD_target);
13181324

13191325
// 5.8.1 Implicit Data-Mapping Attribute Rules
13201326
// The following code follows the implicit data-mapping rules to map all the

flang/test/Lower/OpenMP/FIR/target.f90

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -515,17 +515,17 @@ end subroutine omp_target_parallel_do
515515
!CHECK-LABEL: func.func @_QPomp_target_is_device_ptr() {
516516
subroutine omp_target_is_device_ptr
517517
use iso_c_binding, only : c_ptr, c_loc
518-
!CHECK: %[[DEV_PTR:.*]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}> {bindc_name = "a", uniq_name = "_QFomp_target_is_device_ptrEa"}
518+
!CHECK: %[[VAL_0:.*]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}> {bindc_name = "a", uniq_name = "_QFomp_target_is_device_ptrEa"}
519519
type(c_ptr) :: a
520-
!CHECK %[[VAL_0:.*]] = fir.alloca i32 {bindc_name = "b", fir.target, uniq_name = "_QFomp_target_is_device_ptrEb"}
520+
!CHECK: %[[VAL_1:.*]] = fir.alloca i32 {bindc_name = "b", fir.target, uniq_name = "_QFomp_target_is_device_ptrEb"}
521521
integer, target :: b
522522
!CHECK: %[[MAP_0:.*]] = omp.map.info var_ptr(%[[DEV_PTR:.*]] : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>) map_clauses(tofrom) capture(ByRef) -> !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>> {name = "a"}
523523
!CHECK: %[[MAP_1:.*]] = omp.map.info var_ptr(%[[VAL_0:.*]] : !fir.ref<i32>, i32) map_clauses(tofrom) capture(ByRef) -> !fir.ref<i32> {name = "b"}
524524
!CHECK: %[[MAP_2:.*]] = omp.map.info var_ptr(%[[DEV_PTR:.*]] : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>) map_clauses(implicit, exit_release_or_enter_alloc) capture(ByRef) -> !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>> {name = "a"}
525525
!CHECK: omp.target is_device_ptr(%[[DEV_PTR:.*]] : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) map_entries(%[[MAP_0:.*]] -> %[[ARG0:.*]], %[[MAP_1:.*]] -> %[[ARG1:.*]], %[[MAP_2:.*]] -> %[[ARG2:.*]] : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.ref<i32>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) {
526526
!CHECK: ^bb0(%[[ARG0]]: !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, %[[ARG1]]: !fir.ref<i32>, %[[ARG2]]: !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>):
527527
!$omp target map(tofrom: a,b) is_device_ptr(a)
528-
!CHECK: {{.*}} = fir.coordinate_of %[[DEV_PTR:.*]], {{.*}} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.field) -> !fir.ref<i64>
528+
!CHECK: {{.*}} = fir.coordinate_of %[[VAL_0:.*]], {{.*}} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.field) -> !fir.ref<i64>
529529
a = c_loc(b)
530530
!CHECK: omp.terminator
531531
!$omp end target
@@ -538,8 +538,8 @@ end subroutine omp_target_is_device_ptr
538538

539539
!CHECK-LABEL: func.func @_QPomp_target_has_device_addr() {
540540
subroutine omp_target_has_device_addr
541-
integer, pointer :: a
542541
!CHECK: %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "a", uniq_name = "_QFomp_target_has_device_addrEa"}
542+
integer, pointer :: a
543543
!CHECK: omp.target has_device_addr(%[[VAL_0:.*]] : !fir.ref<!fir.box<!fir.ptr<i32>>>) map_entries({{.*}} -> {{.*}}, {{.*}} -> {{.*}} : !fir.llvm_ptr<!fir.ref<i32>>, !fir.ref<!fir.box<!fir.ptr<i32>>>) {
544544
!$omp target has_device_addr(a)
545545
!CHECK: {{.*}} = fir.load %[[VAL_0:.*]] : !fir.ref<!fir.box<!fir.ptr<i32>>>

0 commit comments

Comments
 (0)