Skip to content

Commit ba42afb

Browse files
committed
[MLIR][OpenMP] Add lowering support for AUTOMAP modifier
Add Automap modifier to the MLIR op definition for the DeclareTarget directive's Enter clause. Also add lowering support in Flang. Automap Ref: OpenMP 6.0 section 7.9.7.
1 parent 3ee8d04 commit ba42afb

19 files changed

+182
-147
lines changed

flang/include/flang/Lower/OpenMP.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ struct Variable;
5757
struct OMPDeferredDeclareTargetInfo {
5858
mlir::omp::DeclareTargetCaptureClause declareTargetCaptureClause;
5959
mlir::omp::DeclareTargetDeviceType declareTargetDeviceType;
60+
bool automap = false;
6061
const Fortran::semantics::Symbol &sym;
6162
};
6263

flang/lib/Lower/OpenMP/ClauseProcessor.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,7 +1184,8 @@ bool ClauseProcessor::processLink(
11841184
[&](const omp::clause::Link &clause, const parser::CharBlock &) {
11851185
// Case: declare target link(var1, var2)...
11861186
gatherFuncAndVarSyms(
1187-
clause.v, mlir::omp::DeclareTargetCaptureClause::link, result);
1187+
clause.v, mlir::omp::DeclareTargetCaptureClause::link, result,
1188+
/*automap=*/false);
11881189
});
11891190
}
11901191

@@ -1512,7 +1513,8 @@ bool ClauseProcessor::processTo(
15121513
[&](const omp::clause::To &clause, const parser::CharBlock &) {
15131514
// Case: declare target to(func, var1, var2)...
15141515
gatherFuncAndVarSyms(std::get<ObjectList>(clause.t),
1515-
mlir::omp::DeclareTargetCaptureClause::to, result);
1516+
mlir::omp::DeclareTargetCaptureClause::to, result,
1517+
/*automap=*/false);
15161518
});
15171519
}
15181520

@@ -1521,12 +1523,13 @@ bool ClauseProcessor::processEnter(
15211523
return findRepeatableClause<omp::clause::Enter>(
15221524
[&](const omp::clause::Enter &clause, const parser::CharBlock &source) {
15231525
mlir::Location currentLocation = converter.genLocation(source);
1524-
if (std::get<std::optional<omp::clause::Enter::Modifier>>(clause.t))
1525-
TODO(currentLocation, "Declare target enter AUTOMAP modifier");
1526+
bool automap =
1527+
std::get<std::optional<omp::clause::Enter::Modifier>>(clause.t)
1528+
.has_value();
15261529
// Case: declare target enter(func, var1, var2)...
15271530
gatherFuncAndVarSyms(std::get<ObjectList>(clause.t),
15281531
mlir::omp::DeclareTargetCaptureClause::enter,
1529-
result);
1532+
result, automap);
15301533
});
15311534
}
15321535

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -771,7 +771,7 @@ static void getDeclareTargetInfo(
771771
ObjectList objects{makeObjects(*objectList, semaCtx)};
772772
// Case: declare target(func, var1, var2)
773773
gatherFuncAndVarSyms(objects, mlir::omp::DeclareTargetCaptureClause::to,
774-
symbolAndClause);
774+
symbolAndClause, /*automap=*/false);
775775
} else if (const auto *clauseList{
776776
parser::Unwrap<parser::OmpClauseList>(spec.u)}) {
777777
List<Clause> clauses = makeClauses(*clauseList, semaCtx);
@@ -812,13 +812,12 @@ static void collectDeferredDeclareTargets(
812812
mlir::ModuleOp mod = converter.getFirOpBuilder().getModule();
813813

814814
for (const DeclareTargetCapturePair &symClause : symbolAndClause) {
815-
mlir::Operation *op = mod.lookupSymbol(
816-
converter.mangleName(std::get<const semantics::Symbol &>(symClause)));
815+
mlir::Operation *op =
816+
mod.lookupSymbol(converter.mangleName(symClause.symbol));
817817

818818
if (!op) {
819-
deferredDeclareTarget.push_back({std::get<0>(symClause),
820-
clauseOps.deviceType,
821-
std::get<1>(symClause)});
819+
deferredDeclareTarget.push_back({symClause.clause, clauseOps.deviceType,
820+
symClause.automap, symClause.symbol});
822821
}
823822
}
824823
}
@@ -837,8 +836,8 @@ getDeclareTargetFunctionDevice(
837836
// directive is a function or subroutine
838837
mlir::ModuleOp mod = converter.getFirOpBuilder().getModule();
839838
for (const DeclareTargetCapturePair &symClause : symbolAndClause) {
840-
mlir::Operation *op = mod.lookupSymbol(
841-
converter.mangleName(std::get<const semantics::Symbol &>(symClause)));
839+
mlir::Operation *op =
840+
mod.lookupSymbol(converter.mangleName(symClause.symbol));
842841

843842
if (mlir::isa_and_nonnull<mlir::func::FuncOp>(op))
844843
return clauseOps.deviceType;
@@ -1055,7 +1054,7 @@ getImplicitMapTypeAndKind(fir::FirOpBuilder &firOpBuilder,
10551054
static void
10561055
markDeclareTarget(mlir::Operation *op, lower::AbstractConverter &converter,
10571056
mlir::omp::DeclareTargetCaptureClause captureClause,
1058-
mlir::omp::DeclareTargetDeviceType deviceType) {
1057+
mlir::omp::DeclareTargetDeviceType deviceType, bool automap) {
10591058
// TODO: Add support for program local variables with declare target applied
10601059
auto declareTargetOp = llvm::dyn_cast<mlir::omp::DeclareTargetInterface>(op);
10611060
if (!declareTargetOp)
@@ -1070,11 +1069,11 @@ markDeclareTarget(mlir::Operation *op, lower::AbstractConverter &converter,
10701069
if (declareTargetOp.isDeclareTarget()) {
10711070
if (declareTargetOp.getDeclareTargetDeviceType() != deviceType)
10721071
declareTargetOp.setDeclareTarget(mlir::omp::DeclareTargetDeviceType::any,
1073-
captureClause);
1072+
captureClause, automap);
10741073
return;
10751074
}
10761075

1077-
declareTargetOp.setDeclareTarget(deviceType, captureClause);
1076+
declareTargetOp.setDeclareTarget(deviceType, captureClause, automap);
10781077
}
10791078

10801079
//===----------------------------------------------------------------------===//
@@ -3546,19 +3545,17 @@ genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable,
35463545
clauseOps, symbolAndClause);
35473546

35483547
for (const DeclareTargetCapturePair &symClause : symbolAndClause) {
3549-
mlir::Operation *op = mod.lookupSymbol(
3550-
converter.mangleName(std::get<const semantics::Symbol &>(symClause)));
3548+
mlir::Operation *op =
3549+
mod.lookupSymbol(converter.mangleName(symClause.symbol));
35513550

35523551
// Some symbols are deferred until later in the module, these are handled
35533552
// upon finalization of the module for OpenMP inside of Bridge, so we simply
35543553
// skip for now.
35553554
if (!op)
35563555
continue;
35573556

3558-
markDeclareTarget(
3559-
op, converter,
3560-
std::get<mlir::omp::DeclareTargetCaptureClause>(symClause),
3561-
clauseOps.deviceType);
3557+
markDeclareTarget(op, converter, symClause.clause, clauseOps.deviceType,
3558+
symClause.automap);
35623559
}
35633560
}
35643561

@@ -4141,7 +4138,7 @@ bool Fortran::lower::markOpenMPDeferredDeclareTargetFunctions(
41414138
deviceCodeFound = true;
41424139

41434140
markDeclareTarget(op, converter, declTar.declareTargetCaptureClause,
4144-
devType);
4141+
devType, declTar.automap);
41454142
}
41464143

41474144
return deviceCodeFound;

flang/lib/Lower/OpenMP/Utils.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,10 @@ getIterationVariableSymbol(const lower::pft::Evaluation &eval) {
102102

103103
void gatherFuncAndVarSyms(
104104
const ObjectList &objects, mlir::omp::DeclareTargetCaptureClause clause,
105-
llvm::SmallVectorImpl<DeclareTargetCapturePair> &symbolAndClause) {
105+
llvm::SmallVectorImpl<DeclareTargetCapturePair> &symbolAndClause,
106+
bool automap) {
106107
for (const Object &object : objects)
107-
symbolAndClause.emplace_back(clause, *object.sym());
108+
symbolAndClause.emplace_back(clause, *object.sym(), automap);
108109
}
109110

110111
mlir::omp::MapInfoOp

flang/lib/Lower/OpenMP/Utils.h

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,15 @@ class AbstractConverter;
4242

4343
namespace omp {
4444

45-
using DeclareTargetCapturePair =
46-
std::pair<mlir::omp::DeclareTargetCaptureClause, const semantics::Symbol &>;
45+
struct DeclareTargetCapturePair {
46+
mlir::omp::DeclareTargetCaptureClause clause;
47+
bool automap = false;
48+
const semantics::Symbol &symbol;
49+
50+
DeclareTargetCapturePair(mlir::omp::DeclareTargetCaptureClause c,
51+
const semantics::Symbol &s, bool a = false)
52+
: clause(c), automap(a), symbol(s) {}
53+
};
4754

4855
// A small helper structure for keeping track of a component members MapInfoOp
4956
// and index data when lowering OpenMP map clauses. Keeps track of the
@@ -150,7 +157,8 @@ getIterationVariableSymbol(const lower::pft::Evaluation &eval);
150157

151158
void gatherFuncAndVarSyms(
152159
const ObjectList &objects, mlir::omp::DeclareTargetCaptureClause clause,
153-
llvm::SmallVectorImpl<DeclareTargetCapturePair> &symbolAndClause);
160+
llvm::SmallVectorImpl<DeclareTargetCapturePair> &symbolAndClause,
161+
bool automap = false);
154162

155163
int64_t getCollapseValue(const List<Clause> &clauses);
156164

flang/lib/Optimizer/OpenMP/FunctionFiltering.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,9 @@ class FunctionFilteringPass
9595
return WalkResult::skip();
9696
}
9797
if (declareTargetOp)
98-
declareTargetOp.setDeclareTarget(declareType,
99-
omp::DeclareTargetCaptureClause::to);
98+
declareTargetOp.setDeclareTarget(
99+
declareType, omp::DeclareTargetCaptureClause::to,
100+
declareTargetOp.getDeclareTargetAutomap());
100101
}
101102
return WalkResult::advance();
102103
});

