Skip to content

Commit c06700b

Browse files
authored
Revert "[flang][OpenMP] Add semantic check for declare target" (#72592)
Reverts #71861
1 parent 83cf0dc commit c06700b

22 files changed

+21
-803
lines changed

flang/lib/Lower/OpenMP.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -590,8 +590,6 @@ class ClauseProcessor {
590590
bool processSectionsReduction(mlir::Location currentLocation) const;
591591
bool processTo(llvm::SmallVectorImpl<DeclareTargetCapturePair> &result) const;
592592
bool
593-
processEnter(llvm::SmallVectorImpl<DeclareTargetCapturePair> &result) const;
594-
bool
595593
processUseDeviceAddr(llvm::SmallVectorImpl<mlir::Value> &operands,
596594
llvm::SmallVectorImpl<mlir::Type> &useDeviceTypes,
597595
llvm::SmallVectorImpl<mlir::Location> &useDeviceLocs,
@@ -1853,18 +1851,6 @@ bool ClauseProcessor::processTo(
18531851
});
18541852
}
18551853

1856-
bool ClauseProcessor::processEnter(
1857-
llvm::SmallVectorImpl<DeclareTargetCapturePair> &result) const {
1858-
return findRepeatableClause<ClauseTy::Enter>(
1859-
[&](const ClauseTy::Enter *enterClause,
1860-
const Fortran::parser::CharBlock &) {
1861-
// Case: declare target to(func, var1, var2)...
1862-
gatherFuncAndVarSyms(enterClause->v,
1863-
mlir::omp::DeclareTargetCaptureClause::enter,
1864-
result);
1865-
});
1866-
}
1867-
18681854
bool ClauseProcessor::processUseDeviceAddr(
18691855
llvm::SmallVectorImpl<mlir::Value> &operands,
18701856
llvm::SmallVectorImpl<mlir::Type> &useDeviceTypes,
@@ -2806,7 +2792,6 @@ static mlir::omp::DeclareTargetDeviceType getDeclareTargetInfo(
28062792

28072793
ClauseProcessor cp(converter, *clauseList);
28082794
cp.processTo(symbolAndClause);
2809-
cp.processEnter(symbolAndClause);
28102795
cp.processLink(symbolAndClause);
28112796
cp.processDeviceType(deviceType);
28122797
cp.processTODO<Fortran::parser::OmpClause::Indirect>(

flang/lib/Parser/openmp-parsers.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,6 @@ TYPE_PARSER(
259259
parenthesized("STATIC" >> maybe("," >> scalarIntExpr)))) ||
260260
"DYNAMIC_ALLOCATORS" >>
261261
construct<OmpClause>(construct<OmpClause::DynamicAllocators>()) ||
262-
"ENTER" >> construct<OmpClause>(construct<OmpClause::Enter>(
263-
parenthesized(Parser<OmpObjectList>{}))) ||
264262
"FINAL" >> construct<OmpClause>(construct<OmpClause::Final>(
265263
parenthesized(scalarLogicalExpr))) ||
266264
"FULL" >> construct<OmpClause>(construct<OmpClause::Full>()) ||

flang/lib/Semantics/check-omp-structure.cpp

Lines changed: 12 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,31 +1165,13 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Allocate &x) {
11651165
}
11661166
}
11671167

1168-
void OmpStructureChecker::Enter(const parser::OmpDeclareTargetWithClause &x) {
1169-
SetClauseSets(llvm::omp::Directive::OMPD_declare_target);
1170-
}
1171-
1172-
void OmpStructureChecker::Leave(const parser::OmpDeclareTargetWithClause &x) {
1173-
if (x.v.v.size() > 0) {
1174-
const parser::OmpClause *enterClause =
1175-
FindClause(llvm::omp::Clause::OMPC_enter);
1176-
const parser::OmpClause *toClause = FindClause(llvm::omp::Clause::OMPC_to);
1177-
const parser::OmpClause *linkClause =
1178-
FindClause(llvm::omp::Clause::OMPC_link);
1179-
if (!enterClause && !toClause && !linkClause) {
1180-
context_.Say(x.source,
1181-
"If the DECLARE TARGET directive has a clause, it must contain at lease one ENTER clause or LINK clause"_err_en_US);
1182-
}
1183-
if (toClause) {
1184-
context_.Say(toClause->source,
1185-
"The usage of TO clause on DECLARE TARGET directive has been deprecated. Use ENTER clause instead."_warn_en_US);
1186-
}
1187-
}
1188-
}
1189-
11901168
void OmpStructureChecker::Enter(const parser::OpenMPDeclareTargetConstruct &x) {
11911169
const auto &dir{std::get<parser::Verbatim>(x.t)};
11921170
PushContext(dir.source, llvm::omp::Directive::OMPD_declare_target);
1171+
const auto &spec{std::get<parser::OmpDeclareTargetSpecifier>(x.t)};
1172+
if (std::holds_alternative<parser::OmpDeclareTargetWithClause>(spec.u)) {
1173+
SetClauseSets(llvm::omp::Directive::OMPD_declare_target);
1174+
}
11931175
}
11941176

11951177
void OmpStructureChecker::Enter(const parser::OmpDeclareTargetWithList &x) {
@@ -1263,8 +1245,7 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
12631245
CheckThreadprivateOrDeclareTargetVar(*objectList);
12641246
} else if (const auto *clauseList{
12651247
parser::Unwrap<parser::OmpClauseList>(spec.u)}) {
1266-
bool toClauseFound{false}, deviceTypeClauseFound{false},
1267-
enterClauseFound{false};
1248+
bool toClauseFound{false}, deviceTypeClauseFound{false};
12681249
for (const auto &clause : clauseList->v) {
12691250
common::visit(
12701251
common::visitors{
@@ -1279,12 +1260,6 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
12791260
CheckIsVarPartOfAnotherVar(dir.source, linkClause.v);
12801261
CheckThreadprivateOrDeclareTargetVar(linkClause.v);
12811262
},
1282-
[&](const parser::OmpClause::Enter &enterClause) {
1283-
enterClauseFound = true;
1284-
CheckSymbolNames(dir.source, enterClause.v);
1285-
CheckIsVarPartOfAnotherVar(dir.source, enterClause.v);
1286-
CheckThreadprivateOrDeclareTargetVar(enterClause.v);
1287-
},
12881263
[&](const parser::OmpClause::DeviceType &deviceTypeClause) {
12891264
deviceTypeClauseFound = true;
12901265
if (deviceTypeClause.v.v !=
@@ -1298,7 +1273,7 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
12981273
},
12991274
clause.u);
13001275

1301-
if ((toClauseFound || enterClauseFound) && !deviceTypeClauseFound) {
1276+
if (toClauseFound && !deviceTypeClauseFound) {
13021277
deviceConstructFound_ = true;
13031278
}
13041279
}
@@ -2253,7 +2228,6 @@ CHECK_SIMPLE_CLAUSE(CancellationConstructType, OMPC_cancellation_construct_type)
22532228
CHECK_SIMPLE_CLAUSE(Doacross, OMPC_doacross)
22542229
CHECK_SIMPLE_CLAUSE(OmpxAttribute, OMPC_ompx_attribute)
22552230
CHECK_SIMPLE_CLAUSE(OmpxBare, OMPC_ompx_bare)
2256-
CHECK_SIMPLE_CLAUSE(Enter, OMPC_enter)
22572231

22582232
CHECK_REQ_SCALAR_INT_CLAUSE(Grainsize, OMPC_grainsize)
22592233
CHECK_REQ_SCALAR_INT_CLAUSE(NumTasks, OMPC_num_tasks)
@@ -3255,13 +3229,12 @@ const parser::OmpObjectList *OmpStructureChecker::GetOmpObjectList(
32553229
const parser::OmpClause &clause) {
32563230

32573231
// Clauses with OmpObjectList as its data member
3258-
using MemberObjectListClauses =
3259-
std::tuple<parser::OmpClause::Copyprivate, parser::OmpClause::Copyin,
3260-
parser::OmpClause::Firstprivate, parser::OmpClause::From,
3261-
parser::OmpClause::Lastprivate, parser::OmpClause::Link,
3262-
parser::OmpClause::Private, parser::OmpClause::Shared,
3263-
parser::OmpClause::To, parser::OmpClause::Enter,
3264-
parser::OmpClause::UseDevicePtr, parser::OmpClause::UseDeviceAddr>;
3232+
using MemberObjectListClauses = std::tuple<parser::OmpClause::Copyprivate,
3233+
parser::OmpClause::Copyin, parser::OmpClause::Firstprivate,
3234+
parser::OmpClause::From, parser::OmpClause::Lastprivate,
3235+
parser::OmpClause::Link, parser::OmpClause::Private,
3236+
parser::OmpClause::Shared, parser::OmpClause::To,
3237+
parser::OmpClause::UseDevicePtr, parser::OmpClause::UseDeviceAddr>;
32653238

32663239
// Clauses with OmpObjectList in the tuple
32673240
using TupleObjectListClauses =

flang/lib/Semantics/check-omp-structure.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ class OmpStructureChecker
8080
void Enter(const parser::OpenMPDeclareTargetConstruct &);
8181
void Leave(const parser::OpenMPDeclareTargetConstruct &);
8282
void Enter(const parser::OmpDeclareTargetWithList &);
83-
void Enter(const parser::OmpDeclareTargetWithClause &);
84-
void Leave(const parser::OmpDeclareTargetWithClause &);
8583
void Enter(const parser::OpenMPExecutableAllocate &);
8684
void Leave(const parser::OpenMPExecutableAllocate &);
8785
void Enter(const parser::OpenMPAllocatorsConstruct &);

flang/lib/Semantics/resolve-directives.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1744,9 +1744,6 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPDeclareTargetConstruct &x) {
17441744
} else if (const auto *linkClause{
17451745
std::get_if<parser::OmpClause::Link>(&clause.u)}) {
17461746
ResolveOmpObjectList(linkClause->v, Symbol::Flag::OmpDeclareTarget);
1747-
} else if (const auto *enterClause{
1748-
std::get_if<parser::OmpClause::Enter>(&clause.u)}) {
1749-
ResolveOmpObjectList(enterClause->v, Symbol::Flag::OmpDeclareTarget);
17501747
}
17511748
}
17521749
}

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

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,6 @@ module test_0
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
36-
INTEGER :: data_int_enter = 5
37-
!$omp declare target enter(data_int_enter)
38-
3935
!CHECK-DAG: fir.global @_QMtest_0Edata_int_clauseless {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : i32
4036
INTEGER :: data_int_clauseless = 1
4137
!$omp declare target(data_int_clauseless)
@@ -46,12 +42,6 @@ module test_0
4642
REAL :: data_extended_to_2 = 3
4743
!$omp declare target to(data_extended_to_1, data_extended_to_2)
4844

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
51-
REAL :: data_extended_enter_1 = 2
52-
REAL :: data_extended_enter_2 = 3
53-
!$omp declare target enter(data_extended_enter_1, data_extended_enter_2)
54-
5545
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_link_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : f32
5646
!CHECK-DAG: fir.global @_QMtest_0Edata_extended_link_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : f32
5747
REAL :: data_extended_link_1 = 2
@@ -79,10 +69,4 @@ PROGRAM commons
7969
REAL :: two_to = 2
8070
COMMON /numbers_to/ one_to, two_to
8171
!$omp declare target to(/numbers_to/)
82-
83-
!CHECK-DAG: fir.global @numbers_enter_ {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>} : tuple<f32, f32> {
84-
REAL :: one_enter = 1
85-
REAL :: two_enter = 2
86-
COMMON /numbers_enter/ one_enter, two_enter
87-
!$omp declare target enter(/numbers_enter/)
8872
END

flang/test/Lower/OpenMP/FIR/declare-target-func-and-subr.f90

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,6 @@ FUNCTION FUNC_T_DEVICE() RESULT(I)
1313
I = 1
1414
END FUNCTION FUNC_T_DEVICE
1515

16-
! DEVICE-LABEL: func.func @_QPfunc_enter_device()
17-
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter)>{{.*}}
18-
FUNCTION FUNC_ENTER_DEVICE() RESULT(I)
19-
!$omp declare target enter(FUNC_ENTER_DEVICE) device_type(nohost)
20-
INTEGER :: I
21-
I = 1
22-
END FUNCTION FUNC_ENTER_DEVICE
23-
2416
! HOST-LABEL: func.func @_QPfunc_t_host()
2517
! HOST-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (to)>{{.*}}
2618
FUNCTION FUNC_T_HOST() RESULT(I)
@@ -29,14 +21,6 @@ FUNCTION FUNC_T_HOST() RESULT(I)
2921
I = 1
3022
END FUNCTION FUNC_T_HOST
3123

32-
! HOST-LABEL: func.func @_QPfunc_enter_host()
33-
! HOST-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (enter)>{{.*}}
34-
FUNCTION FUNC_ENTER_HOST() RESULT(I)
35-
!$omp declare target enter(FUNC_ENTER_HOST) device_type(host)
36-
INTEGER :: I
37-
I = 1
38-
END FUNCTION FUNC_ENTER_HOST
39-
4024
! ALL-LABEL: func.func @_QPfunc_t_any()
4125
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}
4226
FUNCTION FUNC_T_ANY() RESULT(I)
@@ -45,14 +29,6 @@ FUNCTION FUNC_T_ANY() RESULT(I)
4529
I = 1
4630
END FUNCTION FUNC_T_ANY
4731

48-
! ALL-LABEL: func.func @_QPfunc_enter_any()
49-
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>{{.*}}
50-
FUNCTION FUNC_ENTER_ANY() RESULT(I)
51-
!$omp declare target enter(FUNC_ENTER_ANY) device_type(any)
52-
INTEGER :: I
53-
I = 1
54-
END FUNCTION FUNC_ENTER_ANY
55-
5632
! ALL-LABEL: func.func @_QPfunc_default_t_any()
5733
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}
5834
FUNCTION FUNC_DEFAULT_T_ANY() RESULT(I)
@@ -61,14 +37,6 @@ FUNCTION FUNC_DEFAULT_T_ANY() RESULT(I)
6137
I = 1
6238
END FUNCTION FUNC_DEFAULT_T_ANY
6339

64-
! ALL-LABEL: func.func @_QPfunc_default_enter_any()
65-
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>{{.*}}
66-
FUNCTION FUNC_DEFAULT_ENTER_ANY() RESULT(I)
67-
!$omp declare target enter(FUNC_DEFAULT_ENTER_ANY)
68-
INTEGER :: I
69-
I = 1
70-
END FUNCTION FUNC_DEFAULT_ENTER_ANY
71-
7240
! ALL-LABEL: func.func @_QPfunc_default_any()
7341
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}
7442
FUNCTION FUNC_DEFAULT_ANY() RESULT(I)
@@ -97,48 +65,24 @@ SUBROUTINE SUBR_T_DEVICE()
9765
!$omp declare target to(SUBR_T_DEVICE) device_type(nohost)
9866
END
9967

