Skip to content

Commit 0a90ffa

Browse files
committed
[flang][openacc] OpenACC 3.0 parser
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
1 parent 1254f6d commit 0a90ffa

28 files changed

+1884
-18
lines changed

flang/include/flang/Common/Fortran-features.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ ENUM_CLASS(LanguageFeature, BackslashEscapes, OldDebugLines,
2424
OldStyleParameter, ComplexConstructor, PercentLOC, SignedPrimary, FileName,
2525
Convert, Dispose, IOListLeadingComma, AbbreviatedEditDescriptor,
2626
ProgramParentheses, PercentRefAndVal, OmitFunctionDummies, CrayPointer,
27-
Hollerith, ArithmeticIF, Assign, AssignedGOTO, Pause, OpenMP,
27+
Hollerith, ArithmeticIF, Assign, AssignedGOTO, Pause, OpenACC, OpenMP,
2828
CruftAfterAmpersand, ClassicCComments, AdditionalFormats, BigIntLiterals,
2929
RealDoControls, EquivalenceNumericWithCharacter, AdditionalIntrinsics,
3030
AnonymousParents, OldLabelDoEndStatements, LogicalIntegerAssignment,
@@ -37,6 +37,7 @@ class LanguageFeatureControl {
3737
LanguageFeatureControl() {
3838
// These features must be explicitly enabled by command line options.
3939
disable_.set(LanguageFeature::OldDebugLines);
40+
disable_.set(LanguageFeature::OpenACC);
4041
disable_.set(LanguageFeature::OpenMP);
4142
// These features, if enabled, conflict with valid standard usage,
4243
// so there are disabled here by default.
@@ -50,7 +51,9 @@ class LanguageFeatureControl {
5051
void WarnOnAllNonstandard(bool yes = true) { warnAll_ = yes; }
5152
bool IsEnabled(LanguageFeature f) const { return !disable_.test(f); }
5253
bool ShouldWarn(LanguageFeature f) const {
53-
return (warnAll_ && f != LanguageFeature::OpenMP) || warn_.test(f);
54+
return (warnAll_ && f != LanguageFeature::OpenMP &&
55+
f != LanguageFeature::OpenACC) ||
56+
warn_.test(f);
5457
}
5558
// Return all spellings of operators names, depending on features enabled
5659
std::vector<const char *> GetNames(LogicalOperator) const;

flang/include/flang/Parser/dump-parse-tree.h

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,88 @@ class ParseTreeDumper {
5353
NODE(format, IntrinsicTypeDataEditDesc)
5454
NODE(format::IntrinsicTypeDataEditDesc, Kind)
5555
NODE(parser, Abstract)
56+
NODE(parser, AccAtomicCapture)
57+
NODE(AccAtomicCapture, Stmt1)
58+
NODE(AccAtomicCapture, Stmt2)
59+
NODE(parser, AccAtomicRead)
60+
NODE(parser, AccAtomicUpdate)
61+
NODE(parser, AccAtomicWrite)
62+
NODE(parser, AccBeginBlockDirective)
63+
NODE(parser, AccBeginCombinedDirective)
64+
NODE(parser, AccBeginLoopDirective)
65+
NODE(parser, AccBlockDirective)
66+
NODE(parser, AccClause)
67+
NODE(AccClause, Auto)
68+
NODE(AccClause, Async)
69+
NODE(AccClause, Attach)
70+
NODE(AccClause, Bind)
71+
NODE(AccClause, Capture)
72+
NODE(AccClause, Collapse)
73+
NODE(AccClause, Copy)
74+
NODE(AccClause, Copyin)
75+
NODE(AccClause, Copyout)
76+
NODE(AccClause, Create)
77+
NODE(AccClause, Default)
78+
NODE(AccClause, DefaultAsync)
79+
NODE(AccClause, Delete)
80+
NODE(AccClause, Detach)
81+
NODE(AccClause, Device)
82+
NODE(AccClause, DeviceNum)
83+
NODE(AccClause, DevicePtr)
84+
NODE(AccClause, DeviceResident)
85+
NODE(AccClause, DeviceType)
86+
NODE(AccClause, Finalize)
87+
NODE(AccClause, FirstPrivate)
88+
NODE(AccClause, Gang)
89+
NODE(AccClause, Host)
90+
NODE(AccClause, If)
91+
NODE(AccClause, IfPresent)
92+
NODE(AccClause, Independent)
93+
NODE(AccClause, Link)
94+
NODE(AccClause, NoCreate)
95+
NODE(AccClause, NoHost)
96+
NODE(AccClause, NumGangs)
97+
NODE(AccClause, NumWorkers)
98+
NODE(AccClause, Present)
99+
NODE(AccClause, Private)
100+
NODE(AccClause, Tile)
101+
NODE(AccClause, UseDevice)
102+
NODE(AccClause, Read)
103+
NODE(AccClause, Reduction)
104+
NODE(AccClause, Self)
105+
NODE(AccClause, Seq)
106+
NODE(AccClause, Vector)
107+
NODE(AccClause, VectorLength)
108+
NODE(AccClause, Wait)
109+
NODE(AccClause, Worker)
110+
NODE(AccClause, Write)
111+
NODE(AccClause, Unknown)
112+
NODE(parser, AccDefaultClause)
113+
NODE_ENUM(parser::AccDefaultClause, Arg)
114+
NODE(parser, AccClauseList)
115+
NODE(parser, AccCombinedDirective)
116+
NODE(parser, AccDataModifier)
117+
NODE_ENUM(parser::AccDataModifier, Modifier)
118+
NODE(parser, AccDeclarativeDirective)
119+
NODE(parser, AccEndAtomic)
120+
NODE(parser, AccEndBlockDirective)
121+
NODE(parser, AccEndCombinedDirective)
122+
NODE(parser, AccGangArgument)
123+
NODE(parser, AccObject)
124+
NODE(parser, AccObjectList)
125+
NODE(parser, AccObjectListWithModifier)
126+
NODE(parser, AccObjectListWithReduction)
127+
NODE(parser, AccReductionOperator)
128+
NODE(parser, AccSizeExpr)
129+
NODE(parser, AccSizeExprList)
130+
NODE(parser, AccStandaloneDirective)
131+
NODE(parser, AccLoopDirective)
132+
NODE(parser, AccWaitArgument)
133+
static std::string GetNodeName(const llvm::acc::Directive &x) {
134+
return llvm::Twine(
135+
"llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
136+
.str();
137+
}
56138
NODE(parser, AcImpliedDo)
57139
NODE(parser, AcImpliedDoControl)
58140
NODE(parser, AcValue)
@@ -510,6 +592,17 @@ class ParseTreeDumper {
510592
NODE(parser, OmpSectionsDirective)
511593
NODE(parser, OmpSimpleStandaloneDirective)
512594
NODE(parser, Only)
595+
NODE(parser, OpenACCAtomicConstruct)
596+
NODE(parser, OpenACCBlockConstruct)
597+
NODE(parser, OpenACCCacheConstruct)
598+
NODE(parser, OpenACCCombinedConstruct)
599+
NODE(parser, OpenACCConstruct)
600+
NODE(parser, OpenACCDeclarativeConstruct)
601+
NODE(parser, OpenACCLoopConstruct)
602+
NODE(parser, OpenACCRoutineConstruct)
603+
NODE(parser, OpenACCStandaloneDeclarativeConstruct)
604+
NODE(parser, OpenACCStandaloneConstruct)
605+
NODE(parser, OpenACCWaitConstruct)
513606
NODE(parser, OpenMPAtomicConstruct)
514607
NODE(parser, OpenMPBlockConstruct)
515608
NODE(parser, OpenMPCancelConstruct)

0 commit comments

Comments
 (0)