flang/lib/Optimizer/OpenMP/MarkDeclareTarget.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class MarkDeclareTargetPass
3333

3434
void markNestedFuncs(mlir::omp::DeclareTargetDeviceType parentDevTy,
3535
mlir::omp::DeclareTargetCaptureClause parentCapClause,
36-
mlir::Operation *currOp,
36+
bool parentAutomap, mlir::Operation *currOp,
3737
llvm::SmallPtrSet<mlir::Operation *, 16> visited) {
3838
if (visited.contains(currOp))
3939
return;
@@ -57,13 +57,16 @@ class MarkDeclareTargetPass
5757
currentDt != mlir::omp::DeclareTargetDeviceType::any) {
5858
current.setDeclareTarget(
5959
mlir::omp::DeclareTargetDeviceType::any,
60-
current.getDeclareTargetCaptureClause());
60+
current.getDeclareTargetCaptureClause(),
61+
current.getDeclareTargetAutomap());
6162
}
6263
} else {
63-
current.setDeclareTarget(parentDevTy, parentCapClause);
64+
current.setDeclareTarget(parentDevTy, parentCapClause,
65+
parentAutomap);
6466
}
6567

66-
markNestedFuncs(parentDevTy, parentCapClause, currFOp, visited);
68+
markNestedFuncs(parentDevTy, parentCapClause, parentAutomap,
69+
currFOp, visited);
6770
}
6871
}
6972
}
@@ -81,7 +84,8 @@ class MarkDeclareTargetPass
8184
llvm::SmallPtrSet<mlir::Operation *, 16> visited;
8285
markNestedFuncs(declareTargetOp.getDeclareTargetDeviceType(),
8386
declareTargetOp.getDeclareTargetCaptureClause(),
84-
functionOp, visited);
87+
declareTargetOp.getDeclareTargetAutomap(), functionOp,
88+
visited);
8589
}
8690
}
8791

