Skip to content

Commit 283c2c8

Browse files
authored
[TableGen] Add explicit symbol visibility macros to code generated (#107873)
Update llvm's TableGen to emit new explicit symbol visibility macros I added in #96630 to the function declarations it creates The generated functions need to be exported from llvm's shared library for Clang and some OpenMP tests. @compnerd
1 parent dd8b266 commit 283c2c8

File tree

3 files changed

+30
-26
lines changed

3 files changed

+30
-26
lines changed

llvm/test/TableGen/directive1.td

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def TDL_DirA : Directive<"dira"> {
5353
// CHECK-EMPTY:
5454
// CHECK-NEXT: #include "llvm/ADT/ArrayRef.h"
5555
// CHECK-NEXT: #include "llvm/ADT/BitmaskEnum.h"
56+
// CHECK-NEXT: #include "llvm/Support/Compiler.h"
5657
// CHECK-NEXT: #include <cstddef>
5758
// CHECK-EMPTY:
5859
// CHECK-NEXT: namespace llvm {
@@ -114,22 +115,22 @@ def TDL_DirA : Directive<"dira"> {
114115
// CHECK-NEXT: constexpr auto TDLCV_valc = llvm::tdl::AKind::TDLCV_valc;
115116
// CHECK-EMPTY:
116117
// CHECK-NEXT: // Enumeration helper functions
117-
// CHECK-NEXT: Directive getTdlDirectiveKind(llvm::StringRef Str);
118+
// CHECK-NEXT: LLVM_ABI Directive getTdlDirectiveKind(llvm::StringRef Str);
118119
// CHECK-EMPTY:
119-
// CHECK-NEXT: llvm::StringRef getTdlDirectiveName(Directive D);
120+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlDirectiveName(Directive D);
120121
// CHECK-EMPTY:
121-
// CHECK-NEXT: Clause getTdlClauseKind(llvm::StringRef Str);
122+
// CHECK-NEXT: LLVM_ABI Clause getTdlClauseKind(llvm::StringRef Str);
122123
// CHECK-EMPTY:
123-
// CHECK-NEXT: llvm::StringRef getTdlClauseName(Clause C);
124+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlClauseName(Clause C);
124125
// CHECK-EMPTY:
125126
// CHECK-NEXT: /// Return true if \p C is a valid clause for \p D in version \p Version.
126-
// CHECK-NEXT: bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version);
127+
// CHECK-NEXT: LLVM_ABI bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version);
127128
// CHECK-EMPTY:
128129
// CHECK-NEXT: constexpr std::size_t getMaxLeafCount() { return 0; }
129-
// CHECK-NEXT: Association getDirectiveAssociation(Directive D);
130-
// CHECK-NEXT: Category getDirectiveCategory(Directive D);
131-
// CHECK-NEXT: AKind getAKind(StringRef);
132-
// CHECK-NEXT: llvm::StringRef getTdlAKindName(AKind);
130+
// CHECK-NEXT: LLVM_ABI Association getDirectiveAssociation(Directive D);
131+
// CHECK-NEXT: LLVM_ABI Category getDirectiveCategory(Directive D);
132+
// CHECK-NEXT: LLVM_ABI AKind getAKind(StringRef);
133+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlAKindName(AKind);
133134
// CHECK-EMPTY:
134135
// CHECK-NEXT: } // namespace tdl
135136
// CHECK-NEXT: } // namespace llvm

llvm/test/TableGen/directive2.td

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def TDL_DirA : Directive<"dira"> {
4646
// CHECK-NEXT: #define LLVM_Tdl_INC
4747
// CHECK-EMPTY:
4848
// CHECK-NEXT: #include "llvm/ADT/ArrayRef.h"
49+
// CHECK-NEXT: #include "llvm/Support/Compiler.h"
4950
// CHECK-NEXT: #include <cstddef>
5051
// CHECK-EMPTY:
5152
// CHECK-NEXT: namespace llvm {
@@ -90,20 +91,20 @@ def TDL_DirA : Directive<"dira"> {
9091
// CHECK-NEXT: static constexpr std::size_t Clause_enumSize = 4;
9192
// CHECK-EMPTY:
9293
// CHECK-NEXT: // Enumeration helper functions
93-
// CHECK-NEXT: Directive getTdlDirectiveKind(llvm::StringRef Str);
94+
// CHECK-NEXT: LLVM_ABI Directive getTdlDirectiveKind(llvm::StringRef Str);
9495
// CHECK-EMPTY:
95-
// CHECK-NEXT: llvm::StringRef getTdlDirectiveName(Directive D);
96+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlDirectiveName(Directive D);
9697
// CHECK-EMPTY:
97-
// CHECK-NEXT: Clause getTdlClauseKind(llvm::StringRef Str);
98+
// CHECK-NEXT: LLVM_ABI Clause getTdlClauseKind(llvm::StringRef Str);
9899
// CHECK-EMPTY:
99-
// CHECK-NEXT: llvm::StringRef getTdlClauseName(Clause C);
100+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlClauseName(Clause C);
100101
// CHECK-EMPTY:
101102
// CHECK-NEXT: /// Return true if \p C is a valid clause for \p D in version \p Version.
102-
// CHECK-NEXT: bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version);
103+
// CHECK-NEXT: LLVM_ABI bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version);
103104
// CHECK-EMPTY:
104105
// CHECK-NEXT: constexpr std::size_t getMaxLeafCount() { return 0; }
105-
// CHECK-NEXT: Association getDirectiveAssociation(Directive D);
106-
// CHECK-NEXT: Category getDirectiveCategory(Directive D);
106+
// CHECK-NEXT: LLVM_ABI Association getDirectiveAssociation(Directive D);
107+
// CHECK-NEXT: LLVM_ABI Category getDirectiveCategory(Directive D);
107108
// CHECK-NEXT: } // namespace tdl
108109
// CHECK-NEXT: } // namespace llvm
109110
// CHECK-NEXT: #endif // LLVM_Tdl_INC

llvm/utils/TableGen/DirectiveEmitter.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,12 @@ static void GenerateEnumClauseVal(ArrayRef<const Record *> Records,
111111
<< "llvm::" << DirLang.getCppNamespace() << "::" << EnumName
112112
<< "::" << CV->getName() << ";\n";
113113
}
114-
EnumHelperFuncs += (Twine(EnumName) + Twine(" get") + Twine(EnumName) +
115-
Twine("(StringRef);\n"))
114+
EnumHelperFuncs += (Twine("LLVM_ABI ") + Twine(EnumName) + Twine(" get") +
115+
Twine(EnumName) + Twine("(StringRef);\n"))
116116
.str();
117117

118118
EnumHelperFuncs +=
119-
(Twine("llvm::StringRef get") + Twine(DirLang.getName()) +
119+
(Twine("LLVM_ABI llvm::StringRef get") + Twine(DirLang.getName()) +
120120
Twine(EnumName) + Twine("Name(") + Twine(EnumName) + Twine(");\n"))
121121
.str();
122122
}
@@ -200,6 +200,7 @@ static void EmitDirectivesDecl(const RecordKeeper &Records, raw_ostream &OS) {
200200
if (DirLang.hasEnableBitmaskEnumInNamespace())
201201
OS << "#include \"llvm/ADT/BitmaskEnum.h\"\n";
202202

203+
OS << "#include \"llvm/Support/Compiler.h\"\n";
203204
OS << "#include <cstddef>\n"; // for size_t
204205
OS << "\n";
205206
OS << "namespace llvm {\n";
@@ -242,26 +243,27 @@ static void EmitDirectivesDecl(const RecordKeeper &Records, raw_ostream &OS) {
242243
// Generic function signatures
243244
OS << "\n";
244245
OS << "// Enumeration helper functions\n";
245-
OS << "Directive get" << DirLang.getName()
246+
OS << "LLVM_ABI Directive get" << DirLang.getName()
246247
<< "DirectiveKind(llvm::StringRef Str);\n";
247248
OS << "\n";
248-
OS << "llvm::StringRef get" << DirLang.getName()
249+
OS << "LLVM_ABI llvm::StringRef get" << DirLang.getName()
249250
<< "DirectiveName(Directive D);\n";
250251
OS << "\n";
251-
OS << "Clause get" << DirLang.getName()
252+
OS << "LLVM_ABI Clause get" << DirLang.getName()
252253
<< "ClauseKind(llvm::StringRef Str);\n";
253254
OS << "\n";
254-
OS << "llvm::StringRef get" << DirLang.getName() << "ClauseName(Clause C);\n";
255+
OS << "LLVM_ABI llvm::StringRef get" << DirLang.getName()
256+
<< "ClauseName(Clause C);\n";
255257
OS << "\n";
256258
OS << "/// Return true if \\p C is a valid clause for \\p D in version \\p "
257259
<< "Version.\n";
258-
OS << "bool isAllowedClauseForDirective(Directive D, "
260+
OS << "LLVM_ABI bool isAllowedClauseForDirective(Directive D, "
259261
<< "Clause C, unsigned Version);\n";
260262
OS << "\n";
261263
OS << "constexpr std::size_t getMaxLeafCount() { return "
262264
<< GetMaxLeafCount(DirLang) << "; }\n";
263-
OS << "Association getDirectiveAssociation(Directive D);\n";
264-
OS << "Category getDirectiveCategory(Directive D);\n";
265+
OS << "LLVM_ABI Association getDirectiveAssociation(Directive D);\n";
266+
OS << "LLVM_ABI Category getDirectiveCategory(Directive D);\n";
265267
if (EnumHelperFuncs.length() > 0) {
266268
OS << EnumHelperFuncs;
267269
OS << "\n";

0 commit comments

Comments
 (0)