Author: sameeran joshi Date: 2020-12-22T13:40:38+05:30 New Revision: 34958d11c3457c8e05bbe2b31d5e013c04aecb55
URL: https://github.com/llvm/llvm-project/commit/34958d11c3457c8e05bbe2b31d5e013c04aecb55 DIFF: https://github.com/llvm/llvm-project/commit/34958d11c3457c8e05bbe2b31d5e013c04aecb55.diff LOG: [Flang][openmp][3/5] Make ProcBind clause part of OmpClause After discussion in `D93482` we found that the some of the clauses were not following the common OmpClause convention. The benefits of using OmpClause: - Functionalities from structure checker are mostly aligned to work with `llvm::omp::Clause`. - The unparsing as well can take advantage. - Homogeneity with OpenACC and rest of the clauses in OpenMP. - Could even generate the parser with TableGen, when there is homogeneity. - It becomes confusing when to use `flangClass` and `flangClassValue` inside TableGen, if incase we generate parser using TableGen we could have only a single `let expression`. This patch makes `OmpProcBindClause` clause part of `OmpClause`. The unparse function is dropped as the unparsing is done by `WALK_NESTED_ENUM` for `OmpProcBindClause`. Reviewed By: clementval, kiranktp Differential Revision: https://reviews.llvm.org/D93642 Added: Modified: flang/lib/Lower/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 llvm/include/llvm/Frontend/OpenMP/OMP.td Removed: ################################################################################ diff --git a/flang/lib/Lower/OpenMP.cpp b/flang/lib/Lower/OpenMP.cpp index f73dd09fbe68..f765723bb9ae 100644 --- a/flang/lib/Lower/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP.cpp @@ -214,8 +214,9 @@ genOMP(Fortran::lower::AbstractConverter &converter, } } if (const auto &procBindClause = - std::get_if<Fortran::parser::OmpProcBindClause>(&clause.u)) { - switch (procBindClause->v) { + std::get_if<Fortran::parser::OmpClause::ProcBind>(&clause.u)) { + const auto &ompProcBindClause{procBindClause->v}; + switch (ompProcBindClause.v) { case Fortran::parser::OmpProcBindClause::Type::Master: parallelOp.proc_bind_valAttr( firOpBuilder.getStringAttr(omp::stringifyClauseProcBindKind( diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp index e982dd19e498..50999bef8f52 100644 --- a/flang/lib/Parser/openmp-parsers.cpp +++ b/flang/lib/Parser/openmp-parsers.cpp @@ -216,8 +216,8 @@ TYPE_PARSER( parenthesized(scalarIntExpr))) || "PRIVATE" >> construct<OmpClause>(construct<OmpClause::Private>( parenthesized(Parser<OmpObjectList>{}))) || - "PROC_BIND" >> - construct<OmpClause>(parenthesized(Parser<OmpProcBindClause>{})) || + "PROC_BIND" >> construct<OmpClause>(construct<OmpClause::ProcBind>( + parenthesized(Parser<OmpProcBindClause>{}))) || "REDUCTION" >> construct<OmpClause>(parenthesized(Parser<OmpReductionClause>{})) || "RELAXED" >> construct<OmpClause>(construct<OmpClause::Relaxed>()) || diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp index a4b0c64011fc..6be063c1b1bc 100644 --- a/flang/lib/Parser/unparse.cpp +++ b/flang/lib/Parser/unparse.cpp @@ -2058,11 +2058,6 @@ class UnparseVisitor { }, x.u); } - bool Pre(const OmpProcBindClause &) { - Word("PROC_BIND("); - return true; - } - void Post(const OmpProcBindClause &) { Put(")"); } void Unparse(const OmpDefaultmapClause &x) { Word("DEFAULTMAP("); Walk(std::get<OmpDefaultmapClause::ImplicitBehavior>(x.t)); diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index 6ed7106bb9f4..481099b34966 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -428,6 +428,7 @@ CHECK_SIMPLE_CLAUSE(SeqCst, OMPC_seq_cst) CHECK_SIMPLE_CLAUSE(Release, OMPC_release) CHECK_SIMPLE_CLAUSE(Relaxed, OMPC_relaxed) CHECK_SIMPLE_CLAUSE(Hint, OMPC_hint) +CHECK_SIMPLE_CLAUSE(ProcBind, OMPC_proc_bind) CHECK_REQ_SCALAR_INT_CLAUSE(Allocator, OMPC_allocator) CHECK_REQ_SCALAR_INT_CLAUSE(Grainsize, OMPC_grainsize) @@ -493,7 +494,6 @@ void OmpStructureChecker::CheckIsVarPartOfAnotherVar( // Following clauses have a seperate node in parse-tree.h. CHECK_SIMPLE_PARSER_CLAUSE(OmpDistScheduleClause, OMPC_dist_schedule) CHECK_SIMPLE_PARSER_CLAUSE(OmpNowait, OMPC_nowait) -CHECK_SIMPLE_PARSER_CLAUSE(OmpProcBindClause, OMPC_proc_bind) CHECK_SIMPLE_PARSER_CLAUSE(OmpReductionClause, OMPC_reduction) // Atomic-clause CHECK_SIMPLE_PARSER_CLAUSE(OmpAtomicRead, OMPC_read) diff --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h index dcc2deeb348c..89fc3d9faa21 100644 --- a/flang/lib/Semantics/check-omp-structure.h +++ b/flang/lib/Semantics/check-omp-structure.h @@ -150,6 +150,7 @@ class OmpStructureChecker void Enter(const parser::OmpClause::Ordered &); void Enter(const parser::OmpClause::Priority &); void Enter(const parser::OmpClause::Private &); + void Enter(const parser::OmpClause::ProcBind &); void Enter(const parser::OmpClause::Safelen &); void Enter(const parser::OmpClause::Shared &); void Enter(const parser::OmpClause::Simdlen &); @@ -182,7 +183,6 @@ class OmpStructureChecker void Enter(const parser::OmpIfClause &); void Enter(const parser::OmpLinearClause &); void Enter(const parser::OmpMapClause &); - void Enter(const parser::OmpProcBindClause &); void Enter(const parser::OmpReductionClause &); void Enter(const parser::OmpScheduleClause &); diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td index f06990068b40..28b978975ba0 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMP.td +++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td @@ -107,7 +107,7 @@ def OMP_PROC_BIND_default : ClauseVal<"default",5,0> {} def OMP_PROC_BIND_unknown : ClauseVal<"unknown",6,0> { let isDefault = true; } def OMPC_ProcBind : Clause<"proc_bind"> { let clangClass = "OMPProcBindClause"; - let flangClass = "OmpProcBindClause"; + let flangClassValue = "OmpProcBindClause"; let enumClauseValue = "ProcBindKind"; let allowedClauseValues = [ OMP_PROC_BIND_master, _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits