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