Skip to content

Commit

Permalink
[flang][openacc] OpenACC 3.0 parser
Browse files Browse the repository at this point in the history
Summary:
This patch introduce the parser for OpenACC 3.0 in Flang. It uses the same TableGen mechanism
than OpenMP.

Reviewers: nvdatian, sscalpone, tskeith, klausler, ichoyjx, jdoerfert, DavidTruby

Reviewed By: klausler

Subscribers: MaskRay, SouraVX, mgorny, hiraditya, jfb, sstefan1, llvm-commits

Tags: #llvm, #flang

Differential Revision: https://reviews.llvm.org/D83649
  • Loading branch information
clementval committed Jul 14, 2020
1 parent 1254f6d commit 0a90ffa
Show file tree
Hide file tree
Showing 28 changed files with 1,884 additions and 18 deletions.
7 changes: 5 additions & 2 deletions flang/include/flang/Common/Fortran-features.h
Expand Up @@ -24,7 +24,7 @@ ENUM_CLASS(LanguageFeature, BackslashEscapes, OldDebugLines,
OldStyleParameter, ComplexConstructor, PercentLOC, SignedPrimary, FileName,
Convert, Dispose, IOListLeadingComma, AbbreviatedEditDescriptor,
ProgramParentheses, PercentRefAndVal, OmitFunctionDummies, CrayPointer,
Hollerith, ArithmeticIF, Assign, AssignedGOTO, Pause, OpenMP,
Hollerith, ArithmeticIF, Assign, AssignedGOTO, Pause, OpenACC, OpenMP,
CruftAfterAmpersand, ClassicCComments, AdditionalFormats, BigIntLiterals,
RealDoControls, EquivalenceNumericWithCharacter, AdditionalIntrinsics,
AnonymousParents, OldLabelDoEndStatements, LogicalIntegerAssignment,
Expand All @@ -37,6 +37,7 @@ class LanguageFeatureControl {
LanguageFeatureControl() {
// These features must be explicitly enabled by command line options.
disable_.set(LanguageFeature::OldDebugLines);
disable_.set(LanguageFeature::OpenACC);
disable_.set(LanguageFeature::OpenMP);
// These features, if enabled, conflict with valid standard usage,
// so there are disabled here by default.
Expand All @@ -50,7 +51,9 @@ class LanguageFeatureControl {
void WarnOnAllNonstandard(bool yes = true) { warnAll_ = yes; }
bool IsEnabled(LanguageFeature f) const { return !disable_.test(f); }
bool ShouldWarn(LanguageFeature f) const {
return (warnAll_ && f != LanguageFeature::OpenMP) || warn_.test(f);
return (warnAll_ && f != LanguageFeature::OpenMP &&
f != LanguageFeature::OpenACC) ||
warn_.test(f);
}
// Return all spellings of operators names, depending on features enabled
std::vector<const char *> GetNames(LogicalOperator) const;
Expand Down
93 changes: 93 additions & 0 deletions flang/include/flang/Parser/dump-parse-tree.h
Expand Up @@ -53,6 +53,88 @@ class ParseTreeDumper {
NODE(format, IntrinsicTypeDataEditDesc)
NODE(format::IntrinsicTypeDataEditDesc, Kind)
NODE(parser, Abstract)
NODE(parser, AccAtomicCapture)
NODE(AccAtomicCapture, Stmt1)
NODE(AccAtomicCapture, Stmt2)
NODE(parser, AccAtomicRead)
NODE(parser, AccAtomicUpdate)
NODE(parser, AccAtomicWrite)
NODE(parser, AccBeginBlockDirective)
NODE(parser, AccBeginCombinedDirective)
NODE(parser, AccBeginLoopDirective)
NODE(parser, AccBlockDirective)
NODE(parser, AccClause)
NODE(AccClause, Auto)
NODE(AccClause, Async)
NODE(AccClause, Attach)
NODE(AccClause, Bind)
NODE(AccClause, Capture)
NODE(AccClause, Collapse)
NODE(AccClause, Copy)
NODE(AccClause, Copyin)
NODE(AccClause, Copyout)
NODE(AccClause, Create)
NODE(AccClause, Default)
NODE(AccClause, DefaultAsync)
NODE(AccClause, Delete)
NODE(AccClause, Detach)
NODE(AccClause, Device)
NODE(AccClause, DeviceNum)
NODE(AccClause, DevicePtr)
NODE(AccClause, DeviceResident)
NODE(AccClause, DeviceType)
NODE(AccClause, Finalize)
NODE(AccClause, FirstPrivate)
NODE(AccClause, Gang)
NODE(AccClause, Host)
NODE(AccClause, If)
NODE(AccClause, IfPresent)
NODE(AccClause, Independent)
NODE(AccClause, Link)
NODE(AccClause, NoCreate)
NODE(AccClause, NoHost)
NODE(AccClause, NumGangs)
NODE(AccClause, NumWorkers)
NODE(AccClause, Present)
NODE(AccClause, Private)
NODE(AccClause, Tile)
NODE(AccClause, UseDevice)
NODE(AccClause, Read)
NODE(AccClause, Reduction)
NODE(AccClause, Self)
NODE(AccClause, Seq)
NODE(AccClause, Vector)
NODE(AccClause, VectorLength)
NODE(AccClause, Wait)
NODE(AccClause, Worker)
NODE(AccClause, Write)
NODE(AccClause, Unknown)
NODE(parser, AccDefaultClause)
NODE_ENUM(parser::AccDefaultClause, Arg)
NODE(parser, AccClauseList)
NODE(parser, AccCombinedDirective)
NODE(parser, AccDataModifier)
NODE_ENUM(parser::AccDataModifier, Modifier)
NODE(parser, AccDeclarativeDirective)
NODE(parser, AccEndAtomic)
NODE(parser, AccEndBlockDirective)
NODE(parser, AccEndCombinedDirective)
NODE(parser, AccGangArgument)
NODE(parser, AccObject)
NODE(parser, AccObjectList)
NODE(parser, AccObjectListWithModifier)
NODE(parser, AccObjectListWithReduction)
NODE(parser, AccReductionOperator)
NODE(parser, AccSizeExpr)
NODE(parser, AccSizeExprList)
NODE(parser, AccStandaloneDirective)
NODE(parser, AccLoopDirective)
NODE(parser, AccWaitArgument)
static std::string GetNodeName(const llvm::acc::Directive &x) {
return llvm::Twine(
"llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
.str();
}
NODE(parser, AcImpliedDo)
NODE(parser, AcImpliedDoControl)
NODE(parser, AcValue)
Expand Down Expand Up @@ -510,6 +592,17 @@ class ParseTreeDumper {
NODE(parser, OmpSectionsDirective)
NODE(parser, OmpSimpleStandaloneDirective)
NODE(parser, Only)
NODE(parser, OpenACCAtomicConstruct)
NODE(parser, OpenACCBlockConstruct)
NODE(parser, OpenACCCacheConstruct)
NODE(parser, OpenACCCombinedConstruct)
NODE(parser, OpenACCConstruct)
NODE(parser, OpenACCDeclarativeConstruct)
NODE(parser, OpenACCLoopConstruct)
NODE(parser, OpenACCRoutineConstruct)
NODE(parser, OpenACCStandaloneDeclarativeConstruct)
NODE(parser, OpenACCStandaloneConstruct)
NODE(parser, OpenACCWaitConstruct)
NODE(parser, OpenMPAtomicConstruct)
NODE(parser, OpenMPBlockConstruct)
NODE(parser, OpenMPCancelConstruct)
Expand Down

0 comments on commit 0a90ffa

Please sign in to comment.