@@ -92,9 +96,10 @@ class MarkDeclareTargetPass
9296
// the contents of the device clause
9397
getOperation()->walk([&](mlir::omp::TargetOp tarOp) {
9498
llvm::SmallPtrSet<mlir::Operation *, 16> visited;
95-
markNestedFuncs(mlir::omp::DeclareTargetDeviceType::nohost,
96-
mlir::omp::DeclareTargetCaptureClause::to, tarOp,
97-
visited);
99+
markNestedFuncs(
100+
/*parentDevTy=*/mlir::omp::DeclareTargetDeviceType::nohost,
101+
/*parentCapClause=*/mlir::omp::DeclareTargetCaptureClause::to,
102+
/*parentAutomap=*/false, tarOp, visited);
98103
});
99104
}
100105
};

flang/test/Lower/OpenMP/common-block-map.f90

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

33
!CHECK: fir.global common @var_common_(dense<0> : vector<8xi8>) {{.*}} : !fir.array<8xi8>
4-
!CHECK: fir.global common @var_common_link_(dense<0> : vector<8xi8>) {{{.*}} omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.array<8xi8>
4+
!CHECK: fir.global common @var_common_link_(dense<0> : vector<8xi8>) {{{.*}} omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} : !fir.array<8xi8>
55

66
!CHECK-LABEL: func.func @_QPmap_full_block
77
!CHECK: %[[CB_ADDR:.*]] = fir.address_of(@var_common_) : !fir.ref<!fir.array<8xi8>>

flang/test/Lower/OpenMP/declare-target-data.f90

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,90 @@
1-
!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s
1+
!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s
22
!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-target-device %s -o - | FileCheck %s
33

44
module test_0
55
implicit none
66

7-
!CHECK-DAG: fir.global @_QMtest_0Edata_int {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : i32
7+
!CHECK-DAG: fir.global @_QMtest_0Edata_int {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} : i32
88
INTEGER :: data_int = 10
99
!$omp declare target link(data_int)
1010

11-
!CHECK-DAG: fir.global @_QMtest_0Earray_1d({{.*}}) {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.array<3xi32>
11+
!CHECK-DAG: fir.global @_QMtest_0Earray_1d({{.*}}) {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} : !fir.array<3xi32>
1212
INTEGER :: array_1d(3) = (/1,2,3/)
1313
!$omp declare target link(array_1d)
1414

15-
!CHECK-DAG: fir.global @_QMtest_0Earray_2d({{.*}}) {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.array<2x2xi32>
15+
!CHECK-DAG: fir.global @_QMtest_0Earray_2d({{.*}}) {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} : !fir.array<2x2xi32>
1616
INTEGER :: array_2d(2,2) = reshape((/1,2,3,4/), (/2,2/))
1717
!$omp declare target link(array_2d)
1818

19-
!CHECK-DAG: fir.global @_QMtest_0Ept1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.box<!fir.ptr<i32>>
19+
!CHECK-DAG: fir.global @_QMtest_0Ept1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} : !fir.box<!fir.ptr<i32>>
2020
INTEGER, POINTER :: pt1
2121
!$omp declare target link(pt1)
2222

23-
!CHECK-DAG: fir.global @_QMtest_0Ept2_tar {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} target : i32
24-
INTEGER, TARGET :: pt2_tar = 5
23+
!CHECK-DAG: fir.global @_QMtest_0Ept2_tar {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} target : i32
24+
INTEGER, TARGET :: pt2_tar = 5
2525
!$omp declare target link(pt2_tar)
2626

27-
!CHECK-DAG: fir.global @_QMtest_0Ept2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.box<!fir.ptr<i32>>
27+
!CHECK-DAG: fir.global @_QMtest_0Ept2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} : !fir.box<!fir.ptr<i32>>
2828
INTEGER, POINTER :: pt2 => pt2_tar
2929
!$omp declare target link(pt2)
3030

31-
!CHECK-DAG: fir.global @_QMtest_0Edata_int_to {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : i32
31+
!CHECK-DAG: fir.global @_QMtest_0Edata_int_to {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to), automap = false>} : i32
3232
INTEGER :: data_int_to = 5
3333
!$omp declare target to(data_int_to)
3434

35-
!CHECK-DAG: fir.global @_QMtest_0Edata_int_enter {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>} : i32
35+
!CHECK-DAG: fir.global @_QMtest_0Edata_int_enter {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>} : i32
3636
INTEGER :: data_int_enter = 5
3737
!$omp declare target enter(data_int_enter)
3838

39-
!CHECK-DAG: fir.global @_QMtest_0Edata_int_clauseless {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : i32
39+
!CHECK-DAG: fir.global @_QMtest_0Edata_int_clauseless {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to), automap = false>} : i32
4040
INTEGER :: data_int_clauseless = 1
4141
!$omp declare target(data_int_clauseless)
4242

43-
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_to_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : f32
44-
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_to_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : f32
43+
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_to_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to), automap = false>} : f32
44+
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_to_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to), automap = false>} : f32
4545
REAL :: data_extended_to_1 = 2
4646
REAL :: data_extended_to_2 = 3
4747
!$omp declare target to(data_extended_to_1, data_extended_to_2)
4848

49-
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_enter_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>} : f32
50-
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_enter_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>} : f32
49+
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_enter_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>} : f32
50+
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_enter_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>} : f32
5151
REAL :: data_extended_enter_1 = 2
5252
REAL :: data_extended_enter_2 = 3
5353
!$omp declare target enter(data_extended_enter_1, data_extended_enter_2)
5454

55-
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_link_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : f32
56-
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_link_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : f32
55+
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_link_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} : f32
56+
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_link_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} : f32
5757
REAL :: data_extended_link_1 = 2
5858
REAL :: data_extended_link_2 = 3
5959
!$omp declare target link(data_extended_link_1, data_extended_link_2)
6060

61+
!CHECK-DAG: fir.global @_QMtest_0Eautomap_data {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = true>} target : !fir.box<!fir.heap<i32>>
62+
INTEGER, ALLOCATABLE, TARGET :: automap_data
63+
!$omp declare target enter(automap : automap_data)
64+
6165
contains
6266
end module test_0
6367

6468
PROGRAM commons
65-
!CHECK-DAG: fir.global @numbers_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : tuple<f32, f32> {
69+
!CHECK-DAG: fir.global @numbers_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to), automap = false>} : tuple<f32, f32> {
6670
REAL :: one = 1
6771
REAL :: two = 2
6872
COMMON /numbers/ one, two
6973
!$omp declare target(/numbers/)
70-
71-
!CHECK-DAG: fir.global @numbers_link_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : tuple<f32, f32> {
74+
75+
!CHECK-DAG: fir.global @numbers_link_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link), automap = false>} : tuple<f32, f32> {
7276
REAL :: one_link = 1
7377
REAL :: two_link = 2
7478
COMMON /numbers_link/ one_link, two_link
7579
!$omp declare target link(/numbers_link/)
7680

77-
!CHECK-DAG: fir.global @numbers_to_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : tuple<f32, f32> {
81+
!CHECK-DAG: fir.global @numbers_to_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to), automap = false>} : tuple<f32, f32> {
7882
REAL :: one_to = 1
7983
REAL :: two_to = 2
8084
COMMON /numbers_to/ one_to, two_to
8185
!$omp declare target to(/numbers_to/)
8286

83-
!CHECK-DAG: fir.global @numbers_enter_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>} : tuple<f32, f32> {
87+
!CHECK-DAG: fir.global @numbers_enter_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>} : tuple<f32, f32> {
8488
REAL :: one_enter = 1
8589
REAL :: two_enter = 2
8690
COMMON /numbers_enter/ one_enter, two_enter

0 commit comments

Comments
 (0)