100-
! DEVICE-LABEL: func.func @_QPsubr_enter_device()
101-
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter)>{{.*}}
102-
SUBROUTINE SUBR_ENTER_DEVICE()
103-
!$omp declare target enter(SUBR_ENTER_DEVICE) device_type(nohost)
104-
END
105-
10668
! HOST-LABEL: func.func @_QPsubr_t_host()
10769
! HOST-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (to)>{{.*}}
10870
SUBROUTINE SUBR_T_HOST()
10971
!$omp declare target to(SUBR_T_HOST) device_type(host)
11072
END
11173

112-
! HOST-LABEL: func.func @_QPsubr_enter_host()
113-
! HOST-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (enter)>{{.*}}
114-
SUBROUTINE SUBR_ENTER_HOST()
115-
!$omp declare target enter(SUBR_ENTER_HOST) device_type(host)
116-
END
117-
11874
! ALL-LABEL: func.func @_QPsubr_t_any()
11975
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}
12076
SUBROUTINE SUBR_T_ANY()
12177
!$omp declare target to(SUBR_T_ANY) device_type(any)
12278
END
12379

124-
! ALL-LABEL: func.func @_QPsubr_enter_any()
125-
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>{{.*}}
126-
SUBROUTINE SUBR_ENTER_ANY()
127-
!$omp declare target enter(SUBR_ENTER_ANY) device_type(any)
128-
END
129-
13080
! ALL-LABEL: func.func @_QPsubr_default_t_any()
13181
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}
13282
SUBROUTINE SUBR_DEFAULT_T_ANY()
13383
!$omp declare target to(SUBR_DEFAULT_T_ANY)
13484
END
13585

