Skip to content

Commit 7d0359e

Browse files
kparzyszrorth
authored andcommitted
[utils][TableGen] Clarify usage of ClauseVal, rename to EnumVal (llvm#141761)
The class "ClauseVal" actually represents a definition of an enumeration value, and in itself it is not bound to any clause. Rename it to EnumVal and add a comment clarifying how it's translated into an actual enum definition in the generated source code. There is no change in functionality.
1 parent 698b3a6 commit 7d0359e

File tree

8 files changed

+83
-68
lines changed

8 files changed

+83
-68
lines changed

llvm/include/llvm/Frontend/Directive/DirectiveBase.td

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,23 @@ class DirectiveLanguage {
5151
string flangClauseBaseClass = "";
5252
}
5353

54-
// Information about values accepted by enum-like clauses
55-
class ClauseVal<string n, int v, bit uv> {
56-
// Name of the clause value.
54+
// Some clauses take an argument from a predefined list of allowed keyword
55+
// values. For example, assume a clause "someclause" with an argument from
56+
// the list "foo", "bar", "baz". In the user source code this would look
57+
// like "someclause(foo)", whereas in the compiler the values would be
58+
// represented as
59+
// enum someclause.enumClauseValue {
60+
// Xyz_foo = v_foo,
61+
// Xyz_bar = v_bar,
62+
// Xyz_baz = v_baz,
63+
// }
64+
// The "Xyz_..." are the _record_ names of EnumVal's:
65+
// def Xyz_foo = EnumVal<"foo", v_foo>;
66+
// def Xyz_bar = EnumVal<"bar", v_bar>;
67+
// def Xyz_baz = EnumVal<"baz", v_baz>;
68+
//
69+
class EnumVal<string n, int v, bit uv> {
70+
// Spelling of the value.
5771
string name = n;
5872

5973
// Integer value of the clause.
@@ -90,7 +104,7 @@ class Clause<string c> {
90104
string enumClauseValue = "";
91105

92106
// List of allowed clause values
93-
list<ClauseVal> allowedClauseValues = [];
107+
list<EnumVal> allowedClauseValues = [];
94108

95109
// If set to true, value class is part of a list. Single class by default.
96110
bit isValueList = false;

llvm/include/llvm/Frontend/OpenACC/ACC.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ def ACCC_Create : Clause<"create"> {
8686
}
8787

8888
// 2.5.16
89-
def ACC_Default_none : ClauseVal<"none", 1, 1> { let isDefault = 1; }
90-
def ACC_Default_present : ClauseVal<"present", 0, 1> {}
89+
def ACC_Default_none : EnumVal<"none", 1, 1> { let isDefault = 1; }
90+
def ACC_Default_present : EnumVal<"present", 0, 1> {}
9191

9292
def ACCC_Default : Clause<"default"> {
9393
let flangClass = "AccDefaultClause";

llvm/include/llvm/Frontend/OpenMP/OMP.td

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> {
7777
let flangClass = "OmpAtomicDefaultMemOrderClause";
7878
}
7979

80-
def OMP_BIND_parallel : ClauseVal<"parallel",1,1> {}
81-
def OMP_BIND_teams : ClauseVal<"teams",2,1> {}
82-
def OMP_BIND_thread : ClauseVal<"thread",3,1> { let isDefault = true; }
80+
def OMP_BIND_parallel : EnumVal<"parallel",1,1> {}
81+
def OMP_BIND_teams : EnumVal<"teams",2,1> {}
82+
def OMP_BIND_thread : EnumVal<"thread",3,1> { let isDefault = true; }
8383
def OMPC_Bind : Clause<"bind"> {
8484
let clangClass = "OMPBindClause";
8585
let flangClass = "OmpBindClause";
@@ -91,11 +91,11 @@ def OMPC_Bind : Clause<"bind"> {
9191
];
9292
}
9393

94-
def OMP_CANCELLATION_CONSTRUCT_Parallel : ClauseVal<"parallel", 1, 1> {}
95-
def OMP_CANCELLATION_CONSTRUCT_Loop : ClauseVal<"loop", 2, 1> {}
96-
def OMP_CANCELLATION_CONSTRUCT_Sections : ClauseVal<"sections", 3, 1> {}
97-
def OMP_CANCELLATION_CONSTRUCT_Taskgroup : ClauseVal<"taskgroup", 4, 1> {}
98-
def OMP_CANCELLATION_CONSTRUCT_None : ClauseVal<"none", 5, 0> {
94+
def OMP_CANCELLATION_CONSTRUCT_Parallel : EnumVal<"parallel", 1, 1> {}
95+
def OMP_CANCELLATION_CONSTRUCT_Loop : EnumVal<"loop", 2, 1> {}
96+
def OMP_CANCELLATION_CONSTRUCT_Sections : EnumVal<"sections", 3, 1> {}
97+
def OMP_CANCELLATION_CONSTRUCT_Taskgroup : EnumVal<"taskgroup", 4, 1> {}
98+
def OMP_CANCELLATION_CONSTRUCT_None : EnumVal<"none", 5, 0> {
9999
let isDefault = 1;
100100
}
101101
def OMPC_CancellationConstructType : Clause<"cancellation_construct_type"> {
@@ -210,8 +210,8 @@ def OMPC_From : Clause<"from"> {
210210
def OMPC_Full: Clause<"full"> {
211211
let clangClass = "OMPFullClause";
212212
}
213-
def OMP_GRAINSIZE_Strict : ClauseVal<"strict", 1, 1> {}
214-
def OMP_GRAINSIZE_Unknown : ClauseVal<"unknown", 2, 0> { let isDefault = 1; }
213+
def OMP_GRAINSIZE_Strict : EnumVal<"strict", 1, 1> {}
214+
def OMP_GRAINSIZE_Unknown : EnumVal<"unknown", 2, 0> { let isDefault = 1; }
215215
def OMPC_GrainSize : Clause<"grainsize"> {
216216
let clangClass = "OMPGrainsizeClause";
217217
let flangClass = "OmpGrainsizeClause";
@@ -278,12 +278,12 @@ def OMPC_Map : Clause<"map"> {
278278
def OMPC_Match : Clause<"match"> {
279279
let flangClass = "OmpMatchClause";
280280
}
281-
def OMP_MEMORY_ORDER_SeqCst : ClauseVal<"seq_cst", 1, 1> {}
282-
def OMP_MEMORY_ORDER_AcqRel : ClauseVal<"acq_rel", 2, 1> {}
283-
def OMP_MEMORY_ORDER_Acquire : ClauseVal<"acquire", 3, 1> {}
284-
def OMP_MEMORY_ORDER_Release : ClauseVal<"release", 4, 1> {}
285-
def OMP_MEMORY_ORDER_Relaxed : ClauseVal<"relaxed", 5, 1> {}
286-
def OMP_MEMORY_ORDER_Default : ClauseVal<"default", 6, 0> {
281+
def OMP_MEMORY_ORDER_SeqCst : EnumVal<"seq_cst", 1, 1> {}
282+
def OMP_MEMORY_ORDER_AcqRel : EnumVal<"acq_rel", 2, 1> {}
283+
def OMP_MEMORY_ORDER_Acquire : EnumVal<"acquire", 3, 1> {}
284+
def OMP_MEMORY_ORDER_Release : EnumVal<"release", 4, 1> {}
285+
def OMP_MEMORY_ORDER_Relaxed : EnumVal<"relaxed", 5, 1> {}
286+
def OMP_MEMORY_ORDER_Default : EnumVal<"default", 6, 0> {
287287
let isDefault = 1;
288288
}
289289
def OMPC_MemoryOrder : Clause<"memory_order"> {
@@ -337,8 +337,8 @@ def OMPC_Novariants : Clause<"novariants"> {
337337
def OMPC_NoWait : Clause<"nowait"> {
338338
let clangClass = "OMPNowaitClause";
339339
}
340-
def OMP_NUMTASKS_Strict : ClauseVal<"strict", 1, 1> {}
341-
def OMP_NUMTASKS_Unknown : ClauseVal<"unknown", 2, 0> { let isDefault = 1; }
340+
def OMP_NUMTASKS_Strict : EnumVal<"strict", 1, 1> {}
341+
def OMP_NUMTASKS_Unknown : EnumVal<"unknown", 2, 0> { let isDefault = 1; }
342342
def OMPC_NumTasks : Clause<"num_tasks"> {
343343
let clangClass = "OMPNumTasksClause";
344344
let flangClass = "OmpNumTasksClause";
@@ -366,8 +366,8 @@ def OMPC_OMPX_DynCGroupMem : Clause<"ompx_dyn_cgroup_mem"> {
366366
let clangClass = "OMPXDynCGroupMemClause";
367367
let flangClass = "ScalarIntExpr";
368368
}
369-
def OMP_ORDER_concurrent : ClauseVal<"concurrent",1,1> {}
370-
def OMP_ORDER_unknown : ClauseVal<"unknown",2,0> { let isDefault = 1; }
369+
def OMP_ORDER_concurrent : EnumVal<"concurrent",1,1> {}
370+
def OMP_ORDER_unknown : EnumVal<"unknown",2,0> { let isDefault = 1; }
371371
def OMPC_Order : Clause<"order"> {
372372
let clangClass = "OMPOrderClause";
373373
let flangClass = "OmpOrderClause";
@@ -404,12 +404,12 @@ def OMPC_Private : Clause<"private"> {
404404
let clangClass = "OMPPrivateClause";
405405
let flangClass = "OmpObjectList";
406406
}
407-
def OMP_PROC_BIND_master : ClauseVal<"master",2,1> {}
408-
def OMP_PROC_BIND_close : ClauseVal<"close",3,1> {}
409-
def OMP_PROC_BIND_spread : ClauseVal<"spread",4,1> {}
410-
def OMP_PROC_BIND_primary : ClauseVal<"primary",5,1> {}
411-
def OMP_PROC_BIND_default : ClauseVal<"default",6,0> {}
412-
def OMP_PROC_BIND_unknown : ClauseVal<"unknown",7,0> { let isDefault = true; }
407+
def OMP_PROC_BIND_master : EnumVal<"master",2,1> {}
408+
def OMP_PROC_BIND_close : EnumVal<"close",3,1> {}
409+
def OMP_PROC_BIND_spread : EnumVal<"spread",4,1> {}
410+
def OMP_PROC_BIND_primary : EnumVal<"primary",5,1> {}
411+
def OMP_PROC_BIND_default : EnumVal<"default",6,0> {}
412+
def OMP_PROC_BIND_unknown : EnumVal<"unknown",7,0> { let isDefault = true; }
413413
def OMPC_ProcBind : Clause<"proc_bind"> {
414414
let clangClass = "OMPProcBindClause";
415415
let flangClass = "OmpProcBindClause";
@@ -443,12 +443,12 @@ def OMPC_SafeLen : Clause<"safelen"> {
443443
let clangClass = "OMPSafelenClause";
444444
let flangClass = "ScalarIntConstantExpr";
445445
}
446-
def OMP_SCHEDULE_Static : ClauseVal<"static", 2, 1> {}
447-
def OMP_SCHEDULE_Dynamic : ClauseVal<"dynamic", 3, 1> {}
448-
def OMP_SCHEDULE_Guided : ClauseVal<"guided", 4, 1> {}
449-
def OMP_SCHEDULE_Auto : ClauseVal<"auto", 5, 1> {}
450-
def OMP_SCHEDULE_Runtime : ClauseVal<"runtime", 6, 1> {}
451-
def OMP_SCHEDULE_Default : ClauseVal<"default", 7, 0> { let isDefault = 1; }
446+
def OMP_SCHEDULE_Static : EnumVal<"static", 2, 1> {}
447+
def OMP_SCHEDULE_Dynamic : EnumVal<"dynamic", 3, 1> {}
448+
def OMP_SCHEDULE_Guided : EnumVal<"guided", 4, 1> {}
449+
def OMP_SCHEDULE_Auto : EnumVal<"auto", 5, 1> {}
450+
def OMP_SCHEDULE_Runtime : EnumVal<"runtime", 6, 1> {}
451+
def OMP_SCHEDULE_Default : EnumVal<"default", 7, 0> { let isDefault = 1; }
452452
def OMPC_Schedule : Clause<"schedule"> {
453453
let clangClass = "OMPScheduleClause";
454454
let flangClass = "OmpScheduleClause";

llvm/include/llvm/TableGen/DirectiveEmitter.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,9 +308,9 @@ class VersionedClause {
308308
const Record *Def;
309309
};
310310

311-
class ClauseVal : public BaseRecord {
311+
class EnumVal : public BaseRecord {
312312
public:
313-
ClauseVal(const Record *Def) : BaseRecord(Def) {}
313+
EnumVal(const Record *Def) : BaseRecord(Def) {}
314314

315315
int getValue() const { return Def->getValueAsInt("value"); }
316316

llvm/test/TableGen/directive1.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ def TestDirectiveLanguage : DirectiveLanguage {
1414
let flangClauseBaseClass = "TdlClause";
1515
}
1616

17-
def TDLCV_vala : ClauseVal<"vala",1,1> {}
18-
def TDLCV_valb : ClauseVal<"valb",2,1> {}
19-
def TDLCV_valc : ClauseVal<"valc",3,0> { let isDefault = 1; }
17+
def TDLCV_vala : EnumVal<"vala",1,1> {}
18+
def TDLCV_valb : EnumVal<"valb",2,1> {}
19+
def TDLCV_valc : EnumVal<"valc",3,0> { let isDefault = 1; }
2020

2121
def TDLC_ClauseA : Clause<"clausea"> {
2222
let enumClauseValue = "AKind";

llvm/utils/TableGen/Basic/DirectiveEmitter.cpp

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ static void generateEnumBitmask(ArrayRef<const Record *> Records,
147147

148148
// Generate enums for values that clauses can take.
149149
// Also generate function declarations for get<Enum>Name(StringRef Str).
150-
static void generateEnumClauseVal(ArrayRef<const Record *> Records,
150+
static void generateClauseEnumVal(ArrayRef<const Record *> Records,
151151
raw_ostream &OS,
152152
const DirectiveLanguage &DirLang,
153153
std::string &EnumHelperFuncs) {
@@ -166,8 +166,8 @@ static void generateEnumClauseVal(ArrayRef<const Record *> Records,
166166

167167
OS << "\n";
168168
OS << "enum class " << Enum << " {\n";
169-
for (const ClauseVal CVal : ClauseVals)
170-
OS << " " << CVal.getRecordName() << "=" << CVal.getValue() << ",\n";
169+
for (const EnumVal Val : ClauseVals)
170+
OS << " " << Val.getRecordName() << "=" << Val.getValue() << ",\n";
171171
OS << "};\n";
172172

173173
if (DirLang.hasMakeEnumAvailableInNamespace()) {
@@ -306,9 +306,9 @@ static void emitDirectivesDecl(const RecordKeeper &Records, raw_ostream &OS) {
306306
DirLang.getClausePrefix(),
307307
DirLang.hasMakeEnumAvailableInNamespace());
308308

309-
// Emit ClauseVal enumeration
309+
// Emit ClauseVals enumeration
310310
std::string EnumHelperFuncs;
311-
generateEnumClauseVal(DirLang.getClauses(), OS, DirLang, EnumHelperFuncs);
311+
generateClauseEnumVal(DirLang.getClauses(), OS, DirLang, EnumHelperFuncs);
312312

313313
// Generic function signatures
314314
OS << "\n";
@@ -412,9 +412,11 @@ static void generateGetKind(ArrayRef<const Record *> Records, raw_ostream &OS,
412412
OS << "}\n";
413413
}
414414

415-
// Generate function implementation for get<ClauseVal>Kind(StringRef Str)
416-
static void generateGetKindClauseVal(const DirectiveLanguage &DirLang,
417-
raw_ostream &OS) {
415+
// Generate function implementations for
416+
// <enumClauseValue> get<enumClauseValue>(StringRef Str) and
417+
// StringRef get<enumClauseValue>Name(<enumClauseValue>)
418+
static void generateGetClauseVal(const DirectiveLanguage &DirLang,
419+
raw_ostream &OS) {
418420
StringRef Lang = DirLang.getName();
419421
std::string Qual = getQualifier(DirLang);
420422

@@ -445,10 +447,9 @@ static void generateGetKindClauseVal(const DirectiveLanguage &DirLang,
445447
OS << Qual << Enum << " " << Qual << "get" << Enum
446448
<< "(llvm::StringRef Str) {\n";
447449
OS << " return StringSwitch<" << Enum << ">(Str)\n";
448-
for (const auto &CV : ClauseVals) {
449-
ClauseVal CVal(CV);
450-
OS << " .Case(\"" << CVal.getFormattedName() << "\"," << CV->getName()
451-
<< ")\n";
450+
for (const EnumVal Val : ClauseVals) {
451+
OS << " .Case(\"" << Val.getFormattedName() << "\","
452+
<< Val.getRecordName() << ")\n";
452453
}
453454
OS << " .Default(" << DefaultName << ");\n";
454455
OS << "}\n";
@@ -457,10 +458,9 @@ static void generateGetKindClauseVal(const DirectiveLanguage &DirLang,
457458
OS << "llvm::StringRef " << Qual << "get" << Lang << Enum << "Name(" << Qual
458459
<< Enum << " x) {\n";
459460
OS << " switch (x) {\n";
460-
for (const auto &CV : ClauseVals) {
461-
ClauseVal CVal(CV);
462-
OS << " case " << CV->getName() << ":\n";
463-
OS << " return \"" << CVal.getFormattedName() << "\";\n";
461+
for (const EnumVal Val : ClauseVals) {
462+
OS << " case " << Val.getRecordName() << ":\n";
463+
OS << " return \"" << Val.getFormattedName() << "\";\n";
464464
}
465465
OS << " }\n"; // switch
466466
OS << " llvm_unreachable(\"Invalid " << Lang << " " << Enum
@@ -1318,8 +1318,9 @@ void emitDirectivesBasicImpl(const DirectiveLanguage &DirLang,
13181318
// getClauseName(Clause Kind)
13191319
generateGetName(DirLang.getClauses(), OS, "Clause", DirLang, CPrefix);
13201320

1321-
// get<ClauseVal>Kind(StringRef Str)
1322-
generateGetKindClauseVal(DirLang, OS);
1321+
// <enumClauseValue> get<enumClauseValue>(StringRef Str) ; string -> value
1322+
// StringRef get<enumClauseValue>Name(<enumClauseValue>) ; value -> string
1323+
generateGetClauseVal(DirLang, OS);
13231324

13241325
// isAllowedClauseForDirective(Directive D, Clause C, unsigned Version)
13251326
generateIsAllowedClause(DirLang, OS);

mlir/test/mlir-tblgen/directive-common.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ def TestDirectiveLanguage : DirectiveLanguage {
77
let cppNamespace = "tdl";
88
}
99

10-
def TDLCV_vala : ClauseVal<"vala",1,1> {}
11-
def TDLCV_valb : ClauseVal<"valb",2,1> {}
12-
def TDLCV_valc : ClauseVal<"valc",3,0> { let isDefault = 1; }
10+
def TDLCV_vala : EnumVal<"vala",1,1> {}
11+
def TDLCV_valb : EnumVal<"valb",2,1> {}
12+
def TDLCV_valc : EnumVal<"valc",3,0> { let isDefault = 1; }
1313

1414
def TDLC_ClauseA : Clause<"clausea"> {
1515
let flangClass = "TdlClauseA";

mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#include "llvm/TableGen/Record.h"
2222

2323
using llvm::Clause;
24-
using llvm::ClauseVal;
24+
using llvm::EnumVal;
2525
using llvm::raw_ostream;
2626
using llvm::RecordKeeper;
2727

@@ -63,11 +63,11 @@ static bool emitDecls(const RecordKeeper &records, llvm::StringRef dialect,
6363

6464
std::vector<std::string> cvDefs;
6565
for (const auto &it : llvm::enumerate(clauseVals)) {
66-
const ClauseVal cval{it.value()};
67-
if (!cval.isUserVisible())
66+
const EnumVal val{it.value()};
67+
if (!val.isUserVisible())
6868
continue;
6969

70-
std::string name = cval.getFormattedName();
70+
std::string name = val.getFormattedName();
7171
std::string enumValName(name.length(), ' ');
7272
llvm::transform(name, enumValName.begin(), llvm::toLower);
7373
enumValName[0] = llvm::toUpper(enumValName[0]);

0 commit comments

Comments
 (0)