Author: Kiran Chandramohan Date: 2025-03-19T11:13:10Z New Revision: 16e0ae5e9a6a507cdf39a45823ac0df18bb7d946
URL: https://github.com/llvm/llvm-project/commit/16e0ae5e9a6a507cdf39a45823ac0df18bb7d946 DIFF: https://github.com/llvm/llvm-project/commit/16e0ae5e9a6a507cdf39a45823ac0df18bb7d946.diff LOG: Revert "[flang][openmp] Adds Parser and Semantic Support for Interop Construc…" This reverts commit ee8a759bfb4772dea7459f4ecbd83bc2be5ee68b. Added: Modified: flang/examples/FeatureList/FeatureList.cpp flang/include/flang/Parser/dump-parse-tree.h flang/include/flang/Parser/parse-tree.h flang/include/flang/Semantics/openmp-modifiers.h flang/lib/Lower/OpenMP/OpenMP.cpp flang/lib/Parser/openmp-parsers.cpp flang/lib/Parser/unparse.cpp flang/lib/Semantics/check-omp-structure.cpp flang/lib/Semantics/check-omp-structure.h flang/lib/Semantics/openmp-modifiers.cpp llvm/include/llvm/Frontend/OpenMP/OMP.td Removed: flang/test/Lower/OpenMP/Todo/inteorp-construct.f90 flang/test/Parser/OpenMP/interop-construct.f90 flang/test/Semantics/OpenMP/interop-construct.f90 ################################################################################ diff --git a/flang/examples/FeatureList/FeatureList.cpp b/flang/examples/FeatureList/FeatureList.cpp index e34f103a1df04..a1a908820e39c 100644 --- a/flang/examples/FeatureList/FeatureList.cpp +++ b/flang/examples/FeatureList/FeatureList.cpp @@ -522,13 +522,6 @@ struct NodeVisitor { READ_FEATURE(OmpScheduleClause) READ_FEATURE(OmpScheduleClause::Kind) READ_FEATURE(OmpScheduleClause::Modifier) - READ_FEATURE(OmpInteropRuntimeIdentifier) - READ_FEATURE(OmpInteropPreference) - READ_FEATURE(OmpInteropType) - READ_FEATURE(OmpInteropType::Value) - READ_FEATURE(OmpInitClause) - READ_FEATURE(OmpInitClause::Modifier) - READ_FEATURE(OmpUseClause) READ_FEATURE(OmpDeviceModifier) READ_FEATURE(OmpDeviceClause) READ_FEATURE(OmpDeviceClause::Modifier) @@ -549,7 +542,6 @@ struct NodeVisitor { READ_FEATURE(OpenACCConstruct) READ_FEATURE(OpenACCDeclarativeConstruct) READ_FEATURE(OpenACCLoopConstruct) - READ_FEATURE(OpenMPInteropConstruct) READ_FEATURE(OpenACCRoutineConstruct) READ_FEATURE(OpenACCStandaloneDeclarativeConstruct) READ_FEATURE(OpenACCStandaloneConstruct) diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h index 8f6fd868feaf0..25fcc843f3732 100644 --- a/flang/include/flang/Parser/dump-parse-tree.h +++ b/flang/include/flang/Parser/dump-parse-tree.h @@ -656,13 +656,6 @@ class ParseTreeDumper { NODE_ENUM(OmpDeviceModifier, Value) NODE(parser, OmpDeviceTypeClause) NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription) - NODE(parser, OmpInteropRuntimeIdentifier) - NODE(parser, OmpInteropPreference) - NODE(parser, OmpInteropType) - NODE_ENUM(OmpInteropType, Value) - NODE(parser, OmpInitClause) - NODE(OmpInitClause, Modifier) - NODE(parser, OmpUseClause) NODE(parser, OmpUpdateClause) NODE(parser, OmpChunkModifier) NODE_ENUM(OmpChunkModifier, Value) @@ -682,7 +675,6 @@ class ParseTreeDumper { NODE(parser, OpenACCDeclarativeConstruct) NODE(parser, OpenACCEndConstruct) NODE(parser, OpenACCLoopConstruct) - NODE(parser, OpenMPInteropConstruct) NODE(parser, OpenACCRoutineConstruct) NODE(parser, OpenACCStandaloneDeclarativeConstruct) NODE(parser, OpenACCStandaloneConstruct) diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h index 371d7653b3b34..1b1d4125464e3 100644 --- a/flang/include/flang/Parser/parse-tree.h +++ b/flang/include/flang/Parser/parse-tree.h @@ -3824,33 +3824,6 @@ struct OmpExpectation { WRAPPER_CLASS_BOILERPLATE(OmpExpectation, Value); }; -// REF: [5.1:217-220], [5.2:293-294] -// -// OmpInteropRuntimeIdentifier -> // since 5.2 -// CharLiteralConstant || ScalarIntConstantExpr -struct OmpInteropRuntimeIdentifier { - UNION_CLASS_BOILERPLATE(OmpInteropRuntimeIdentifier); - std::variant<CharLiteralConstant, ScalarIntConstantExpr> u; -}; - -// REF: [5.1:217-220], [5.2:293-294] -// -// OmpInteropPreference -> // since 5.2 -// ([OmpRuntimeIdentifier, ...]) -struct OmpInteropPreference { - WRAPPER_CLASS_BOILERPLATE( - OmpInteropPreference, std::list<OmpInteropRuntimeIdentifier>); -}; - -// REF: [5.1:217-220], [5.2:293-294] -// -// InteropType -> target || targetsync // since 5.2 -// There can be at most only two interop-type. -struct OmpInteropType { - ENUM_CLASS(Value, Target, TargetSync) - WRAPPER_CLASS_BOILERPLATE(OmpInteropType, Value); -}; - // Ref: [5.0:47-49], [5.1:49-51], [5.2:67-69] // // iterator-modifier -> @@ -4508,25 +4481,6 @@ struct OmpWhenClause { t; }; -// REF: [5.1:217-220], [5.2:293-294] -// -// init-clause -> INIT ([interop-modifier,] [interop-type,] -// interop-type: interop-var) -// interop-modifier: prefer_type(preference-list) -// interop-type: target, targetsync -// interop-var: Ompobject -// There can be at most only two interop-type. -struct OmpInitClause { - TUPLE_CLASS_BOILERPLATE(OmpInitClause); - MODIFIER_BOILERPLATE(OmpInteropPreference, OmpInteropType); - std::tuple<MODIFIERS(), OmpObject> t; -}; - -// REF: [5.1:217-220], [5.2:294] -// -// 14.1.3 use-clause -> USE (interop-var) -WRAPPER_CLASS(OmpUseClause, OmpObject); - // OpenMP Clauses struct OmpClause { UNION_CLASS_BOILERPLATE(OmpClause); @@ -4985,15 +4939,6 @@ struct OmpSimpleStandaloneDirective { CharBlock source; }; -// Ref: [5.1:217-220], [5.2:291-292] -// -// interop -> INTEROP clause[ [ [,] clause]...] -struct OpenMPInteropConstruct { - TUPLE_CLASS_BOILERPLATE(OpenMPInteropConstruct); - CharBlock source; - std::tuple<Verbatim, OmpClauseList> t; -}; - struct OpenMPSimpleStandaloneConstruct { TUPLE_CLASS_BOILERPLATE(OpenMPSimpleStandaloneConstruct); CharBlock source; @@ -5005,7 +4950,7 @@ struct OpenMPStandaloneConstruct { CharBlock source; std::variant<OpenMPSimpleStandaloneConstruct, OpenMPFlushConstruct, OpenMPCancelConstruct, OpenMPCancellationPointConstruct, - OpenMPDepobjConstruct, OmpMetadirectiveDirective, OpenMPInteropConstruct> + OpenMPDepobjConstruct, OmpMetadirectiveDirective> u; }; diff --git a/flang/include/flang/Semantics/openmp-modifiers.h b/flang/include/flang/Semantics/openmp-modifiers.h index 4fbd80f989e72..7cdbf65adebe1 100644 --- a/flang/include/flang/Semantics/openmp-modifiers.h +++ b/flang/include/flang/Semantics/openmp-modifiers.h @@ -77,8 +77,6 @@ DECLARE_DESCRIPTOR(parser::OmpDependenceType); DECLARE_DESCRIPTOR(parser::OmpDeviceModifier); DECLARE_DESCRIPTOR(parser::OmpDirectiveNameModifier); DECLARE_DESCRIPTOR(parser::OmpExpectation); -DECLARE_DESCRIPTOR(parser::OmpInteropPreference); -DECLARE_DESCRIPTOR(parser::OmpInteropType); DECLARE_DESCRIPTOR(parser::OmpIterator); DECLARE_DESCRIPTOR(parser::OmpLastprivateModifier); DECLARE_DESCRIPTOR(parser::OmpLinearModifier); diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp index d7ae19b2794a0..ac688a69d7fb6 100644 --- a/flang/lib/Lower/OpenMP/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP/OpenMP.cpp @@ -425,9 +425,6 @@ extractOmpDirective(const parser::OpenMPConstruct &ompConstruct) { }, [](const parser::OpenMPDepobjConstruct &c) { return llvm::omp::OMPD_depobj; - }, - [](const parser::OpenMPInteropConstruct &c) { - return llvm::omp::OMPD_interop; }}, c.u); }, @@ -3378,13 +3375,6 @@ static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable, TODO(converter.getCurrentLocation(), "OpenMPDepobjConstruct"); } -static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable, - semantics::SemanticsContext &semaCtx, - lower::pft::Evaluation &eval, - const parser::OpenMPInteropConstruct &interopConstruct) { - TODO(converter.getCurrentLocation(), "OpenMPInteropConstruct"); -} - static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable, semantics::SemanticsContext &semaCtx, lower::pft::Evaluation &eval, diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp index 1aa3527c754fc..8c5c7063553ed 100644 --- a/flang/lib/Parser/openmp-parsers.cpp +++ b/flang/lib/Parser/openmp-parsers.cpp @@ -394,17 +394,6 @@ TYPE_PARSER(construct<OmpDeviceModifier>( TYPE_PARSER(construct<OmpExpectation>( // "PRESENT" >> pure(OmpExpectation::Value::Present))) -TYPE_PARSER(construct<OmpInteropRuntimeIdentifier>( - construct<OmpInteropRuntimeIdentifier>(charLiteralConstant) || - construct<OmpInteropRuntimeIdentifier>(scalarIntConstantExpr))) - -TYPE_PARSER(construct<OmpInteropPreference>(verbatim("PREFER_TYPE"_tok) >> - parenthesized(nonemptyList(Parser<OmpInteropRuntimeIdentifier>{})))) - -TYPE_PARSER(construct<OmpInteropType>( - "TARGETSYNC" >> pure(OmpInteropType::Value::TargetSync) || - "TARGET" >> pure(OmpInteropType::Value::Target))) - TYPE_PARSER(construct<OmpIteratorSpecifier>( // Using Parser<TypeDeclarationStmt> or Parser<EntityDecl> has the problem // that they will attempt to treat what follows the '=' as initialization. @@ -532,11 +521,6 @@ TYPE_PARSER(sourced( TYPE_PARSER(sourced(construct<OmpIfClause::Modifier>(OmpDirectiveNameParser{}))) -TYPE_PARSER(sourced( - construct<OmpInitClause::Modifier>( - construct<OmpInitClause::Modifier>(Parser<OmpInteropPreference>{})) || - construct<OmpInitClause::Modifier>(Parser<OmpInteropType>{}))) - TYPE_PARSER(sourced(construct<OmpInReductionClause::Modifier>( Parser<OmpReductionIdentifier>{}))) @@ -773,11 +757,6 @@ TYPE_PARSER( // OpenMPv5.2 12.5.2 detach-clause -> DETACH (event-handle) TYPE_PARSER(construct<OmpDetachClause>(Parser<OmpObject>{})) -// init clause -TYPE_PARSER(construct<OmpInitClause>( - maybe(nonemptyList(Parser<OmpInitClause::Modifier>{}) / ":"), - Parser<OmpObject>{})) - // 2.8.1 ALIGNED (list: alignment) TYPE_PARSER(construct<OmpAlignedClause>(Parser<OmpObjectList>{}, maybe(":" >> nonemptyList(Parser<OmpAlignedClause::Modifier>{})))) @@ -917,8 +896,6 @@ TYPE_PARSER( // "IF" >> construct<OmpClause>(construct<OmpClause::If>( parenthesized(Parser<OmpIfClause>{}))) || "INBRANCH" >> construct<OmpClause>(construct<OmpClause::Inbranch>()) || - "INIT" >> construct<OmpClause>(construct<OmpClause::Init>( - parenthesized(Parser<OmpInitClause>{}))) || "INCLUSIVE" >> construct<OmpClause>(construct<OmpClause::Inclusive>( parenthesized(Parser<OmpObjectList>{}))) || "INITIALIZER" >> construct<OmpClause>(construct<OmpClause::Initializer>( @@ -1008,8 +985,6 @@ TYPE_PARSER( // parenthesized(scalarIntExpr))) || "TO" >> construct<OmpClause>(construct<OmpClause::To>( parenthesized(Parser<OmpToClause>{}))) || - "USE" >> construct<OmpClause>(construct<OmpClause::Use>( - parenthesized(Parser<OmpObject>{}))) || "USE_DEVICE_PTR" >> construct<OmpClause>(construct<OmpClause::UseDevicePtr>( parenthesized(Parser<OmpObjectList>{}))) || "USE_DEVICE_ADDR" >> @@ -1237,10 +1212,6 @@ TYPE_PARSER(sourced(construct<OmpSimpleStandaloneDirective>(first( TYPE_PARSER(sourced(construct<OpenMPSimpleStandaloneConstruct>( Parser<OmpSimpleStandaloneDirective>{}, Parser<OmpClauseList>{}))) -// OMP 5.2 14.1 Interop construct -TYPE_PARSER(sourced(construct<OpenMPInteropConstruct>( - verbatim("INTEROP"_tok), sourced(Parser<OmpClauseList>{})))) - // Standalone Constructs TYPE_PARSER( sourced(construct<OpenMPStandaloneConstruct>( @@ -1252,9 +1223,7 @@ TYPE_PARSER( construct<OpenMPStandaloneConstruct>(Parser<OpenMPCancelConstruct>{}) || construct<OpenMPStandaloneConstruct>( Parser<OmpMetadirectiveDirective>{}) || - construct<OpenMPStandaloneConstruct>(Parser<OpenMPDepobjConstruct>{}) || - construct<OpenMPStandaloneConstruct>( - Parser<OpenMPInteropConstruct>{})) / + construct<OpenMPStandaloneConstruct>(Parser<OpenMPDepobjConstruct>{})) / endOfLine) // Directives enclosing structured-block diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp index 37a17d3b88085..c5de5d1d08dd5 100644 --- a/flang/lib/Parser/unparse.cpp +++ b/flang/lib/Parser/unparse.cpp @@ -2179,30 +2179,6 @@ class UnparseVisitor { Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": "); Walk(std::get<OmpObjectList>(x.t)); } - void Unparse(const OmpInteropPreference &x) { Walk(x.v, ","); } - void Unparse(const OmpInitClause &x) { - using Modifier = OmpInitClause::Modifier; - auto &modifiers{std::get<std::optional<std::list<Modifier>>>(x.t)}; - bool isTypeStart{true}; - for (const Modifier &m : *modifiers) { - if (auto *interopPreferenceMod{ - std::get_if<parser::OmpInteropPreference>(&m.u)}) { - Put("PREFER_TYPE("); - Walk(*interopPreferenceMod); - Put("),"); - } else if (auto *interopTypeMod{ - std::get_if<parser::OmpInteropType>(&m.u)}) { - if (isTypeStart) { - isTypeStart = false; - } else { - Put(","); - } - Walk(*interopTypeMod); - } - } - Put(": "); - Walk(std::get<OmpObject>(x.t)); - } void Unparse(const OmpMapClause &x) { using Modifier = OmpMapClause::Modifier; Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": "); @@ -2764,15 +2740,6 @@ class UnparseVisitor { Put("\n"); EndOpenMP(); } - - void Unparse(const OpenMPInteropConstruct &x) { - BeginOpenMP(); - Word("!$OMP INTEROP"); - Walk(std::get<OmpClauseList>(x.t)); - Put("\n"); - EndOpenMP(); - } - void Unparse(const OpenMPDeclarativeAssumes &x) { BeginOpenMP(); Word("!$OMP ASSUMES "); @@ -3070,7 +3037,6 @@ class UnparseVisitor { OmpDeviceTypeClause, DeviceTypeDescription) // OMP device_type WALK_NESTED_ENUM(OmpReductionModifier, Value) // OMP reduction-modifier WALK_NESTED_ENUM(OmpExpectation, Value) // OMP motion-expectation - WALK_NESTED_ENUM(OmpInteropType, Value) // OMP InteropType WALK_NESTED_ENUM(OmpOrderClause, Ordering) // OMP ordering WALK_NESTED_ENUM(OmpOrderModifier, Value) // OMP order-modifier WALK_NESTED_ENUM(OmpPrescriptiveness, Value) // OMP prescriptiveness diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index 6c9a1cc4da3f6..17ac6cfb8220f 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -5665,88 +5665,6 @@ void OmpStructureChecker::Leave(const parser::DoConstruct &x) { Base::Leave(x); } -void OmpStructureChecker::Enter(const parser::OpenMPInteropConstruct &x) { - bool isDependClauseOccured{false}; - int targetCount{0}, targetSyncCount{0}; - const auto &dir{std::get<parser::Verbatim>(x.t)}; - std::set<const Symbol *> objectSymbolList; - PushContextAndClauseSets(dir.source, llvm::omp::Directive::OMPD_interop); - const auto &clauseList{std::get<parser::OmpClauseList>(x.t)}; - for (const auto &clause : clauseList.v) { - common::visit( - common::visitors{ - [&](const parser::OmpClause::Init &initClause) { - if (OmpVerifyModifiers(initClause.v, llvm::omp::OMPC_init, - GetContext().directiveSource, context_)) { - - auto &modifiers{OmpGetModifiers(initClause.v)}; - auto &&interopTypeModifier{ - OmpGetRepeatableModifier<parser::OmpInteropType>( - modifiers)}; - for (const auto &it : interopTypeModifier) { - if (it->v == parser::OmpInteropType::Value::TargetSync) { - ++targetSyncCount; - } else { - ++targetCount; - } - } - } - const auto &interopVar{parser::Unwrap<parser::OmpObject>( - std::get<parser::OmpObject>(initClause.v.t))}; - const auto *name{parser::Unwrap<parser::Name>(interopVar)}; - const auto *objectSymbol{name->symbol}; - if (llvm::is_contained(objectSymbolList, objectSymbol)) { - context_.Say(GetContext().directiveSource, - "Each interop-var may be specified for at most one action-clause of each INTEROP construct."_err_en_US); - } else { - objectSymbolList.insert(objectSymbol); - } - }, - [&](const parser::OmpClause::Depend &dependClause) { - isDependClauseOccured = true; - }, - [&](const parser::OmpClause::Destroy &destroyClause) { - const auto &interopVar{ - parser::Unwrap<parser::OmpObject>(destroyClause.v)}; - const auto *name{parser::Unwrap<parser::Name>(interopVar)}; - const auto *objectSymbol{name->symbol}; - if (llvm::is_contained(objectSymbolList, objectSymbol)) { - context_.Say(GetContext().directiveSource, - "Each interop-var may be specified for at most one action-clause of each INTEROP construct."_err_en_US); - } else { - objectSymbolList.insert(objectSymbol); - } - }, - [&](const parser::OmpClause::Use &useClause) { - const auto &interopVar{ - parser::Unwrap<parser::OmpObject>(useClause.v)}; - const auto *name{parser::Unwrap<parser::Name>(interopVar)}; - const auto *objectSymbol{name->symbol}; - if (llvm::is_contained(objectSymbolList, objectSymbol)) { - context_.Say(GetContext().directiveSource, - "Each interop-var may be specified for at most one action-clause of each INTEROP construct."_err_en_US); - } else { - objectSymbolList.insert(objectSymbol); - } - }, - [&](const auto &) {}, - }, - clause.u); - } - if (targetCount > 1 || targetSyncCount > 1) { - context_.Say(GetContext().directiveSource, - "Each interop-type may be specified at most once."_err_en_US); - } - if (isDependClauseOccured && !targetSyncCount) { - context_.Say(GetContext().directiveSource, - "A DEPEND clause can only appear on the directive if the interop-type includes TARGETSYNC"_err_en_US); - } -} - -void OmpStructureChecker::Leave(const parser::OpenMPInteropConstruct &) { - dirContext_.pop_back(); -} - void OmpStructureChecker::CheckAllowedRequiresClause(llvmOmpClause clause) { CheckAllowedClause(clause); diff --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h index e3fb0bdb2c790..4d4adeeaec636 100644 --- a/flang/lib/Semantics/check-omp-structure.h +++ b/flang/lib/Semantics/check-omp-structure.h @@ -73,8 +73,6 @@ class OmpStructureChecker void Enter(const parser::OpenMPConstruct &); void Leave(const parser::OpenMPConstruct &); - void Enter(const parser::OpenMPInteropConstruct &); - void Leave(const parser::OpenMPInteropConstruct &); void Enter(const parser::OpenMPDeclarativeConstruct &); void Leave(const parser::OpenMPDeclarativeConstruct &); diff --git a/flang/lib/Semantics/openmp-modifiers.cpp b/flang/lib/Semantics/openmp-modifiers.cpp index c84e832ee52a1..73ad7751ee517 100644 --- a/flang/lib/Semantics/openmp-modifiers.cpp +++ b/flang/lib/Semantics/openmp-modifiers.cpp @@ -240,38 +240,6 @@ const OmpModifierDescriptor &OmpGetDescriptor<parser::OmpExpectation>() { return desc; } -template <> -const OmpModifierDescriptor &OmpGetDescriptor<parser::OmpInteropPreference>() { - static const OmpModifierDescriptor desc{ - /*name=*/"interop-preference", - /*props=*/ - { - {52, {OmpProperty::Unique}}, - }, - /*clauses=*/ - { - {52, {Clause::OMPC_init}}, - }, - }; - return desc; -} - -template <> -const OmpModifierDescriptor &OmpGetDescriptor<parser::OmpInteropType>() { - static const OmpModifierDescriptor desc{ - /*name=*/"interop-type", - /*props=*/ - { - {52, {OmpProperty::Required}}, - }, - /*clauses=*/ - { - {52, {Clause::OMPC_init}}, - }, - }; - return desc; -} - template <> const OmpModifierDescriptor &OmpGetDescriptor<parser::OmpIterator>() { static const OmpModifierDescriptor desc{ diff --git a/flang/test/Lower/OpenMP/Todo/inteorp-construct.f90 b/flang/test/Lower/OpenMP/Todo/inteorp-construct.f90 deleted file mode 100644 index f7920c09464ed..0000000000000 --- a/flang/test/Lower/OpenMP/Todo/inteorp-construct.f90 +++ /dev/null @@ -1,9 +0,0 @@ -! REQUIRES: openmp_runtime -! RUN: %not_todo_cmd %flang_fc1 -emit-fir -fopenmp -fopenmp-version=52 -o - %s 2>&1 | FileCheck %s - -! CHECK: not yet implemented: OpenMPInteropConstruct -program interop_test - use omp_lib - integer(omp_interop_kind) :: obj - !$omp interop init(targetsync,target: obj) -end program interop_test diff --git a/flang/test/Parser/OpenMP/interop-construct.f90 b/flang/test/Parser/OpenMP/interop-construct.f90 deleted file mode 100644 index a1781d559b46d..0000000000000 --- a/flang/test/Parser/OpenMP/interop-construct.f90 +++ /dev/null @@ -1,204 +0,0 @@ -! REQUIRES: openmp_runtime -! RUN: %flang_fc1 -fdebug-unparse -fopenmp-version=52 -fopenmp %s | FileCheck --ignore-case --check-prefix="UNPARSE" %s -! RUN: %flang_fc1 -fdebug-dump-parse-tree-no-sema -fopenmp-version=52 -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s - -SUBROUTINE test_interop_01() - !$OMP INTEROP DEVICE(1) - PRINT *,'pass' -END SUBROUTINE test_interop_01 - -!UNPARSE: SUBROUTINE test_interop_01 -!UNPARSE: !$OMP INTEROP DEVICE(1_4) -!UNPARSE: PRINT *, "pass" -!UNPARSE: END SUBROUTINE test_interop_01 - -!PARSE-TREE: | SubroutineStmt -!PARSE-TREE: | | Name = 'test_interop_01' -!PARSE-TREE: | SpecificationPart -!PARSE-TREE: | | ImplicitPart -> -!PARSE-TREE: | ExecutionPart -> Block -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPStandaloneConstruct -> OpenMPInteropConstruct -!PARSE-TREE: | | | Verbatim -!PARSE-TREE: | | | OmpClauseList -> OmpClause -> Device -> OmpDeviceClause -!PARSE-TREE: | | | | Scalar -> Integer -> Expr -> LiteralConstant -> IntLiteralConstant = '1' -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> PrintStmt -!PARSE-TREE: | | | Format -> Star -!PARSE-TREE: | | | OutputItem -> Expr -> LiteralConstant -> CharLiteralConstant -!PARSE-TREE: | | | | string = 'pass' -!PARSE-TREE: | EndSubroutineStmt -> Name = 'test_interop_01' - -SUBROUTINE test_interop_02() - USE omp_lib - INTEGER(OMP_INTEROP_KIND) :: obj1, obj2, obj3 - !$OMP INTEROP INIT(TARGETSYNC: obj) USE(obj1) DESTROY(obj3) - PRINT *,'pass' -END SUBROUTINE test_interop_02 - -!UNPARSE: SUBROUTINE test_interop_02 -!UNPARSE: USE :: omp_lib -!UNPARSE: INTEGER(KIND=8_4) obj1, obj2, obj3 -!UNPARSE: !$OMP INTEROP INIT(TARGETSYNC: obj) USE(obj1) DESTROY(obj3) -!UNPARSE: PRINT *, "pass" -!UNPARSE: END SUBROUTINE test_interop_02 - -!PARSE-TREE: | SubroutineStmt -!PARSE-TREE: | | Name = 'test_interop_02' -!PARSE-TREE: | SpecificationPart -!PARSE-TREE: | | UseStmt -!PARSE-TREE: | | | Name = 'omp_lib' -!PARSE-TREE: | | ImplicitPart -> -!PARSE-TREE: | | DeclarationConstruct -> SpecificationConstruct -> TypeDeclarationStmt -!PARSE-TREE: | | | DeclarationTypeSpec -> IntrinsicTypeSpec -> IntegerTypeSpec -> KindSelector -> Scalar -> Integer -> Constant -> Expr -> Designator -> DataRef -> Name = 'omp_interop_kind' -!PARSE-TREE: | | | EntityDecl -!PARSE-TREE: | | | | Name = 'obj1' -!PARSE-TREE: | | | EntityDecl -!PARSE-TREE: | | | | Name = 'obj2' -!PARSE-TREE: | | | EntityDecl -!PARSE-TREE: | | | | Name = 'obj3' -!PARSE-TREE: | ExecutionPart -> Block -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPStandaloneConstruct -> OpenMPInteropConstruct -!PARSE-TREE: | | | Verbatim -!PARSE-TREE: | | | OmpClauseList -> OmpClause -> Init -> OmpInitClause -!PARSE-TREE: | | | | Modifier -> OmpInteropType -> Value = TargetSync -!PARSE-TREE: | | | | OmpObject -> Designator -> DataRef -> Name = 'obj' -!PARSE-TREE: | | | OmpClause -> Use -> OmpUseClause -> OmpObject -> Designator -> DataRef -> Name = 'obj1' -!PARSE-TREE: | | | OmpClause -> Destroy -> OmpDestroyClause -> OmpObject -> Designator -> DataRef -> Name = 'obj3' -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> PrintStmt -!PARSE-TREE: | | | Format -> Star -!PARSE-TREE: | | | OutputItem -> Expr -> LiteralConstant -> CharLiteralConstant -!PARSE-TREE: | | | | string = 'pass' -!PARSE-TREE: | EndSubroutineStmt -> Name = 'test_interop_02' - -SUBROUTINE test_interop_03() - USE omp_lib - INTEGER(OMP_INTEROP_KIND) :: obj - !$OMP INTEROP INIT(TARGETSYNC: obj) DEPEND(INOUT: obj) - PRINT *,'pass' -END SUBROUTINE test_interop_03 - -!UNPARSE: SUBROUTINE test_interop_03 -!UNPARSE: USE :: omp_lib -!UNPARSE: INTEGER(KIND=8_4) obj -!UNPARSE: !$OMP INTEROP INIT(TARGETSYNC: obj) DEPEND(INOUT: obj) -!UNPARSE: PRINT *, "pass" -!UNPARSE: END SUBROUTINE test_interop_03 - -!PARSE-TREE: | SubroutineStmt -!PARSE-TREE: | | Name = 'test_interop_03' -!PARSE-TREE: | SpecificationPart -!PARSE-TREE: | | UseStmt -!PARSE-TREE: | | | Name = 'omp_lib' -!PARSE-TREE: | | ImplicitPart -> -!PARSE-TREE: | | DeclarationConstruct -> SpecificationConstruct -> TypeDeclarationStmt -!PARSE-TREE: | | | DeclarationTypeSpec -> IntrinsicTypeSpec -> IntegerTypeSpec -> KindSelector -> Scalar -> Integer -> Constant -> Expr -> Designator -> DataRef -> Name = 'omp_interop_kind' -!PARSE-TREE: | | | EntityDecl -!PARSE-TREE: | | | | Name = 'obj' -!PARSE-TREE: | ExecutionPart -> Block -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPStandaloneConstruct -> OpenMPInteropConstruct -!PARSE-TREE: | | | Verbatim -!PARSE-TREE: | | | OmpClauseList -> OmpClause -> Init -> OmpInitClause -!PARSE-TREE: | | | | Modifier -> OmpInteropType -> Value = TargetSync -!PARSE-TREE: | | | | OmpObject -> Designator -> DataRef -> Name = 'obj' -!PARSE-TREE: | | | OmpClause -> Depend -> OmpDependClause -> TaskDep -!PARSE-TREE: | | | | Modifier -> OmpTaskDependenceType -> Value = Inout -!PARSE-TREE: | | | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'obj' -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> PrintStmt -!PARSE-TREE: | | | Format -> Star -!PARSE-TREE: | | | OutputItem -> Expr -> LiteralConstant -> CharLiteralConstant -!PARSE-TREE: | | | | string = 'pass' -!PARSE-TREE: | EndSubroutineStmt -> Name = 'test_interop_03' - -SUBROUTINE test_interop_04() - USE omp_lib - INTEGER(OMP_INTEROP_KIND) :: obj - INTEGER, DIMENSION(1,10) :: arr - !$OMP INTEROP INIT(PREFER_TYPE("cuda"),TARGETSYNC,TARGET: obj) DEPEND(INOUT: arr) NOWAIT - PRINT *,'pass' -END SUBROUTINE test_interop_04 - -!UNPARSE: SUBROUTINE test_interop_04 -!UNPARSE: USE :: omp_lib -!UNPARSE: INTEGER(KIND=8_4) obj -!UNPARSE: INTEGER, DIMENSION(1_4,10_4) :: arr -!UNPARSE: !$OMP INTEROP INIT(PREFER_TYPE("cuda"),TARGETSYNC,TARGET: obj) DEPEND(INOUT: a& -!UNPARSE: !$OMP&rr) NOWAIT -!UNPARSE: PRINT *, "pass" -!UNPARSE: END SUBROUTINE test_interop_04 - -!PARSE-TREE: | SubroutineStmt -!PARSE-TREE: | | Name = 'test_interop_04' -!PARSE-TREE: | SpecificationPart -!PARSE-TREE: | | UseStmt -!PARSE-TREE: | | | Name = 'omp_lib' -!PARSE-TREE: | | ImplicitPart -> -!PARSE-TREE: | | DeclarationConstruct -> SpecificationConstruct -> TypeDeclarationStmt -!PARSE-TREE: | | | DeclarationTypeSpec -> IntrinsicTypeSpec -> IntegerTypeSpec -> KindSelector -> Scalar -> Integer -> Constant -> Expr -> Designator -> DataRef -> Name = 'omp_interop_kind' -!PARSE-TREE: | | | EntityDecl -!PARSE-TREE: | | | | Name = 'obj' -!PARSE-TREE: | | DeclarationConstruct -> SpecificationConstruct -> TypeDeclarationStmt -!PARSE-TREE: | | | DeclarationTypeSpec -> IntrinsicTypeSpec -> IntegerTypeSpec -> -!PARSE-TREE: | | | AttrSpec -> ArraySpec -> ExplicitShapeSpec -!PARSE-TREE: | | | | SpecificationExpr -> Scalar -> Integer -> Expr -> LiteralConstant -> IntLiteralConstant = '1' -!PARSE-TREE: | | | ExplicitShapeSpec -!PARSE-TREE: | | | | SpecificationExpr -> Scalar -> Integer -> Expr -> LiteralConstant -> IntLiteralConstant = '10' -!PARSE-TREE: | | | EntityDecl -!PARSE-TREE: | | | | Name = 'arr' -!PARSE-TREE: | ExecutionPart -> Block -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPStandaloneConstruct -> OpenMPInteropConstruct -!PARSE-TREE: | | | Verbatim -!PARSE-TREE: | | | OmpClauseList -> OmpClause -> Init -> OmpInitClause -!PARSE-TREE: | | | | Modifier -> OmpInteropPreference -> OmpInteropRuntimeIdentifier -> CharLiteralConstant -!PARSE-TREE: | | | | | string = 'cuda' -!PARSE-TREE: | | | | Modifier -> OmpInteropType -> Value = TargetSync -!PARSE-TREE: | | | | Modifier -> OmpInteropType -> Value = Target -!PARSE-TREE: | | | | OmpObject -> Designator -> DataRef -> Name = 'obj' -!PARSE-TREE: | | | OmpClause -> Depend -> OmpDependClause -> TaskDep -!PARSE-TREE: | | | | Modifier -> OmpTaskDependenceType -> Value = Inout -!PARSE-TREE: | | | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'arr' -!PARSE-TREE: | | | OmpClause -> Nowait -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> PrintStmt -!PARSE-TREE: | | | Format -> Star -!PARSE-TREE: | | | OutputItem -> Expr -> LiteralConstant -> CharLiteralConstant -!PARSE-TREE: | | | | string = 'pass' -!PARSE-TREE: | EndSubroutineStmt -> Name = 'test_interop_04' - -SUBROUTINE test_interop_05() - USE omp_lib - INTEGER(OMP_INTEROP_KIND) :: obj - !$OMP INTEROP INIT(PREFER_TYPE(omp_ifr_sycl), TARGETSYNC: obj) DEVICE(DEVICE_NUM:0) - PRINT *,'pass' -END SUBROUTINE test_interop_05 - -!UNPARSE: SUBROUTINE test_interop_05 -!UNPARSE: USE :: omp_lib -!UNPARSE: INTEGER(KIND=8_4) obj -!UNPARSE: !$OMP INTEROP INIT(PREFER_TYPE(4_4),TARGETSYNC: obj) DEVICE(DEVICE_NUM: 0_4) -!UNPARSE: PRINT *, "pass" -!UNPARSE: END SUBROUTINE test_interop_05 - -!PARSE-TREE: | SubroutineStmt -!PARSE-TREE: | | Name = 'test_interop_05' -!PARSE-TREE: | SpecificationPart -!PARSE-TREE: | | UseStmt -!PARSE-TREE: | | | Name = 'omp_lib' -!PARSE-TREE: | | ImplicitPart -> -!PARSE-TREE: | | DeclarationConstruct -> SpecificationConstruct -> TypeDeclarationStmt -!PARSE-TREE: | | | DeclarationTypeSpec -> IntrinsicTypeSpec -> IntegerTypeSpec -> KindSelector -> Scalar -> Integer -> Constant -> Expr -> Designator -> DataRef -> Name = 'omp_interop_kind' -!PARSE-TREE: | | | EntityDecl -!PARSE-TREE: | | | | Name = 'obj' -!PARSE-TREE: | ExecutionPart -> Block -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPStandaloneConstruct -> OpenMPInteropConstruct -!PARSE-TREE: | | | Verbatim -!PARSE-TREE: | | | OmpClauseList -> OmpClause -> Init -> OmpInitClause -!PARSE-TREE: | | | | Modifier -> OmpInteropPreference -> OmpInteropRuntimeIdentifier -> Scalar -> Integer -> Constant -> Expr -> Designator -> DataRef -> Name = 'omp_ifr_sycl' -!PARSE-TREE: | | | | Modifier -> OmpInteropType -> Value = TargetSync -!PARSE-TREE: | | | | OmpObject -> Designator -> DataRef -> Name = 'obj' -!PARSE-TREE: | | | OmpClause -> Device -> OmpDeviceClause -!PARSE-TREE: | | | | Modifier -> OmpDeviceModifier -> Value = Device_Num -!PARSE-TREE: | | | | Scalar -> Integer -> Expr -> LiteralConstant -> IntLiteralConstant = '0' -!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> PrintStmt -!PARSE-TREE: | | | Format -> Star -!PARSE-TREE: | | | OutputItem -> Expr -> LiteralConstant -> CharLiteralConstant -!PARSE-TREE: | | | | string = 'pass' -!PARSE-TREE: | EndSubroutineStmt -> Name = 'test_interop_05' - diff --git a/flang/test/Semantics/OpenMP/interop-construct.f90 b/flang/test/Semantics/OpenMP/interop-construct.f90 deleted file mode 100644 index 5df7fe8b655e7..0000000000000 --- a/flang/test/Semantics/OpenMP/interop-construct.f90 +++ /dev/null @@ -1,30 +0,0 @@ -! REQUIRES: openmp_runtime - -! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=52 -! OpenMP Version 5.2 -! 14.1 Interop construct -! To check various semantic errors for inteorp construct. - -SUBROUTINE test_interop_01() - USE omp_lib - INTEGER(OMP_INTEROP_KIND) :: obj - !ERROR: Each interop-var may be specified for at most one action-clause of each INTEROP construct. - !$OMP INTEROP INIT(TARGETSYNC,TARGET: obj) USE(obj) - PRINT *, 'pass' -END SUBROUTINE test_interop_01 - -SUBROUTINE test_interop_02() - USE omp_lib - INTEGER(OMP_INTEROP_KIND) :: obj - !ERROR: Each interop-type may be specified at most once. - !$OMP INTEROP INIT(TARGETSYNC,TARGET,TARGETSYNC: obj) - PRINT *, 'pass' -END SUBROUTINE test_interop_02 - -SUBROUTINE test_interop_03() - USE omp_lib - INTEGER(OMP_INTEROP_KIND) :: obj - !ERROR: A DEPEND clause can only appear on the directive if the interop-type includes TARGETSYNC - !$OMP INTEROP INIT(TARGET: obj) DEPEND(INOUT: obj) - PRINT *, 'pass' -END SUBROUTINE test_interop_03 diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td index e2a1449d8cc76..75347061d9a92 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMP.td +++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td @@ -244,7 +244,6 @@ def OMPC_Indirect : Clause<"indirect"> { } def OMPC_Init : Clause<"init"> { let clangClass = "OMPInitClause"; - let flangClass = "OmpInitClause"; } def OMPC_Initializer : Clause<"initializer"> { let flangClass = "OmpInitializerClause"; @@ -527,7 +526,6 @@ def OMPC_Update : Clause<"update"> { } def OMPC_Use : Clause<"use"> { let clangClass = "OMPUseClause"; - let flangClass = "OmpUseClause"; } def OMPC_UsesAllocators : Clause<"uses_allocators"> { let clangClass = "OMPUsesAllocatorsClause"; _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits