1//===- TableGenBackends.h - Declarations for Clang TableGen Backends ------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains the declarations for all of the Clang TableGen
10// backends. A "TableGen backend" is just a function. See
11// "$LLVM_ROOT/utils/TableGen/TableGenBackends.h" for more info.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_CLANG_UTILS_TABLEGEN_TABLEGENBACKENDS_H
16#define LLVM_CLANG_UTILS_TABLEGEN_TABLEGENBACKENDS_H
17
18#include <string>
19
20namespace llvm {
21class raw_ostream;
22class RecordKeeper;
23} // namespace llvm
24
25namespace clang {
26
27void EmitCIRLowering(const llvm::RecordKeeper &RK, llvm::raw_ostream &OS);
28void EmitClangDeclContext(const llvm::RecordKeeper &RK, llvm::raw_ostream &OS);
29/**
30 @param PriorizeIfSubclassOf These classes should be prioritized in the output.
31 This is useful to force enum generation/jump tables/lookup tables to be more
32 compact in both size and surrounding code in hot functions. An example use is
33 in Decl for classes that inherit from DeclContext, for functions like
34 castFromDeclContext.
35 */
36void EmitClangASTNodes(const llvm::RecordKeeper &RK, llvm::raw_ostream &OS,
37 const std::string &N, const std::string &S,
38 std::string_view PriorizeIfSubclassOf = "");
39void EmitClangBasicReader(const llvm::RecordKeeper &Records,
40 llvm::raw_ostream &OS);
41void EmitClangBasicWriter(const llvm::RecordKeeper &Records,
42 llvm::raw_ostream &OS);
43void EmitClangTypeNodes(const llvm::RecordKeeper &Records,
44 llvm::raw_ostream &OS);
45void EmitClangTypeReader(const llvm::RecordKeeper &Records,
46 llvm::raw_ostream &OS);
47void EmitClangTypeWriter(const llvm::RecordKeeper &Records,
48 llvm::raw_ostream &OS);
49void EmitClangAttrParserStringSwitches(const llvm::RecordKeeper &Records,
50 llvm::raw_ostream &OS);
51void EmitClangAttrSubjectMatchRulesParserStringSwitches(
52 const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
53void EmitCXX11AttributeInfo(const llvm::RecordKeeper &Records,
54 llvm::raw_ostream &OS);
55void EmitAttributeSpellingList(const llvm::RecordKeeper &Records,
56 llvm::raw_ostream &OS);
57void EmitClangAttrClass(const llvm::RecordKeeper &Records,
58 llvm::raw_ostream &OS);
59void EmitClangAttrImpl(const llvm::RecordKeeper &Records,
60 llvm::raw_ostream &OS);
61void EmitClangAttrList(const llvm::RecordKeeper &Records,
62 llvm::raw_ostream &OS);
63void EmitClangAttrSubjectMatchRuleList(const llvm::RecordKeeper &Records,
64 llvm::raw_ostream &OS);
65void EmitClangAttrPCHRead(const llvm::RecordKeeper &Records,
66 llvm::raw_ostream &OS);
67void EmitClangAttrPCHWrite(const llvm::RecordKeeper &Records,
68 llvm::raw_ostream &OS);
69void EmitClangRegularKeywordAttributeInfo(const llvm::RecordKeeper &Records,
70 llvm::raw_ostream &OS);
71void EmitClangAttrHasAttrImpl(const llvm::RecordKeeper &Records,
72 llvm::raw_ostream &OS);
73void EmitClangAttrSpellingListIndex(const llvm::RecordKeeper &Records,
74 llvm::raw_ostream &OS);
75void EmitClangAttrASTVisitor(const llvm::RecordKeeper &Records,
76 llvm::raw_ostream &OS);
77void EmitClangAttrTemplateInstantiate(const llvm::RecordKeeper &Records,
78 llvm::raw_ostream &OS);
79void EmitClangAttrParsedAttrList(const llvm::RecordKeeper &Records,
80 llvm::raw_ostream &OS);
81void EmitClangAttrParsedAttrImpl(const llvm::RecordKeeper &Records,
82 llvm::raw_ostream &OS);
83void EmitClangAttrParsedAttrKinds(const llvm::RecordKeeper &Records,
84 llvm::raw_ostream &OS);
85void EmitClangAttrIsTypeDependent(const llvm::RecordKeeper &Records,
86 llvm::raw_ostream &OS);
87void EmitClangAttrTextNodeDump(const llvm::RecordKeeper &Records,
88 llvm::raw_ostream &OS);
89void EmitClangAttrNodeTraverse(const llvm::RecordKeeper &Records,
90 llvm::raw_ostream &OS);
91void EmitClangAttrDocTable(const llvm::RecordKeeper &Records,
92 llvm::raw_ostream &OS);
93
94void EmitClangBuiltins(const llvm::RecordKeeper &Records,
95 llvm::raw_ostream &OS);
96void EmitClangBuiltinDocs(const llvm::RecordKeeper &Records,
97 llvm::raw_ostream &OS);
98void EmitClangBuiltinTemplates(const llvm::RecordKeeper &Records,
99 llvm::raw_ostream &OS);
100
101void EmitClangDiagsCompatIDs(const llvm::RecordKeeper &Records,
102 llvm::raw_ostream &OS,
103 const std::string &Component);
104void EmitClangDiagsDefs(const llvm::RecordKeeper &Records,
105 llvm::raw_ostream &OS, const std::string &Component);
106void EmitClangDiagsEnums(const llvm::RecordKeeper &Records,
107 llvm::raw_ostream &OS, const std::string &Component);
108void EmitClangDiagGroups(const llvm::RecordKeeper &Records,
109 llvm::raw_ostream &OS);
110void EmitClangDiagsIndexName(const llvm::RecordKeeper &Records,
111 llvm::raw_ostream &OS);
112void EmitClangDiagsStableIDs(const llvm::RecordKeeper &Records,
113 llvm::raw_ostream &OS);
114void EmitClangDiagsInterface(llvm::raw_ostream &OS,
115 const std::string &Component);
116
117void EmitClangSACheckers(const llvm::RecordKeeper &Records,
118 llvm::raw_ostream &OS);
119
120void EmitClangCommentHTMLTags(const llvm::RecordKeeper &Records,
121 llvm::raw_ostream &OS);
122void EmitClangCommentHTMLTagsProperties(const llvm::RecordKeeper &Records,
123 llvm::raw_ostream &OS);
124void EmitClangCommentHTMLNamedCharacterReferences(
125 const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
126
127void EmitClangCommentCommandInfo(const llvm::RecordKeeper &Records,
128 llvm::raw_ostream &OS);
129void EmitClangCommentCommandList(const llvm::RecordKeeper &Records,
130 llvm::raw_ostream &OS);
131void EmitClangOpcodes(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
132
133void EmitClangSyntaxNodeList(const llvm::RecordKeeper &Records,
134 llvm::raw_ostream &OS);
135void EmitClangSyntaxNodeClasses(const llvm::RecordKeeper &Records,
136 llvm::raw_ostream &OS);
137
138void EmitNeon(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
139void EmitFP16(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
140void EmitBF16(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
141void EmitNeonSema(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
142void EmitVectorTypes(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
143void EmitNeonTest(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
144
145void EmitImmCheckTypes(const llvm::RecordKeeper &Records,
146 llvm::raw_ostream &OS);
147void EmitSveHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
148void EmitSveBuiltins(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
149void EmitSveBuiltinsJSON(const llvm::RecordKeeper &Records,
150 llvm::raw_ostream &OS);
151void EmitSveBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
152void EmitSveTypeFlags(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
153void EmitSveRangeChecks(const llvm::RecordKeeper &Records,
154 llvm::raw_ostream &OS);
155void EmitSveStreamingAttrs(const llvm::RecordKeeper &Records,
156 llvm::raw_ostream &OS);
157
158void EmitSmeHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
159void EmitSmeBuiltins(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
160void EmitSmeBuiltinsJSON(const llvm::RecordKeeper &Records,
161 llvm::raw_ostream &OS);
162void EmitSmeBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
163void EmitSmeRangeChecks(const llvm::RecordKeeper &Records,
164 llvm::raw_ostream &OS);
165void EmitSmeStreamingAttrs(const llvm::RecordKeeper &Records,
166 llvm::raw_ostream &OS);
167void EmitSmeBuiltinZAState(const llvm::RecordKeeper &Records,
168 llvm::raw_ostream &OS);
169
170void EmitMveHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
171void EmitMveBuiltinDef(const llvm::RecordKeeper &Records,
172 llvm::raw_ostream &OS);
173void EmitMveBuiltinSema(const llvm::RecordKeeper &Records,
174 llvm::raw_ostream &OS);
175void EmitMveBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
176void EmitMveBuiltinAliases(const llvm::RecordKeeper &Records,
177 llvm::raw_ostream &OS);
178
179void EmitRVVHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
180void EmitRVVBuiltins(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
181void EmitRVVBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
182void EmitRVVBuiltinSema(const llvm::RecordKeeper &Records,
183 llvm::raw_ostream &OS);
184
185void EmitCdeHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
186void EmitCdeBuiltinDef(const llvm::RecordKeeper &Records,
187 llvm::raw_ostream &OS);
188void EmitCdeBuiltinSema(const llvm::RecordKeeper &Records,
189 llvm::raw_ostream &OS);
190void EmitCdeBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
191void EmitCdeBuiltinAliases(const llvm::RecordKeeper &Records,
192 llvm::raw_ostream &OS);
193
194void EmitClangAttrDocs(const llvm::RecordKeeper &Records,
195 llvm::raw_ostream &OS);
196void EmitClangDiagDocs(const llvm::RecordKeeper &Records,
197 llvm::raw_ostream &OS);
198void EmitClangOptDocs(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
199
200void EmitClangOpenCLBuiltins(const llvm::RecordKeeper &Records,
201 llvm::raw_ostream &OS);
202void EmitClangOpenCLBuiltinHeader(const llvm::RecordKeeper &Records,
203 llvm::raw_ostream &OS);
204void EmitClangOpenCLBuiltinTests(const llvm::RecordKeeper &Records,
205 llvm::raw_ostream &OS);
206
207void EmitClangDataCollectors(const llvm::RecordKeeper &Records,
208 llvm::raw_ostream &OS);
209
210void EmitTestPragmaAttributeSupportedAttributes(
211 const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
212
213} // end namespace clang
214
215#endif
216