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 EmitClangUndocumentedAttrList(const llvm::RecordKeeper &Records,
92 llvm::raw_ostream &OS);
93void EmitClangAttrDocTable(const llvm::RecordKeeper &Records,
94 llvm::raw_ostream &OS);
95
96void EmitClangBuiltins(const llvm::RecordKeeper &Records,
97 llvm::raw_ostream &OS);
98void EmitClangBuiltinDocs(const llvm::RecordKeeper &Records,
99 llvm::raw_ostream &OS);
100void EmitClangBuiltinTemplates(const llvm::RecordKeeper &Records,
101 llvm::raw_ostream &OS);
102
103void EmitClangDiagsCompatIDs(const llvm::RecordKeeper &Records,
104 llvm::raw_ostream &OS,
105 const std::string &Component);
106void EmitClangDiagsDefs(const llvm::RecordKeeper &Records,
107 llvm::raw_ostream &OS, const std::string &Component);
108void EmitClangDiagsEnums(const llvm::RecordKeeper &Records,
109 llvm::raw_ostream &OS, const std::string &Component);
110void EmitClangDiagGroups(const llvm::RecordKeeper &Records,
111 llvm::raw_ostream &OS);
112void EmitClangDiagsIndexName(const llvm::RecordKeeper &Records,
113 llvm::raw_ostream &OS);
114void EmitClangDiagsStableIDs(const llvm::RecordKeeper &Records,
115 llvm::raw_ostream &OS);
116void EmitClangDiagsInterface(llvm::raw_ostream &OS,
117 const std::string &Component);
118
119void EmitClangSACheckers(const llvm::RecordKeeper &Records,
120 llvm::raw_ostream &OS);
121
122void EmitClangCommentHTMLTags(const llvm::RecordKeeper &Records,
123 llvm::raw_ostream &OS);
124void EmitClangCommentHTMLTagsProperties(const llvm::RecordKeeper &Records,
125 llvm::raw_ostream &OS);
126void EmitClangCommentHTMLNamedCharacterReferences(
127 const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
128
129void EmitClangCommentCommandInfo(const llvm::RecordKeeper &Records,
130 llvm::raw_ostream &OS);
131void EmitClangCommentCommandList(const llvm::RecordKeeper &Records,
132 llvm::raw_ostream &OS);
133void EmitClangOpcodes(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
134
135void EmitClangSyntaxNodeList(const llvm::RecordKeeper &Records,
136 llvm::raw_ostream &OS);
137void EmitClangSyntaxNodeClasses(const llvm::RecordKeeper &Records,
138 llvm::raw_ostream &OS);
139
140void EmitNeon(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
141void EmitFP16(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
142void EmitBF16(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
143void EmitNeonSema(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
144void EmitVectorTypes(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
145void EmitNeonTest(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
146
147void EmitImmCheckTypes(const llvm::RecordKeeper &Records,
148 llvm::raw_ostream &OS);
149void EmitSveHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
150void EmitSveBuiltins(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
151void EmitSveBuiltinsJSON(const llvm::RecordKeeper &Records,
152 llvm::raw_ostream &OS);
153void EmitSveBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
154void EmitSveTypeFlags(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
155void EmitSveRangeChecks(const llvm::RecordKeeper &Records,
156 llvm::raw_ostream &OS);
157void EmitSveStreamingAttrs(const llvm::RecordKeeper &Records,
158 llvm::raw_ostream &OS);
159
160void EmitSmeHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
161void EmitSmeBuiltins(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
162void EmitSmeBuiltinsJSON(const llvm::RecordKeeper &Records,
163 llvm::raw_ostream &OS);
164void EmitSmeBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
165void EmitSmeRangeChecks(const llvm::RecordKeeper &Records,
166 llvm::raw_ostream &OS);
167void EmitSmeStreamingAttrs(const llvm::RecordKeeper &Records,
168 llvm::raw_ostream &OS);
169void EmitSmeBuiltinZAState(const llvm::RecordKeeper &Records,
170 llvm::raw_ostream &OS);
171
172void EmitMveHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
173void EmitMveBuiltinDef(const llvm::RecordKeeper &Records,
174 llvm::raw_ostream &OS);
175void EmitMveBuiltinSema(const llvm::RecordKeeper &Records,
176 llvm::raw_ostream &OS);
177void EmitMveBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
178void EmitMveBuiltinAliases(const llvm::RecordKeeper &Records,
179 llvm::raw_ostream &OS);
180
181void EmitRVVHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
182void EmitRVVBuiltins(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
183void EmitRVVBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
184void EmitRVVBuiltinSema(const llvm::RecordKeeper &Records,
185 llvm::raw_ostream &OS);
186
187void EmitCdeHeader(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
188void EmitCdeBuiltinDef(const llvm::RecordKeeper &Records,
189 llvm::raw_ostream &OS);
190void EmitCdeBuiltinSema(const llvm::RecordKeeper &Records,
191 llvm::raw_ostream &OS);
192void EmitCdeBuiltinCG(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
193void EmitCdeBuiltinAliases(const llvm::RecordKeeper &Records,
194 llvm::raw_ostream &OS);
195
196void EmitHLSLAliasIntrinsics(const llvm::RecordKeeper &Records,
197 llvm::raw_ostream &OS);
198void EmitHLSLInlineIntrinsics(const llvm::RecordKeeper &Records,
199 llvm::raw_ostream &OS);
200
201void EmitClangAttrDocs(const llvm::RecordKeeper &Records,
202 llvm::raw_ostream &OS);
203void EmitClangDiagDocs(const llvm::RecordKeeper &Records,
204 llvm::raw_ostream &OS);
205void EmitClangOptDocs(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
206
207void EmitClangOpenCLBuiltins(const llvm::RecordKeeper &Records,
208 llvm::raw_ostream &OS);
209void EmitClangOpenCLBuiltinHeader(const llvm::RecordKeeper &Records,
210 llvm::raw_ostream &OS);
211void EmitClangOpenCLBuiltinTests(const llvm::RecordKeeper &Records,
212 llvm::raw_ostream &OS);
213
214void EmitClangDataCollectors(const llvm::RecordKeeper &Records,
215 llvm::raw_ostream &OS);
216
217void EmitTestPragmaAttributeSupportedAttributes(
218 const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
219
220} // end namespace clang
221
222#endif
223