forked from OSchip/llvm-project
[Flang][openmp][1/5] Make Allocate 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 `allocate` clause part of `OmpClause`.The unparse function for `OmpAllocateClause` is adapted since the keyword and parenthesis are issued by the corresponding unparse function for `parser::OmpClause::Allocate`. Reviewed By: clementval Differential Revision: https://reviews.llvm.org/D93640
This commit is contained in:
parent
9a8ef927df
commit
442aac5da6
|
@ -157,8 +157,8 @@ TYPE_PARSER(
|
|||
"ACQ_REL" >> construct<OmpClause>(construct<OmpClause::AcqRel>()) ||
|
||||
"ALIGNED" >>
|
||||
construct<OmpClause>(parenthesized(Parser<OmpAlignedClause>{})) ||
|
||||
"ALLOCATE" >>
|
||||
construct<OmpClause>(parenthesized(Parser<OmpAllocateClause>{})) ||
|
||||
"ALLOCATE" >> construct<OmpClause>(construct<OmpClause::Allocate>(
|
||||
parenthesized(Parser<OmpAllocateClause>{}))) ||
|
||||
"ALLOCATOR" >> construct<OmpClause>(construct<OmpClause::Allocator>(
|
||||
parenthesized(scalarIntExpr))) ||
|
||||
"COLLAPSE" >> construct<OmpClause>(construct<OmpClause::Collapse>(
|
||||
|
|
|
@ -2020,10 +2020,9 @@ public:
|
|||
Put(")");
|
||||
}
|
||||
void Unparse(const OmpAllocateClause &x) {
|
||||
Word("ALLOCATE(");
|
||||
Walk(std::get<std::optional<OmpAllocateClause::Allocator>>(x.t), ":");
|
||||
Walk(std::get<std::optional<OmpAllocateClause::Allocator>>(x.t));
|
||||
Put(":");
|
||||
Walk(std::get<OmpObjectList>(x.t));
|
||||
Put(")");
|
||||
}
|
||||
void Unparse(const OmpDependSinkVecLength &x) {
|
||||
Walk(std::get<DefinedOperator>(x.t));
|
||||
|
|
|
@ -403,6 +403,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause &x) {
|
|||
|
||||
// Following clauses do not have a seperate node in parse-tree.h.
|
||||
// They fall under 'struct OmpClause' in parse-tree.h.
|
||||
CHECK_SIMPLE_CLAUSE(Allocate, OMPC_allocate)
|
||||
CHECK_SIMPLE_CLAUSE(Copyin, OMPC_copyin)
|
||||
CHECK_SIMPLE_CLAUSE(Copyprivate, OMPC_copyprivate)
|
||||
CHECK_SIMPLE_CLAUSE(Device, OMPC_device)
|
||||
|
@ -489,7 +490,6 @@ void OmpStructureChecker::CheckIsVarPartOfAnotherVar(
|
|||
}
|
||||
}
|
||||
// Following clauses have a seperate node in parse-tree.h.
|
||||
CHECK_SIMPLE_PARSER_CLAUSE(OmpAllocateClause, OMPC_allocate)
|
||||
CHECK_SIMPLE_PARSER_CLAUSE(OmpDefaultClause, OMPC_default)
|
||||
CHECK_SIMPLE_PARSER_CLAUSE(OmpDistScheduleClause, OMPC_dist_schedule)
|
||||
CHECK_SIMPLE_PARSER_CLAUSE(OmpNowait, OMPC_nowait)
|
||||
|
|
|
@ -127,6 +127,7 @@ public:
|
|||
void Leave(const parser::OmpClauseList &);
|
||||
void Enter(const parser::OmpClause &);
|
||||
void Enter(const parser::OmpNowait &);
|
||||
void Enter(const parser::OmpClause::Allocate &);
|
||||
void Enter(const parser::OmpClause::Allocator &);
|
||||
void Enter(const parser::OmpClause::Inbranch &);
|
||||
void Enter(const parser::OmpClause::Mergeable &);
|
||||
|
@ -174,7 +175,6 @@ public:
|
|||
void Enter(const parser::OmpAtomicCapture &);
|
||||
void Leave(const parser::OmpAtomic &);
|
||||
void Enter(const parser::OmpAlignedClause &);
|
||||
void Enter(const parser::OmpAllocateClause &);
|
||||
void Enter(const parser::OmpDefaultClause &);
|
||||
void Enter(const parser::OmpDefaultmapClause &);
|
||||
void Enter(const parser::OmpDependClause &);
|
||||
|
|
|
@ -254,7 +254,7 @@ def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> {
|
|||
}
|
||||
def OMPC_Allocate : Clause<"allocate"> {
|
||||
let clangClass = "OMPAllocateClause";
|
||||
let flangClass = "OmpAllocateClause";
|
||||
let flangClassValue = "OmpAllocateClause";
|
||||
}
|
||||
def OMPC_NonTemporal : Clause<"nontemporal"> {
|
||||
let clangClass = "OMPNontemporalClause";
|
||||
|
|
Loading…
Reference in New Issue