136-
! ALL-LABEL: func.func @_QPsubr_default_enter_any()
137-
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>{{.*}}
138-
SUBROUTINE SUBR_DEFAULT_ENTER_ANY()
139-
!$omp declare target enter(SUBR_DEFAULT_ENTER_ANY)
140-
END
141-
14286
! ALL-LABEL: func.func @_QPsubr_default_any()
14387
! ALL-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}
14488
SUBROUTINE SUBR_DEFAULT_ANY()
@@ -164,15 +108,3 @@ RECURSIVE FUNCTION RECURSIVE_DECLARE_TARGET(INCREMENT) RESULT(K)
164108
K = RECURSIVE_DECLARE_TARGET(INCREMENT + 1)
165109
END IF
166110
END FUNCTION RECURSIVE_DECLARE_TARGET
167-
168-
! DEVICE-LABEL: func.func @_QPrecursive_declare_target_enter
169-
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter)>{{.*}}
170-
RECURSIVE FUNCTION RECURSIVE_DECLARE_TARGET_ENTER(INCREMENT) RESULT(K)
171-
!$omp declare target enter(RECURSIVE_DECLARE_TARGET_ENTER) device_type(nohost)
172-
INTEGER :: INCREMENT, K
173-
IF (INCREMENT == 10) THEN
174-
K = INCREMENT
175-
ELSE
176-
K = RECURSIVE_DECLARE_TARGET_ENTER(INCREMENT + 1)
177-
END IF
178-
END FUNCTION RECURSIVE_DECLARE_TARGET_ENTER

0 commit comments

Comments
 (0)