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