Skip to content

Commit 47466b4

Browse files
committed
[TableGen] Add explicit symbol visibility macros to code generated
Update llvm's TableGen to add explicit symbol visibility macros to function declarations it creates The symbols need to be export from llvm's shared library for Clang and some OpenMP tests
1 parent 11eae67 commit 47466b4

File tree

3 files changed

+33
-28
lines changed

3 files changed

+33
-28
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: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,15 @@ static void GenerateEnumClauseVal(const std::vector<Record *> &Records,
111111
<< "llvm::" << DirLang.getCppNamespace() << "::" << EnumName
112112
<< "::" << CV->getName() << ";\n";
113113
}
114-
EnumHelperFuncs += (llvm::Twine(EnumName) + llvm::Twine(" get") +
115-
llvm::Twine(EnumName) + llvm::Twine("(StringRef);\n"))
114+
EnumHelperFuncs += (llvm::Twine("LLVM_ABI ") + llvm::Twine(EnumName) +
115+
llvm::Twine(" get") + llvm::Twine(EnumName) +
116+
llvm::Twine("(StringRef);\n"))
116117
.str();
117118

118119
EnumHelperFuncs +=
119-
(llvm::Twine("llvm::StringRef get") + llvm::Twine(DirLang.getName()) +
120-
llvm::Twine(EnumName) + llvm::Twine("Name(") +
121-
llvm::Twine(EnumName) + llvm::Twine(");\n"))
120+
(llvm::Twine("LLVM_ABI llvm::StringRef get") +
121+
llvm::Twine(DirLang.getName()) + llvm::Twine(EnumName) +
122+
llvm::Twine("Name(") + llvm::Twine(EnumName) + llvm::Twine(");\n"))
122123
.str();
123124
}
124125
}
@@ -205,6 +206,7 @@ static void EmitDirectivesDecl(RecordKeeper &Records, raw_ostream &OS) {
205206
if (DirLang.hasEnableBitmaskEnumInNamespace())
206207
OS << "#include \"llvm/ADT/BitmaskEnum.h\"\n";
207208

209+
OS << "#include \"llvm/Support/Compiler.h\"\n";
208210
OS << "#include <cstddef>\n"; // for size_t
209211
OS << "\n";
210212
OS << "namespace llvm {\n";
@@ -248,26 +250,27 @@ static void EmitDirectivesDecl(RecordKeeper &Records, raw_ostream &OS) {
248250
// Generic function signatures
249251
OS << "\n";
250252
OS << "// Enumeration helper functions\n";
251-
OS << "Directive get" << DirLang.getName()
253+
OS << "LLVM_ABI Directive get" << DirLang.getName()
252254
<< "DirectiveKind(llvm::StringRef Str);\n";
253255
OS << "\n";
254-
OS << "llvm::StringRef get" << DirLang.getName()
256+
OS << "LLVM_ABI llvm::StringRef get" << DirLang.getName()
255257
<< "DirectiveName(Directive D);\n";
256258
OS << "\n";
257-
OS << "Clause get" << DirLang.getName()
259+
OS << "LLVM_ABI Clause get" << DirLang.getName()
258260
<< "ClauseKind(llvm::StringRef Str);\n";
259261
OS << "\n";
260-
OS << "llvm::StringRef get" << DirLang.getName() << "ClauseName(Clause C);\n";
262+
OS << "LLVM_ABI llvm::StringRef get" << DirLang.getName()
263+
<< "ClauseName(Clause C);\n";
261264
OS << "\n";
262265
OS << "/// Return true if \\p C is a valid clause for \\p D in version \\p "
263266
<< "Version.\n";
264-
OS << "bool isAllowedClauseForDirective(Directive D, "
267+
OS << "LLVM_ABI bool isAllowedClauseForDirective(Directive D, "
265268
<< "Clause C, unsigned Version);\n";
266269
OS << "\n";
267270
OS << "constexpr std::size_t getMaxLeafCount() { return "
268271
<< GetMaxLeafCount(DirLang) << "; }\n";
269-
OS << "Association getDirectiveAssociation(Directive D);\n";
270-
OS << "Category getDirectiveCategory(Directive D);\n";
272+
OS << "LLVM_ABI Association getDirectiveAssociation(Directive D);\n";
273+
OS << "LLVM_ABI Category getDirectiveCategory(Directive D);\n";
271274
if (EnumHelperFuncs.length() > 0) {
272275
OS << EnumHelperFuncs;
273276
OS << "\n";

0 commit comments

Comments
 (0)